2 abril, 2013 5 min to read

Centos 6.x como WebServer Moderno

Category : Linux

MariaDB y apache 2.4 en CentOS 6

Semana Santa de este año me ha dado para todo, he jugado mucho con mi hija, descansado a pierna suelta, he salvado una tablet vieja del olvido, he leído la guerra de los cielos volumen III y claro, he experimentado con montar una VM de CentOS con software más actual del que tiene por defecto. :-).

Los pasos que he seguido son los comunes, no existe mucha diferencia en el como instalar software en CentOS e incluso ya he hablado del tema en varios post antiguos; sin embargo lo “diferente” en este caso es que decidí mezclar todo y utilizar software menos conservador que el elegido por RedHat para su distribución (el recompilado por CentOS) aquí el resultado:
Descargar el CentOS-6.4-x86_64-netinstall, realizar una instalación mínima sobre VMWare, he instalado lo que considero software básico:
yum install system-config-network-tui #para configurar la red a mi gusto
yum install findutils mlocate openssh-clients rpm-devel rpm-build w3m \
lynx lsof smartmontools zip dos2unix vim-enhanced dialog \
yum-plugin-remove-with-leaves yum-utils gcc* automake* \
autoconf* gnupg make install iptraf nmap wget ncurses \
ntp eject kernel-devel -y

Con lo que se tiene un CentOS básico pero completo y listo para compilar cualquier paquete necesario. Lo siguiente es contar con una DB, podría ser MySQL, sin embargo en estos día mucho se habla de MariaDB y de su performance frente a MySQL, existe quien asegura que es hasta 3 veces (300%) más rápida en su respuesta frente a consultas, así que simplemente me confiaré y si consigue ser un 10% más rápida ya habremos ganado bastante.  Los pasos de la instalación:
cat > /etc/yum.repos.d/CentOS-MariaDB.repo << "EOF"
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5.29/centos6-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

Limpiar los repos:
yum clean all && rpm -Va --nofiles --nodigest && rpm --rebuilddb
Realizar la instalación y probar el servicio:
yum install MariaDB-server MariaDB-client MariaDB-devel  -y && /etc/init.d/mysql start && mysql_upgrade && /etc/init.d/mysql restart
Abrir los puertos en iptables:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
service iptables save
chkconfig mysqld on

Agregar reglas de selinux
setsebool -P allow_user_mysql_connect 1
si prefieren que se pueda conectar en cualquier puerto: setsebool -P mysql_connect_any 1
y por último setear una clave:
mysqladmin -u root password 'su-contraseña'
Con esto se tiene la DB lista. Sin embargo y para evitarte luego sorpresas, te comento que va a molestar para compilar php, así que lo recomendable para evitar problemas es compilar MDB, la ventajas es que puedes terner la última versión en lugar de la que esté disponible para CentOS y en teoría estaría más optimizada.
wget http://pkgs.repoforge.org/cmake/cmake-2.8.7-1.rf.src.rpm
rpmbuild --rebuild --target `uname -m` cmake-2.8.7-1.rf.src.rpm
su -c "yum localinstall ~/rpmbuild/RPMS/`uname -m`/cmake-* -y"

wget https://downloads.mariadb.org/f/mariadb-5.5.30/kvm-tarbake-jaunty-x86/mariadb-5.5.30.tar.gz/from/http:/mirrors.supportex.net/mariadb
yum install gperf libdbi rpmdevtools -y
tar -xzvf mariadb-5.5.30.tar.gz
cd mariadb-5.5.30
cmake -DRPM=centos .
make package
su -c "yum localinstall MariaDB-5.5.30-centos-`uname -m`* -y"

Como mencioné antes, ya esto lo he comentado en el pasado, pero aquí lo pongo nuevamente todo a la mano. Primero instalar las dependencias:
# apr
cd /tmp
wget http://www.trieuvan.com/apache//apr/apr-1.4.6.tar.bz2
rpmbuild -ts apr-1.4.6.tar.bz2
su -c "yum-builddep ~/rpmbuild/SRPMS/apr-1.4.6-1.src.rpm -y"
rpmbuild --rebuild --target `uname -m` ~/rpmbuild/SRPMS/apr-1.4.6-1.src.rpm
su -c "yum localinstall ~/rpmbuild/RPMS/`uname -m`/apr* -y"

# apr-utils
yum install http://dl.fedoraproject.org/pub/epel/6/`uname -m`/freetds-0.91-2.el6.`uname -m`.rpm -y
yum install http://dl.fedoraproject.org/pub/epel/6/`uname -m`/freetds-devel-0.91-2.el6.`uname -m`.rpm -y
wget http://www.trieuvan.com/apache//apr/apr-util-1.5.1.tar.bz2
rpmbuild -ts apr-util-1.5.1.tar.bz2
su -c "yum-builddep ~/rpmbuild/SRPMS/apr-util-1.5.1-1.src.rpm -y"
rpmbuild --rebuild --target `uname -m` ~/rpmbuild/SRPMS/apr-util-1.5.1-1.src.rpm
su -c "yum localinstall ~/rpmbuild/RPMS/`uname -m`/apr-util-* -y"

#
yum install pcre-devel pcre-static pcre lua-devel libxml2-devel

# distcache
wget http://dl.fedoraproject.org/pub/fedora/linux/releases/16/Everything/source/SRPMS/distcache-1.4.5-22.src.rpm
rpmbuild --rebuild --target `uname -m` distcache-1.4.5-22.src.rpm
su -c "yum localinstall ~/rpmbuild/RPMS/`uname -m`/distcache* -y"

# compilar apache:
wget -c http://apache.mirrors.lucidnetworks.net//httpd/httpd-2.4.4.tar.bz2
rpmbuild -tb --target `uname -m` httpd-2.4.4.tar.bz2
su -c "yum localinstall ~/rpmbuild/RPMS/`uname -m`/httpd* -y"
su -c "yum localinstall ~/rpmbuild/RPMS/`uname -m`/mod_* -y"

chkconfig httpd on
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables save

Por último, PHP
wget http://vault.centos.org/6.4/os/Source/SPackages/php-5.3.3-22.el6.src.rpm
ln -s /usr/bin/mysql_config /usr/lib64/mysql/mysql_config
ln -s /usr/bin/apxs /usr/sbin/apxs
su -c "yum-builddep php-5.3.3-22.el6.src.rpm -y"
rpmbuild --rebuild --target `uname -m` php-5.3.3-22.el6.src.rpm
su -c "yum localinstall ~/rpmbuild/RPMS/`uname -m`/php* -y"

Conclusión, el entorno aún no está listo para aprovechar apache2.4.x, luego de instalar todo el software se van a presentar ligeros problemas, por ej. que el MPM por defecto es event y php puede molestar (¡aunque event es genial!), si utilizas el mismo módulo que con worker va bien, sin embargo no he ahondado en el tema pero php deja de cargar algunos módulos que sí compila, he probado con cambiar las configuraciones pero no di con el chiste, simplemente no carga cosas tan esenciales como json. Por otro lado por más interesante y optimizada que esté esta configuración faltan herramientas, por ejemplo fcgi no compila correctamente, así que no podrás contar con fcgi lo que es un total desperdicio, no he probado otros módulos de apache como mod_psgi pero seguro que dará problemas con algún otro módulo antiguo pero genial.