No soy una persona que tenga un especial interés en tener siempre la última versión de todos los programas que utilizo. Sin embargo, sí que intento tener actualizadas las Ubuntu server para disponer de los últimos kernels o parches de seguridad. Con la última actualización de Ubuntu cambió la versión de PHP instalada, lo que hizo que una de nuestras aplicaciones web empezase a dar algún que otro problema.

La solución más correcta habría sido actualizar la aplicación web para que funcionase con la nueva versión de PHP pero el trabajo habría sido faraónico y el tiempo siempre es finito a sí que optamos por utilizar la versión de PHP que sabíamos que funcionaba. Para ello reinstalé el servidor apache utilizando el código fuente de Apache + PHP. Estos son los pasos que seguí:

  1. Descargar la versión deseada de Apache (eligiendo “Unix Source”) y PHP (eligiendo “complete source code”). Posteriormente, hay que descomprimir los archivos (siendo X, Y, Z los números de versión adecuados):
    abian@server:~$ tar xvz httpd-2.2.X.tar.gz
    abian@server:~$ tar xvj php-5.Y.Z.tar.bz2 

  2. Crear la carpeta que contendrá la instalación de Apache + PHP:
    mkdir /apache_PHP/
    Con ese nombre se puede actualizar posteriormente la instalación sin cambiar los scripts de arranque del servidor.
  3. Compilar Apache utilizando –prefix para indicar dónde se va a instalar y –enable-modules para instalar directamente algunos módulos:
    ./configure –prefix=/apache_PHP/ –enable-modules=”core_module log_config_module logio_module mpm_prefork_module http_module so_module alias_module auth_basic_module authn_file_module authz_default_module authz_groupfile_module authz_host_module authz_user_module autoindex_module cgi_module deflate_module dir_module env_module mime_module negotiation_module php5_module python_module reqtimeout_module setenvif_module status_module”  

    make

    make install

  4. Compilar PHP con las opciones –prefix para indicar la ruta donde se instalará y –with-mysql para indicar dónde se encuentran las librerías de MySQL:
    ./configure –prefix=/apache_PHP/php –with-apxs2=/apache_PHP/bin/apxs –with-config-file-path=/apache_PHP/php –with-mysql=/usr/include/mysql/

    make

    make test  

    make install

  5. Si en el configure del PHP hay un error porque no se encuentran las librerías MySQL hay que instalar el paquetelibmysqlclient-dev, por ejemplo con apt-get:
    root@server:~# apt-get install libmysqlclient-dev
  6. Ahora hay que retocar el archivo de configuración para que contenga los parámetros correctos:

    root@server:~# vim /apache_PHP/conf/httpd.conf
     

    Por ejemplo, seguramente haya que cambiar los virtual host, las rutas de los logs, el usuario y grupo que ejecutará el servidor… Lo que sí es importante es comprobar que están estas tres líneas:

    LoadModule php5_module        modules/libphp5.so  #indica que se carga el módulo recién compilado
    AddType application/x-httpd-php .php                         #Hace que el servidor procese las páginas PHP en lugar de mostrar el código fuente que conteienen
    DirectoryIndex index.html index.php index.htm          #Esta línea no es obligatoria pero hará que se abra por defecto la página index.php si existe.

Con esto queda todo instalado y configurado. La aplicación que controla la ejecución del servidor Apache se encuentra en /apache_PHP/bin/apachectl. Algunas funcionalidades útiles son:

  • Chequeo de sintásis: root@server:~# /apache_PHP/bin/apachectl -t
  • Lista de módulos cargados: root@server:~# /apache_PHP/bin/apachectl -M
  • Lista de hosts virtuales instalados: root@server:~# /apache_PHP/bin/apachectl -S
  • Arrancar y parar el servidor: root@server:~# /apache_PHP/bin/apachectl [start, stop, restart]

La última recomendación que tengo es la creación de un archivo en /etc/init.d/apache2 que contenga los parámetros de arranque y parada del servidor para hacer la vida algo más fácil. Un ejemplo de ese archivo puede ser el siguiente:

root@server:~# cat /etc/init.d/apache2
#!/bin/bash
case $1 in
start)
/apache_PHP/bin/apachectl start
;;
stop)
/apache_PHP/bin/apachectl stop
;;
restart)
/apache_PHP/bin/apachectl restart
;;
*)
#Por defecto, reiniciar el servidor
/apache_PHP/bin/apachectl restart
;;
esac

Un saludo