Setupify is a Phalcon provisioning and development tool.

Overview

Setupify Provisioning Tool

WARNING: Setupify is currently in a state of experimentation. Use tag release.

Setupify is a collection of bash scripts for provisioning a system. The included scripts emphasizes PHP and Zephir based tech, although it could be adapted to any use. The bash scripts use only the most typical shell commands and so they should be portable to any modern Unix-like environment. Also included is a robust and optional dialog or whiptail shell menu program. One huge benefit of using Setupify as your starting point is that you can easily transition from PHP to Zephir based development.

Intended Uses

  • Quick and flexible provisioning of a Zephir/Phalcon environment for development or testing.
  • As a starting point for provisioning a prioprietary application stack. In this case its a simple matter to delete sections and files before starting your enhancements.
  • As a starting point for any open source Phalcon or Zephir based tech stack

How to start

In the setup/ directory there are three files; install, menu and settings.

By running ./setup/install without any arguments you will see the following:

dschissler@setupify:~/setupify$ ./setup/install
An OS name must be specified for provisioning.
Possible OS names include:
ubuntu1804

So you would run ./setup/install ubuntu1804 to start the automated provisioning. Setupify will first obtain sudo permissions for later use.

Menu Assisted Provisioning

Setupify includes a powerful dialog or whiptail menu wizard. To run the menu program call:

./setup/menu

You will see a screen for choosing the operating system.

Setupify Menu Overview

You may bypass this screen by supplying the operating system from the command line:

./setup/menu ubuntu1804

Next you will see the overview screen. Select the "Load Everything" entry.

Setupify Menu Overview

We'll choose the "Customize" menu item. Notice how the installers are now defined.

Setupify Customize Overview

If you were to choose "Install" at this point it would enter the automated provisioning in the exact same way as if you ran ./setup/install ubuntu1804.

Instead we'll first customize the "Phalcon" installer. So Overview --> Customize --> Phalcon.

Setupify Customize Overview

Phalcon may be installed from; the official repository, tarball or git repository. We'll choose the respository method.

Phalcon Install Method

We'll choose the nightly channel. This is an easy way to get the latest Phalcon code.

Phalcon Repository Channel

Since we're developing a PHP extension that uses the latest Zephir language features we're going to want the latest tech.

We'll choose the "Git" installaton method.

Zephir Install Method

Enter the URL to the Zephir git repository. The default value should be the official Zephir location. If you were working on improving Zephir then you could choose your own forked repository.

Zephir Git Url

Choose the default "development" branch.

Zephir Git Branch

In this example we'll pretend that we've already provisioned the system and so we'll want to skip some of the time intensive operations. Choose the "Interests" item from the "Customize" menu.

Zephir Git Branch

Now make sure the PACKAGES and PECL check boxes are deselected. This will skip some some unnecessary steps. This is most useful when developing so that you don't need to continually wait for irrelevant processes.

Zephir Git Branch

Finally return to the Overview screen. Notice that the installer methods are different than they first appeared. You are now ready to provision using the non-default methods.

Zephir Git Branch

Create Custom Menus

Setupify allows you to easily create custom menus. The setup/lib/section/ directory contains sections which may each have an optional menu. Setupify provides the following helper menus; menuTarball, menuGit, menuRepository, menuPhar. To create a new custom menu item simple create a new section directory and place a new menu file inside of it.

Create a helloworld menu with installer default

Create an empty setup/lib/section/helloworld/menu_helloworld.sh file. This file does't need to be set as executable since it will be sourced instead of run directly.

Create a data file setup/lib/section/helloworld/data.sh

HELLOWORLD_DEFAULT=tarball:555.5555

Notice the HELLOWORLD installer in the status section as well as the helloworld menu item.

Zephir Git Branch

Note: This is a hack to quickly demonstrate how to add new setupify functionality. To do this properly you will need to follow the conventions laid out in the other section menus in the setup/lib/sections/ directory.

Installer Definitions

Setupify is based around environment variable installer definitions. For example the PHALCON_INSTALLER variable describes both the method and version for installing Phalcon. The installer variable is broken into two or three colon delineated sections depending on the installer method. Some installer methods need more information than others.

Here is the default Phalcon installer definition. It states that Phalcon should be installed from the official stable repository.

PHALCON_INSTALLER=repository:stable

Here is a Phalcon installer definition for installing from the 4.0.5 tarball from the official releases.

PHALCON_INSTALLER=tarball:4.0.5

This installs the same version but instead uses the tarball URL.

PHALCON_INSTALLER=tarball:https://github.com/phalcon/cphalcon/archive/v4.0.5.tar.gz

It can also be used to install from a downloaded tarball.

PHALCON_INSTALLER=tarball:file:///home/dschissler/v4.0.5.tar.gz

Finally here is a git example. Notice that there are three sections delineated by a colon. Note that it reads from the left and so the colon in the https: is ignored.

PHALCON_INSTALLER=git:3.4.x:https://github.com/cphalcon/cphalcon.git

For Zephir lets look at the installer method for using a PHAR program.

ZCOMPILER_INSTALLER=phar:0.12.18

Again a full URL can be used

ZCOMPILER_INSTALLER=phar:https://github.com/phalcon/zephir/releases/download/0.12.18/zephir.phar

Alternative and more persistent settings

  1. You may define your installers and other settings in ./setup/settings.

  2. You may also export your installer definitions from the shell. For example these commands will change the Phalcon repository to mainline without modifying setup/settings:

dschissler@setupify:~/setupify$ export PHALCON_INSTALLER=repository:mainline
dschissler@setupify:~/setupify$ ./setup/install ubuntu1804

This could be useful if you were going to be testing the provision many times from a single terminal.

Powerful init.d provisioning stages

Setupify provides powerful staged init scripts for configuring the system package manager, zephir_parser, Zephir and Phalcon.

To start look at the setup/os/ubuntu1804/ directory. You will see one file; os.sh and three directories init.d/, functions/ and lists/.

Basic OS Parts

  • os.sh defines operating specific settings. If you port setupify to a new OS or add capabilities to your init scripts then you'll likely want to change some of the settings.
  • functions/ defines OS specific functions. Define functions here and they will be available in the init scripts.
  • lists/ stores basic lists like package names. Inside is the package and pecl files which simply list out the packages to install. This way you don't need to define your package lists in bash code. You can comment out lines in the lists by starting them with a hash.

init.d Scripts The init.d/ directory is filled with number ordered executable scripts. For example script 00-foo.sh runs before 01-fee.sh. If ordering is an important matter then it is advised to not rely on alphabetic ordering of the name part but to instead assign the script a different numbered prefix.

Out of the box the init scripts currently installs; system packages, PECL packages, zephir_parser, Zephir, Phalcon and Node.js. At the moment you will need to setup a database and web server yourself. There are just two many combinations for an initial release.

Interest Sections

You can create "interest" environment variables within your init.d scripts that will allow you to toggle the execution of blocks of code or to completely skip the contents of a script. Setupify will scan your code for any ^[A-Z]+_INTEREST$ variable patterns in your code.

Here is a typical example of what happens when an interest is not defined:

[[ -z "$PECL_INTEREST" ]] && exit 0

There are two standard ways to use interests depending on if the install or menu script is used.

  1. The ./setup/install script is designed to be a one-stop-shop for installing a base system and so it will activate all interests in order to perform every operation.

  2. Te ./setup/menu script starts with all interests disabled in order to allow you to turn on individual interests during the development process. You may turn on interests by specifying "Load everything" from the main menu or by enabling individual interests in the "Interests" customize menu. This is a core philosophical feature of setupify in that it allows you to use the same provision script for deployment as well as trying out new software versions during development.

In order to achieve the desired usability of setupify, please make sure that any operations peformed in your init.d scripts are indepotent. For example: that means if a user is added to something that running the script again will not have a negative effect on the system either; by first checking that the user exists or by checking that adding the user again will not break anything or result in multiple entries. If you can test each system modification for initial install as well as when it is performed a second time then you will be able to enjoy a production provisioning system that also doubles as an amazing development tool.

Being able to manually define interests can be exceedingly useful when developing new tech or testing your custom provisioning steps. If the answer to the question "Do I really want to wait for my PECL PHP extensions to compile each time that I check something?" is a "No!" then consider not turning on that interests steps while running the menu script.

Low tech script avoidance

Additionally a low tech way to skip an entire init.d init script is to temporary rename it be prefixed with the hash character. For example renaming 01-foo.sh to #01-foo.sh will cause it be ignored. This is a great low tech way of debugging your custom init.d scripts.

Init Script Failure

Sometimes your init scripts will fail. If any init script exits with a value other than 0 then the provisioning will be halted with an error message of the offending script.

License

Setupify is licensed under the terms of LGPL v3.

You might also like...
RedisPlugin for Phalcon

RedisPlugin for Phalcon (The correspondence of MySQL sharding.) Composer { "require": { "ienaga/phalcon-redis-plugin": "3.*" } } Versio

Easy Repository pattern for PHP Phalcon framework.

Phalcon Repositories Introduction Phalcon Repositories lets you easily build repositories for your Phalcon models, for both SQL and Mongo drivers. PHP

Phalcon devtools

Yarak yarak - (Falconry) a state of prime fitness in a falcon Laravel inspired Phalcon devtools Database migrations that rollback step-by-step, reset

Incubator adapters/functionality for the Phalcon PHP Framework

Phalcon Incubator This is a repository to publish/share/experiment with new adapters, prototypes or functionality that can potentially be incorporated

PHP Profiler & Developer Toolbar (built for Phalcon)
PHP Profiler & Developer Toolbar (built for Phalcon)

Prophiler - A PHP Profiler & Developer Toolbar built for Phalcon Demo The demo website has been moved to a separate repository: https://github.com/fab

phalcon config loader for yaml

Phalcon Config Loarder for Yaml Loads all the yml in the directory of the app/config. Version PHP: 7.0.x, 7.1.x, 7.2.x Phalcon: 3.x Composer { "r

Phalcon cli template

Phalcon cli template This is just sample boostraping application for command line applications using the outstanding Phalcon Framework. Installation J

CMS based on Phalcon PHP Framework with modular structure

Yona CMS Yona CMS - open source content management system (CMS). Written in Phalcon PHP Framework (version 3.x supported) Has a convenient modular str

Движок блог-лайк на фрейморвке Phalcon

Skopy Skopy - это простой движок блога на фреймворке Phalcon 3. Для работы блога необходимо скачать и установить Phalcon на сервер. Инструкции можно п

Comments
Releases(setupify_v0.2.0)
Owner
Perch Labs
Full Stack Technology
Perch Labs
A Phalcon paginator adapter for Phalcon Collections

Phalcon Collection Paginator A Phalcon paginator adapter for Phalcon Collections Why create this? Being familiar with the various Pagination data adap

Angel S. Moreno 2 Oct 7, 2022
PHP_Depend is an adaptation of the established Java development tool JDepend. This tool shows you the quality of your design in terms of extensibility, reusability and maintainability.

PHP Depend Documentation PHP Depend for enterprise Available as part of the Tidelift Subscription. The maintainers of PHP Depend and thousands of othe

PHP_Depend 837 Dec 14, 2022
A powerful debug and profilers tool for the Phalcon Framework

Phalcon Debugbar Integrates PHP Debug Bar with Phalcon Framework. 中文说明 Features Normal request capturing Ajax request capturing Redirect request chain

Yajie Zhu 162 Oct 7, 2022
Time registration tool build with Phalcon

PhalconTime Application PhalconTime is a timekeeping tool that helps you track hours spend on clients and projects. Please write me if you have any fe

null 6 Oct 7, 2022
Phalcon 3.x BB Debugger Strong and easy install.

Phalcon BB Debugger Phalcon Version: 3.x BB Debugger Version: 1.0.3 Change Log See ChangeLog What is BB Debugger ? The bb debugger, written for the ph

İsmail 6 Oct 7, 2022
Phalcon Demo Application

Phalcon Demo Application We use modified Phalcon INVO Application to demonstrate basics of Codeception testing. We expect to implement as many feature

Codeception Testing Framework 42 Oct 7, 2022
Phalcon official Forum

Phosphorum 3 Phosphorum is an engine for building flexible, clear and fast forums. You can adapt it to your own needs or improve it if you want. Pleas

The Phalcon PHP Framework 361 Dec 27, 2022
Phalcon PHP Meta tags Service

About Phalcon meta tags plugin for PhalconPHP. This plugin allows you to easily and flexibly customize the meta tags of your view. If this plugin help

null 12 Oct 7, 2022
Implementation of an API application using the Phalcon Framework

phalcon-api Sample API using Phalcon Implementation of an API application using the Phalcon Framework https://phalcon.io Installation Clone the projec

The Phalcon PHP Framework 81 Dec 15, 2022
A composer package designed to help you create a JSON:API in Phalcon

phalcon-json-api-package A composer package designed to help you create a JSON:API in Phalcon What happens when a PHP developer wants to create an API

Jim 36 Oct 7, 2022