diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..114e85a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +php-src + diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf new file mode 100644 index 0000000..ff0f30b --- /dev/null +++ b/conf/php-fpm.conf @@ -0,0 +1,6 @@ +[global] + +pid = /var/run/php7-fpm.pid +error_log = /var/log/php7-fpm.log + +include=/usr/local/php7/etc/php-fpm.d/*.conf diff --git a/conf/php7-fpm.init b/conf/php7-fpm.init new file mode 100755 index 0000000..9002f8b --- /dev/null +++ b/conf/php7-fpm.init @@ -0,0 +1,185 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: php-fpm php7-fpm +# Required-Start: $remote_fs $network +# Required-Stop: $remote_fs $network +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: starts php7-fpm +# Description: Starts The PHP FastCGI Process Manager Daemon +### END INIT INFO + +# Author: Ondrej Sury +# Adjusted for PHP7 by Kaspars Dambis + +PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/php7/sbin +DESC="PHP7 FastCGI Process Manager" +NAME=php7-fpm +DAEMON=/usr/local/php7/sbin/$NAME +CONFFILE=/usr/local/php7/etc/php-fpm.conf +DAEMON_ARGS="--daemonize --fpm-config $CONFILE" +CONF_PIDFILE=$(sed -n 's/^pid[ =]*//p' $CONFFILE) +PIDFILE=${CONF_PIDFILE:-/var/run/php7-fpm.pid} +TIMEOUT=30 +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. +. /lib/lsb/init-functions + +# Don't run if we are running upstart +if init_is_upstart; then + exit 1 +fi + +# +# Function to check the correctness of the config file +# +do_check() +{ + # Run php-fpm with -t option to check the configuration file syntax + errors=$($DAEMON --fpm-config $CONFFILE -t 2>&1 | grep "\[ERROR\]" || true); + if [ -n "$errors" ]; then + echo "Please fix your configuration file..." + echo $errors + return 1 + fi + return 0 +} + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ + $DAEMON_ARGS 2>/dev/null \ + || return 2 + # Add code here, if necessary, that waits for the process to be ready + # to handle requests from services started subsequently which depend + # on this one. As a last resort, sleep for some time. +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --quiet --retry=QUIT/$TIMEOUT/TERM/5/KILL/5 --pidfile $PIDFILE --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + # Wait for children to finish too if this is a daemon that forks + # and if the daemon is only ever run from this initscript. + # If the above conditions are not satisfied then add some other code + # that waits for the process to drop all resources that could be + # needed by services started subsequently. A last resort is to + # sleep for some time. + start-stop-daemon --stop --quiet --oknodo --retry=0/30/TERM/5/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" +} + +# +# Function that sends a SIGHUP to the daemon/service +# +do_reload() { + # + # If the daemon can reload its configuration without + # restarting (for example, when it is sent a SIGHUP), + # then implement that here. + # + start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME + return 0 +} + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" + do_check $VERBOSE + case "$?" in + 0) + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + 1) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + check) + do_check yes + ;; + reload|force-reload) + log_daemon_msg "Reloading $DESC" "$NAME" + do_reload + log_end_msg $? + ;; + reopen-logs) + log_daemon_msg "Reopening $DESC logs" $NAME + if start-stop-daemon --stop --signal USR1 --oknodo --quiet \ + --pidfile $PIDFILE --exec $DAEMON + then + log_end_msg 0 + else + log_end_msg 1 + fi + ;; + restart) + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2 + exit 1 + ;; +esac + +: diff --git a/conf/www.conf b/conf/www.conf new file mode 100644 index 0000000..0d9fa3b --- /dev/null +++ b/conf/www.conf @@ -0,0 +1,12 @@ +[www] + +user = www-data +group = www-data + +listen = 127.0.0.1:9007 + +pm = dynamic +pm.max_children = 5 +pm.start_servers = 2 +pm.min_spare_servers = 1 +pm.max_spare_servers = 3 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..b826fe6 --- /dev/null +++ b/install.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +# PHP 7 + +# Dependencies +apt-get update +apt-get install -y \ + build-essential \ + git-core \ + autoconf \ + bison \ + libxml2-dev \ + libbz2-dev \ + libmcrypt-dev \ + libcurl4-openssl-dev \ + libltdl-dev \ + libpng-dev \ + libpspell-dev \ + libreadline-dev + +mkdir /usr/local/php7 + +git clone https://github.com/php/php-src.git +cd php-src +./buildconf + +CONFIGURE_STRING="--prefix=/usr/local/php7 \ + --enable-bcmath \ + --with-bz2 \ + --enable-calendar \ + --enable-exif \ + --enable-dba \ + --enable-ftp \ + --with-gettext \ + --with-gd \ + --enable-mbstring \ + --with-mcrypt \ + --with-mhash \ + --enable-mysqlnd \ + --with-mysql=mysqlnd \ + --with-mysqli=mysqlnd \ + --with-pdo-mysql=mysqlnd \ + --with-openssl \ + --enable-pcntl \ + --with-pspell \ + --enable-shmop \ + --enable-soap \ + --enable-sockets \ + --enable-sysvmsg \ + --enable-sysvsem \ + --enable-sysvshm \ + --enable-wddx \ + --with-zlib \ + --enable-zip \ + --with-readline \ + --with-curl" + +# Build CLI +./configure \ + $CONFIGURE_STRING +make +make install + +PATH=$PATH:/usr/local/php7/bin +echo 'export PATH="$PATH:/usr/local/php7/bin"' >> /etc/bash.bashrc + +# Build FPM +make clean + +./configure \ + $CONFIGURE_STRING \ + --disable-cli \ + --enable-fpm \ + --with-fpm-user=www-data \ + --with-fpm-group=www-data + +make +make install + +cd ../ + +# Symlink php-fpm to php7-fpm +ln -s /usr/local/php7/sbin/php-fpm /usr/local/php7/sbin/php7-fpm + +# Add config files +cp conf/www.conf /usr/local/php7/etc/php-fpm.d/www.conf +cp conf/php-fpm.conf /usr/local/php7/etc/php-fpm.conf + +# Add the init script +cp conf/php7-fpm.init /etc/init.d/php7-fpm +chmod +x /etc/init.d/php7-fpm +update-rc.d php7-fpm defaults + +service php7-fpm start + +# Activate modules +#API_VERSION=`phpize -v | grep -i 'api version' | cut -d: -f2 | tr -d ' '` +#echo "zend_extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-${API_VERSION}/opcache.so" > /etc/php7/conf.d/opcache.ini +#ln -s /etc/php7/conf.d/opcache.ini /etc/php7/cli/conf.d/opcache.ini +#ln -s /etc/php7/conf.d/opcache.ini /etc/php7/fpm/conf.d/opcache.ini + +# Install init scripts +#cp -R /vagrant/etc/* /etc +#chmod +x /etc/init.d/php7-fpm +#update-rc.d php7-fpm defaults +#service php7-fpm start diff --git a/remove.sh b/remove.sh new file mode 100755 index 0000000..91b2a9e --- /dev/null +++ b/remove.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +#/etc/init.d/php7-fpm stop +#rm -r /usr/local/php7 +update-rc.d php7-fpm remove +rm /etc/init.d/php7-fpm