27 octubre, 2011 3 min to read

Apache ITK en Centos 5

Category : Linux

A continuación una guía para la instalación de mpm-itk en CentOS 5.
Apache es aún el servior Web de mayor uso en línea, sirve miles de aplicaciones y todas ellas con diversas configuraciones y requerimientos, además es utilizado en una inmenza mayoría de servidores compartidos o hosting y a pesar de las excelentes caracteristicas de apache como servidor Web, en condiciones de su uso compartido (siendo hosting el caso más popular) plantea diversos problemas, el principal es relaiconado a los permisos de acceso a ficheros, es decir de seguridad y es justamente donde itk entra a jugar.
ITK es un módulo de multiprocesamiento más para apache que agrega una nueva caracteristicas, la posibilidad de ejecutar apache con el userid de un usuario diferente por cada virtualhost, además permite cambiar el valor nice del proceso que corresponde a dicho vhost.

Las indicaciones siguientes te permitirán instalar httpd-itk en CentOS 5, aunque los pasos son los mismos para CentOS 6.0, cambiará solo la url de descarga del paquete fuente para httpd.
Mi recomendación es la de crear un paquete RPM y no simplemente compilar e instalar ya que brinda flexibilidad para instalar, remover y demás tareas administrativas. Si esta es tu elección, vale crear el paquete como un usuario diferente de root.
Aporte: No encontré una guía para la compilación de este paquete en CentOS 5 en nuestra lengua, es funcional para el paquete apache: httpd-2.2.3-53.3.i386 (última actualización en CentOS 5 a la fecha con mejoras de seguridad interesantes).
PASOS (es funcional como script, solo copia y pega en la consola):

#!/bin/bash
###################################################################
# Iniciamos descargando un scrip para crear la estructura de directorios en local (rpmbuild)
wget http://www.oldrpm.org/hintskinks/buildtree/RPM-build-tree.txt
sh RPM-build-tree.txt
# Para mantener el entorno limpio, creamos una carpeta para las tereas:
mkdir -p ~/build/httpd-itk
cd ~/build/httpd-itk
# Descarga del rpmsrc y el parche
wget http://vault.centos.org/5.7/updates/SRPMS/httpd-2.2.3-53.el5.centos.3.src.rpm
rpm -i httpd-2.2.3-53.el5.centos.3.src.rpm
cd ~/rpmbuild/SOURCES/
# rpmbuild --rebuild httpd-2.2.3-53.el5.centos.3.src.rpm
# Aquí tendremos el los RPM antes del parche
wget http://mpm-itk.sesse.net/apache2.2-mpm-itk-2.2.17-01/{02-rename-prefork-to-itk.patch,03-add-mpm-to-build-system.patch,04-correct-output-makefile-location.patch,05-add-copyright.patch,06-hook-just-after-merging-perdir-config.patch,07-base-functionality.patch,08-max-clients-per-vhost.patch,09-capabilities.patch,10-nice.patch,11-fix-htaccess-reads-for-persistent-connections.patch}
# Si falla rpmbuild, instala los paquetes faltantes con yum install y lanza nuevamente el comando.
# FIN

2°Configuramos nuestro nuevo spec
Editamos SPEC

vim ~/rpmbuild/SPECS/httpd.spec

y agregas luego de: Patch202: httpd-2.2.3-deflate2215.patch
las líneas:

# ITK MPM
Patch802: 02-rename-prefork-to-itk.patch
Patch803: 03-add-mpm-to-build-system.patch
Patch804: 04-correct-output-makefile-location.patch
Patch805: 05-add-copyright.patch
Patch806: 06-hook-just-after-merging-perdir-config.patch
Patch807: 07-base-functionality.patch
Patch808: 08-max-clients-per-vhost.patch
Patch809: 09-capabilities.patch
Patch810: 10-nice.patch

En la sección %pre justo antes de aplicar los parches de Red Hat agrega estas líneas:

# ITK MPM
mkdir server/mpm/experimental/itk/
cp -d --preserve=all server/mpm/prefork/* server/mpm/experimental/itk/
mv server/mpm/experimental/itk/prefork.c server/mpm/experimental/itk/itk.c
%patch802 -p1 -b .mpm02
%patch803 -p1 -b .mpm03
%patch804 -p1 -b .mpm04
%patch805 -p1 -b .mpm05
%patch806 -p1 -b .mpm06
%patch807 -p1 -b .mpm07
%patch808 -p1 -b .mpm08
%patch809 -p1 -b .mpm09
%patch810 -p1 -b .mpm10

Esto crea las carpetas y aplicará los parches
Ahora en la sección %build de nuestro spec agrega las siguientes líneas, busca la cadena:

# For the other MPMs, just build httpd and no optional modules
mpmbuild worker --enable-modules=none
mpmbuild event --enable-modules=none

y agrega
mpmbuild itk –enable-modules=none
También puedes decidir complilar itk con full soporte, recuerda, es el build anterior ó este:

mpmbuild itk
--enable-mods-shared=all
--enable-ssl --with-ssl --enable-distcache
--enable-proxy
--enable-cache --enable-mem-cache
--enable-file-cache --enable-disk-cache
--enable-ldap --enable-authnz-ldap
--enable-cgid
--enable-authn-anon --enable-authn-alias

También lo hacemos en la sección %install, busca:

install -m 755 worker/httpd $RPM_BUILD_ROOT%{_sbindir}/httpd.worker
install -m 755 event/httpd $RPM_BUILD_ROOT%{_sbindir}/httpd.event

y agrega:

install -m 755 itk/httpd $RPM_BUILD_ROOT%{_sbindir}/httpd.itk

Para completar, en la sección %check tenemos que agregar a itk para que también se verifique:

# Verify that the same modules were built into the httpd binaries
./prefork/httpd -l | grep -v prefork > prefork.mods
for mpm in worker; do

y donde dice: “for mpm in worker; do” quedará así:

for mpm in worker event itk; do

Ahora es solo compilar los RPM

cd ~/rpmbuild/SPECS
rpmbuild -ba httpd.spec

Por último, instalar los paquetes resultantes (si no tienes problemas en la compilación)

rpm -Uhv ../RPMS/[arch]/*.rpm