This is a tale that hasn't two towers on it
Categories: Web Link BlogEl lunes me comentaron de pasada que se necesitaba un nuevo "mail server" para un proyecto separado. Siempre, en esa clase de peticiones, se cuenta con restricciones adicionales, como la distribucion y el software usado. Fedora.
Fernando tenia un setup que entre pito y flauta demoro cerca de dos horas en dejar andando en Debian. Claro, habia algunas configuraciones que no considere al principio (como un -r en saslauthd), pero en resumidas cuentas, la instalacion resulto bastante mejor de lo que estaba acostumbrado. Ademas, habia base de datos involucradas, mejor manejo de mailboxes (menor carga para la maquina para procesar archivos largos, el tipico inconveniente que tengo en maquinas chicas). Pero esta vez la velocidad y el rendimiento no eran una "limitante" :
[root@alchemy ~]# cat /proc/cpuinfo | grep processor | wc -l
2
[root@alchemy ~]# cat /proc/cpuinfo | grep MHz | sort -u
cpu MHz : 2787.171
La instalacion no se demoro casi nada, y tipicamente se fueron algunos RPMs por defecto en ella. Fuera con ellos.
Aqui empieza la carrera contra la maquina, y contra el tiempo.
No PostgreSQL link opened yet
Me tope con ese maldito error al instalar Postfixadmin. Apache y PHP estaban funcionando bien, pero por alguna razon, no se estaba conectando. Pense que podia ser SELinux (deshabilitado en el arranque minutos despues de darme cuenta que estaba corriendo), pero no.
Di vuelta por la red sin ninguna suerte.
No se por que motivo, se me ocurrio si el error estaba en la funcion pg_last_error() y me indicaba clarito que no habia ningun link abierto en la linea 925:
$link = @pg_pconnect ($connect_string) or die ("<p />DEBUG INFORMATION:
Connect: " . pg_last_error () . "$DEBUG_TEXT");
entonces tenia que forzosamente abrir el link antes de entrar aqui.
$link = @pg_pgconnect ($connect_string); // Kneel and pray, dude
$link = @pg_pconnect ($connect_string) or die ("<p />DEBUG INFORMATION:
Connect: " . pg_last_error () . "$DEBUG_TEXT");
Y listo. Uno menos.
Postfix
Este me anduvo sacando canas.
Pense que el paquete de Fedora venia listo con los soportes de PostgreSQL. Error.
Jul 26 02:16:34 alchemy postfix/smtpd[2987]: fatal: unsupported dictionary type: pgsql
Diablos.
Di vueltas la red tratando de encontrar donde encontraba el paquete (con el soporte). Nada.
No se me ocurrio ninguna idea. Asi que...
Chroot
Personalmente, no me gusta estar instalando mas paquetes que los necesarios. Llamese tambien gcc, kernel-headers y amigos. No por que hacen bulto en el disco. Es mas por que es facil terminar colocando un binario de esos simpaticos. La idea es hacerle la pega mas dificil a quien quiera visitar la maquina de forma "imprevista".
Lo unico que se me ocurrio a esas alturas fue hacer una jaula de compilacion.
Pedro me habia contado que tenia una corriendo en un computador con Ubuntu. En la jaula, con Debian, le permitia hacer todo lo Debian-ish que necesita. Aparte que ya habia intentado algo similar en Debian. Pero Fedora es otro terreno mas arido.
[root@alchemy ~]# mkdir /chroot
[root@alchemy ~]# cd /chroot
[root@alchemy chroot]# rsync -avPopgHlD / /chroot/ --exclude=/proc --exclude=/sys --exclude=/dev
...dum..durum.dum..durum....
[root@alchemy chroot]# mkdir -p proc dev sys
[root@alchemy chroot]# mount --bind /dev dev
[root@alchemy chroot]# mount -t proc proc proc
[root@alchemy chroot]# chroot /chroot
[root@alchemy /]#
Bingo. Ahora a instalar todas las porquerias adicionales ![]()
[root@alchemy ~]# yum install postgresql-devel rpm-build
[root@alchemy ~]# wget ftp://fr2.rpmfind.net/linux/fedora/core/5/source/SRPMS/postfix-2.2.8-1.2.src.rpm
[root@alchemy ~]# cd /usr/src/redhat/SPECS
Y hacer este parche en tiempo record:
--- postfix.spec 2006-02-11 02:13:38.000000000 -0300
+++ postfix.spec 2006-07-26 02:54:30.000000000 -0400
@@ -8,2 +8,3 @@
%define PFLOGSUMM 1
+%define PGSQL 1
@@ -108,2 +109,7 @@
+%if %{PGSQL}
+Requires: postgresql
+BuildRequires: postgresql, postgresql-devel
+%endif
+
%if %{MYSQL}
@@ -175,2 +181,6 @@
%endif
+%if %{PGSQL}
+ CCARGS="${CCARGS} -DHAS_PGSQL -I/usr/include/pgsql"
+ AUXLIBS="${AUXLIBS} -L%{_libdir}/pgsql -lpq"
+%endif
%if %{MYSQL}
Nos fuimos.
[root@alchemy SPECS]# rpm -ba postfix.spec
...durum...dum.dum..durum...
[root@alchemy SPECS]# ls /usr/src/redhat/RPMS/i386/
postfix-2.2.8-1.2.i386.rpm postfix-pflogsumm-2.2.8-1.2.i386.rpm
[root@alchemy SPECS]# cd ../RPMS/i386
[root@alchemy i386]# cp postfix-2.2.8-1.2.i386.rpm /
y fuera del chroot:
[root@alchemy ~]# rpm -ihv /chroot/postfix-2.2.8-1.2.i386.rpm
Ahora, para evitar los mangazos que tire yum al intentar actualizarlo,
[root@alchemy ~]# echo "exclude=postfix" >> /etc/yum.conf
Otro menos
PostgreSQL en FC
No hay /etc/postgresql/? Ni /etc/pg_hba.conf?
No. Es otra dimension paralela donde hay algunas cosas no LSB.
[root@alchemy ~]# cd /var/lib/pgsql/data
[root@alchemy data]# ls pg_hba.conf
pg_hba.conf
No necesito correr esta cosa en red. Echen a andar su imaginacion para tratar de adivinar la password del usuario que se va a conectar. Y un hack a pam? Nah.
Capitulo final : La mezcla
Pueden encontrar varias guias en internet para tener la mezcla ya completa. No quise colocar la del webmail. Ni siquiera voy a comentar el uso de Courier-imap, por que tomo menos tiempo que hacer el rpm-build.
Jul 26 03:42:20 alchemy postfix/qmgr[14874]: D325F100108: from=<jci@XXX.XXXX.X>, size=401, nrcpt=1 (queue active)
Jul 26 03:42:20 alchemy postfix/virtual[14883]: D325F100108: to=<jci@XXX.X.XXX.X>, relay=virtual, delay=85, status=sent (delivered to maildir)
...
Jul 26 04:27:35 alchemy imapd: LOGIN, user=jci@XXX.X.XXX.X, ip=[::ffff:XX.XXXX.X.XX], protocol=IMAP
Fijense en la hora no mas.
Dije antes que estoy con insomnio? ![]()














