Necesitaba tener php7.2 en mi maquina para un proyecto nuevo que estoy empezando, pero adicionalmente necesitaba mantener php5.6 de proyectos actuales y viejos que sigo manteniendo.
Instalar mod_fcgid-2.3.9-x86_64-2_SBo
Fui a https://mirrors.slackware.com/slackware/slackware64-current/slackware64/n/ para ver si ya estaba php7 en la versión current de slackware y vi que así era, por lo que caso lo instalo, pero esto iba a crearme problemas con la versión actual que tengo.
Entonces decido ir a los sources de slackware para modificar un poco el slackbuild y recompilar para que sea menos traumático para mi sistema operativo y pueda desinstalarlo de ser necesario.
Entonces me aboco a cambiar un poco el slackbuild y queda con este diff: (colorización del código gracias a https://tohtml.com/ )
28c28 < PKGNAM=php7.2 --- > PKGNAM=php 51c51 < NUMJOBS=${NUMJOBS:-" -j4 "} --- > NUMJOBS=${NUMJOBS:-" -j7 "} 54c54 < PKG=$TMP/package-php7.2/ --- > PKG=$TMP/package-php/ 79,93c79,93 < #IMAPLIBDIR=/usr/local/lib${LIBDIRSUFFIX}/c-client < #if [ -r $IMAPLIBDIR/lib${LIBDIRSUFFIX}/c-client.a ]; then < # echo "Using IMAP library:" < # ls -l $IMAPLIBDIR/lib${LIBDIRSUFFIX}/c-client.a < # sleep 5 < #else < # ( cd $CWD/../alpine ; VERSION=${ALPINE} ; ./alpine.SlackBuild || exit 1 ) || exit 1 < # ( cd $TMP/alpine-${ALPINE}/imap/c-client < # strip -g c-client.a < # mkdir -p $IMAPLIBDIR/lib${LIBDIRSUFFIX} < # cp c-client.a $IMAPLIBDIR/lib${LIBDIRSUFFIX} < # mkdir -p $IMAPLIBDIR/include < # cp *.h $IMAPLIBDIR/include < # ) < #fi --- > IMAPLIBDIR=/usr/local/lib${LIBDIRSUFFIX}/c-client > if [ -r $IMAPLIBDIR/lib${LIBDIRSUFFIX}/c-client.a ]; then > echo "Using IMAP library:" > ls -l $IMAPLIBDIR/lib${LIBDIRSUFFIX}/c-client.a > sleep 5 > else > ( cd $CWD/../alpine ; VERSION=${ALPINE} ; ./alpine.SlackBuild || exit 1 ) || exit 1 > ( cd $TMP/alpine-${ALPINE}/imap/c-client > strip -g c-client.a > mkdir -p $IMAPLIBDIR/lib${LIBDIRSUFFIX} > cp c-client.a $IMAPLIBDIR/lib${LIBDIRSUFFIX} > mkdir -p $IMAPLIBDIR/include > cp *.h $IMAPLIBDIR/include > ) > fi 96c96 < mkdir -p $PKG/etc/php7.2.d --- > mkdir -p $PKG/etc/php.d 154c154 < EXTENSION_DIR=/usr/lib${LIBDIRSUFFIX}/php7.2/extensions \ --- > EXTENSION_DIR=/usr/lib${LIBDIRSUFFIX}/php/extensions \ 158c158 < --prefix=/opt/php7.2 \ --- > --prefix=/usr \ 162c162 < --sysconfdir=/etc/php7.2.d \ --- > --sysconfdir=/etc \ 175,176c175,176 < --with-config-file-scan-dir=/etc/php7.2.d \ < --with-config-file-path=/etc/php7.2.d \ --- > --with-config-file-scan-dir=/etc/php.d \ > --with-config-file-path=/etc \ 209a210 > --with-imap=$IMAPLIBDIR \ 288c289 < > $PKG/etc/httpd/mod_php7.2.conf.new --- > > $PKG/etc/httpd/mod_php.conf.new 292,293c293,294 < cp -a php.ini-development php.ini-production $PKG/etc/php7.2.d/ < chmod 755 $PKG/etc/php.7.2.d $PKG/etc/php-fpm.d $PKG/etc/httpd --- > cp -a php.ini-development php.ini-production $PKG/etc > chmod 755 $PKG/etc/php.d $PKG/etc/php-fpm.d $PKG/etc/httpd
Como se puede ver, modifique algunos path, para que instale dentro de /opt en lugar de hacerlo en el /usr/bin,
ademas comente la parte de ALPINE porque no necesitaba para esto que estoy haciendo y esto requería un poco más de esfuerzo
Archivo modificado php.SlackBuild
con eso se genero el archivo de instalación de slackware php-7.2.6-x86_64-1.txz que instalo con el comando #installpkg php-7.2.6-x86_64-1.txz
y listo, ya tengo en el sistema, por último hay que mover el archivo que se instaló en el /etc con el nombre de php.ini.new al directorio /etc/php7.2.d/ para que sea encontrado por el php que acabamos de compilar así se pueden tener 2 php.ini diferentes para cada versión del php
Luego queda decirle al apache, que para un virtualhost quiero php7 y para el otro php5.6
Primer que nada, modifiquen el archivo httpd.conf ( /etc/httpd.conf )
agreguen la entrada
Include /etc/httpd/mod_fcgid.conf
antes de la linea donde dice
Include /etc/httpd/extra/httpd-vhosts.conf
Si lo dejan al final, no les va a funcionar, lo sé porque estuve probando por 1 hora varias combinaciones de cosas y ninguno funcionaba por que eso estaba al final y no antes.
y dejen para el final del archivo el
Include /etc/httpd/mod_php.conf
En el archivo mod_php.conf comenten todo, salvo esta linea:
lib64/httpd/modules/libphp5.so
para que el modulo de php5 este disponible
y lo mismo para el archivo mod_fcgid.conf
solo dejen la linea que dice:
LoadModule fcgid_module lib64/httpd/modules/mod_fcgid.s
dentro del archivo httpd-vhosts.conf (donde normalmente se configuran los virtualhost)
y tienen una configuracion similar a esta
<VirtualHost *:80> ServerAdmin admin@server.example.com DocumentRoot "/var/www/html/sitio1" ServerName sitio1.local ErrorLog "/var/log/httpd/sitio1-error_log" CustomLog "/var/log/httpd/sitio1-access_log" common <Directory /var/www/html/sitio1> Options Indexes FollowSymLinks ExecCGI AllowOverride All Require all granted </Directory> Include /etc/httpd/extra/php7fcgid.conf </VirtualHost>
Agregan eso que marco en rojo, para la configuración de php7
y para el sitio que tiene que tener php5.6
<VirtualHost *:80> ServerAdminadmin@server.example.com DocumentRoot "/var/www/html/sitio2" ServerName sitio2.local ErrorLog "/var/log/httpd/sitio2-error_log" CustomLog "/var/log/httpd/sitio2-access_log" common <Directory /var/www/html/sitio2> Options Indexes FollowSymLinks ExecCGI AllowOverride All Require all granted </Directory> Include /etc/httpd/extra/php5fcgid.conf </VirtualHost>
Luego creamos esos archivos que marqué en rojo:
para el archivo php5fcgid.conf:
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>
y para el archivo php7fcgid.conf
#para php7 <IfModule fcgid_module> AddHandler fcgid-script .fcgi .php # Where to look for the php.ini file? DefaultInitEnv PHPRC "/etc/php7.2.d" # Maximum requests a process handles before it is terminated MaxRequestsPerProcess 100 # Number of seconds of idle time before a process is terminated IPCCommTimeout 240 IdleTimeout 240 #Or use this if you use the file above FCGIWrapper /opt/php7.2/bin/php-cgi .php </IfModule>
Visite varios sitios para llegar a esto, no creo que esta configuración sea válida para ambientes de producción, es netamente para un entorno de desarrollo en el que la vida diaria exige tener uno u otro, un compañero luego de mostrar esto, me dijo por que no usar docker que es una alternativa, y así, para que hacerla facil si podemos hacerla dificil 😉
Probablemente varios de los sitios que visité primero ya me dieron la solución, pero eso que mencione antes, de cargar el archivo del mod_fcgid.conf antes, creo que impidió que logre hacerlo funcionar correctamente
Esta es una breve lista de los que leí:
https://bbs.archlinux.org/viewtopic.php?pid=901050#p901050
https://medium.com/@sbuckpesch/run-multiple-php-version-on-the-same-server-using-php-fpm-and-xdebug-on-ubuntu-16-04-6a84f5b7d7ce
https://www.apachelounge.com/viewtopic.php?t=3430
https://2bits.com/articles/apache-fcgid-acceptable-performance-and-better-resource-utilization.html
https://www.apachelounge.com/viewtopic.php?t=5773
source slackware para php7.2 en current (al 14 de junio de 2018)
https://mirrors.slackware.com/slackware/slackware64-current/source/n/php/
Slackbuild de fastcgid http://slackbuilds.org/repository/14.2/network/mod_fcgid/
Bueno, eso es todo creo, con eso logré hacer funcionar ambas versiones en mi máquina,
hasta la próxima.