Construir un paquete Debian desde código fuente

editar

Los paquetes y el sistema de paquetes son parte fundamental dentro de Debian. El esfuerzo de muchos desarrolladores se centra en “debianizar” fuentes, es decir adaptar ficheros fuentes para que funcionen de acuerdo con el sistema de paquetes de Debian. Cualquier persona puede realizar un paquete aunque para que éste forme parte de la distribución debe ser desarrollador oficial.

Necesitamos disponer de los ficheros fuentes con el código original del programa que queremos "debianizar". Para este ejemplo utilizaremos las fuentes del programa "Hello" que muestra un mensaje de bienvenida por la pantalla Primero buscamos el paquete, por ejemplo tinyproxy.

apt-get cache search tinyproxy

Segundo descargamos el código fuente.

apt-get source tinyproxy

Tercero resolvemos dependencias

apt-get build-dep tinyproxy

Cuarto, modificamos lo que nos interese tanto en el código fuente como en las opciones de compilación y seguidamente creamos el paquete.

dpkg-buildpackage -rfakeroot -us -uc

Si todo va bien, que debe ir bien. Al hacer

ls -lha *deb

Veremos el paquete creado para nuestra máquina. Para instalarlo

dpkg -i tinyproxy

Otro ejemplo

editar

Obtener los archivos fuentes

Necesitamos disponer de los ficheros fuentes con el código original del programa que queremos "debianizar". Para este ejemplo utilizaremos las fuentes del programa "Hello" que muestra un mensaje de bienvenida por la pantalla. Descomprimimos las fuentes (normalmente se encuentran en un archivo.tgz), en este caso el archivo se llama “hello_2.1.1.tar.gz”

Modificando los fuentes

Algunos cambios comunes en los ficheros fuente son:

Cambiar la ruta de instalación

Normalmente los programas se instalan en el directorio /usr/local. En Debian este directorio está reservado para las aplicaciones del administrador del sistema. Los programas en Debian deben instalarse en la ruta /usr/bin. Normalmente los programas utilizan el fichero makefile como guión (script) para compilar. Por lo tanto deberemos mirar en este archivo y cambiar la línea:

BIN = /usr/local/bin

por:

BIN = /usr/bin

Cambiar las librerías

Normalmente en el fichero “makefile” se hace referencia a librerías que puede que no se encuentren en Debian o ni siquiera en Linux. Por lo tanto habrá que cambiar esas librerías por otras que existan en Debian y que hagan lo mismo.

Proceso de debianización. Directorio /debian

Nos situamos en el directorio de hacemos:

dh_make -e tudirección@de.correo -f ../hello_2.1.1.orig.tar.gz

“dh_make” es un paquete que probablemente no tengamos instalado en nuestro sistema por lo que habrá que descargarlo: “apt-get install dh_make”. Se trata de un script para debianizar fuentes. Tras ejecutar este comando nos creará, dentro del directorio donde se encuentran las fuentes, la carpeta "debian" que contendrá una estructura de archivos necesaria para crear el paquete de Debian. Bajo el directorio /debian hay algunos ficheros que no pueden faltar y que habrá que editar para completar lo que hizo por defecto "dh_make", estos ficheros son:

Fichero "control": Este fichero contiene varios valores que "dpkg" y "dselect" usarán para gestionar el paquete. Por ejemplo, nombre del paquete, desarrollador, prioridad, dependencias, arquitecturas soportadas, descripción.

Fichero "copyright": Este fichero contiene la información sobre la licencia y copyright de las fuentes originales del paquete.

Fichero "changelog": Este fichero contiene información que usan dpkg y otros programas para obtener el número de versión, revisión, distribución y urgencia de tu paquete.

Fichero "rules": Ahora se necesita mirar las reglas exactas que "dpkg-buildpackage" utilizará para crear el paquete. Este fichero es en realidad otro Makefile, pero diferente al que viene en las fuentes originales. A diferencia de otros ficheros en debian/, éste necesita ser configurado como ejecutable. "dh_make" te crea un por defecto que debería servir para paquetes simples.

Dentro del directorio /debian, además de estos ficheros hay muchos más. Algunos de ellos tiene la extensión.ex, esto indica que son ejemplos.

Crear el paquete

Entramos en el directorio principal del programa y ejecutamos:

dpkg-buildpackage -rfakeroot

Te pedirá que introduzcas dos veces tu clave PGP. Tras ejecutarse, en el directorio inmediatamente superior aparecerán una serie de archivos:

  • hello_x.x.orig.tar.gz: Es el código fuente original.
  • hello_x.x.diff.gz: Este fichero comprimido contiene todos y cada uno de los cambios que se hizo al código fuente original.
  • hello_x.x.dsc: Es una breve descripción del paquete, está firmada con PGP por la persona que lo ha empaquetado y tiene una valor de control (función hash MD5) de los dos ficheros anteriores para poder detectar si han sido modificados por alguien ajeno al desarrollador.
  • hello_x.x_i386.deb: Este es el paquete binario completo. Puedes usar "dpkg" para instalar o eliminar tanto éste paquete como cualquier otro.
  • hello_x.x_i386.changes: Este fichero describe todos los cambios hechos en la revisión actual del paquete, y es usado por los programas de gestión del archivo FTP para instalar los paquetes binarios y fuentes en él. Se genera parcialmente a partir del fichero “changelog” y el fichero.dsc. Este fichero está firmado con PGP o GPG, de forma que cualquiera puedes estar aún más seguro de que es realmente tuyo.

Instalación del servidor de correo Courier

editar

Instalación de un servidor de correo Courier.

Montamos

  • SMTP correo saliente
    • Envio y recepción de e-mail
  • POP3
    • Se usa para descargar.
  • IMAP
    • Descarga tb + por defecto solo descarga encabezados.
  • Integraremos el SMTP con maildrop y através de este con un antivirus y un antispam
    • A instalar:
      • courier-authdaemon
      • courier-base
      • courier-imap
      • courier-maildrop
      • courier-mta
      • courier-mta-ssl
      • courier-pop
      • courier-pop-ssl
apt-get install courier-authdaemon courier-base courier-imap courier-maildrop courier-mta courier-mta-ssl courier-pop courier-pop-ssl

Eliminar script de arranque en Debian

update-rc.d -f exim4 remove

eliminar certificado de prueba del ssl del pop3:

rm /etc/courier/pop3d.pem

editamos el /etc/courier/pop3d.cnf

vi /etc/courier/pop3d.cnf -> /contenido

Salimos y creamos el certificado

mkpop3dcert 

Editamos ahora el similar a pop3 pero para servicio smtp

vi /etc/corier/esmtpd.cnf

Despues de editar este fichero, hacemos:

cd /usr/bin
rm /usr/lib/courier/esmtpd.pem
mkesmtpdcert
rm /etc/courier/esmtpd.pem
ln -s /usr/lib/courier/esmtpd.pem /etc/courier/esmtpd.pem

Ahora creamos los alias de dominios.

  • Se usan para centralizar cuentas.
  • Nunca se debe leer el correo como root, postmaster, mailer-daemon, debido a lo cual se redirige a otra cuenta.

Editamos el fichero /etc/courier/aliases/system.

vi /etc/courier/aliases/system

Y ponemos

#Ponemos aquí al usuario del sistema al que queremos que llegue el correo.
postmaster: jesus

Creamos el directorio:

mkdir /etc/courier/aliasdir/

Ejecutamos:

makealiases

Ahora vamoa configurar el SMTP-AUTH que consiste en:

ampliar datos sobre relays
  • Relay abierto, no pide claves para el envio de coreo.
  • Relay cerrado pide clave para enviar correo, básicamente debido al spam

Le vamos aindicar a courrier que debe pedir nombre y contraseña.

vi /etc/courier/esmtpd

Y buscamos AUTHMODULES

Debe poner lo que pone, verificar que no esté vacio ""

Ahora buscamos ESMTPAUTH y ponemos

ESMTPAUTH="LOGIN"

Ahora le indicamos que queremos ser un relay completamente cerrado

 vi /etc/courier/smtpaccess/default

No permitimos enviar correo sin contraseña a las redes 10* y 192.168*, para lo cual comentamos las líneas siguientes

10     allow,RELAYCLIENT
192.168        allow,RELAYCLIENT

Siempre que se toca /etc/courier/smtpaccess/default se debe hacer:

makesmtpaccess

Creamos el fichero /etc/courier/me y metemos:

vi /etc/courier/me
pol4.net
localhost
localhost.localdomain

Y en el fichero /etc/courier/locals metemos lo mismo que antes:

vi /etc/courier/locals
pol4.net
localhost
localhost.localdomain

Con esto ya casi está.

Para arrancar el servicio, se deben parar varios demonios. Debido a esto vamos a hacer un script para que lo haga él solo:

#!/bin/bash

/etc/init.d/courier-authdaemon restart &&
/etc/init.d/courier-mta restart &&
/etc/init.d/courier-pop restart &&
/etc/init.d/courier-imap restart &&
/etc/init.d/courier-mta-ssl restart &&
/etc/init.d/courier-pop-ssl restart

Le damos permisos de ejecución

chmod u+x /sbin/reiniciacourier

Quedan unos ajustes, pero ya puede enviar y recibir correo.

Hay 2 formas de dejar el correo:

  • Mailbox
    • Implica que haya un fichero por usuario y dentro todos los correos.
  • Maildir
    • Es multifichero y
      • new, un fichro por correo nuevo sin leer
      • cur, un fichero por correo nuevo pero leido
      • tmp,

Esta estructura de tipo maildir usa en cada /home/usuario del sistema. Debido a lo cual si queremos que se cree este directorio automáticamente cuando creamos un nuevo usuario, crearemos este direcorio en el /etc/skel. De la siguiente manera:

su - jesus
maildirmake Maildir

Esto para cada usuario.

Para usuarios nuevos, en /etv/skel se crea el direcotrio Mail

maildirmake /etc/skel/Maildir

22/11/05

editar

Estandares:

crear fichero /etc/courier/bofh

nano /etc/courier/bofh

Y metemos este texto

opt BOFHADMIME=accept

Algunos sistemas mandan cabeceras erroneas, como hotmail. Hay tres formas de solucionar esto

  • Rechazarlo
  • Aceptarlo
  • Por defecto-> Envia un mensaje de aviso con el correo, debido a lo cual puede haber errores. enlace

Para evitar esto, se hace lo comentado antes.

Para conseguir más rapidez de conexión:

En /etc/courier/esmtpd

nano /etc/courier/esmtpd

Buscamos TCPDOPTS y lo cambiamos por:

TCPDOPTS="-stderrlogger=/usr/sbin/courierlogger -nodnslookup -noidentlookup"

-nodnslookup impide que cuando en el correo viene la ip, no la consulta de nuevo.

-noidentlooku, evita que se conecte al servicio ident de la máquina que se conecta.

Integración de un antivirus con el correo.

editar

Instalación

editar

Courier --> amavis --> antivirus

1.- Buscar el paquete Debian que instale el fp-linux-ws.

  • Lo descargamos.
wget ftp://ftp.f-prot.com/pub/linux/fp-linux-ws_4.6.2-1_i386.deb
  • Lo instalamos
dpkg -i /home/jesus/fp-linux-ws_4.6.2-1_i386.deb

2.- Vamos a http://www.amavis.org/ y descargamos el paquete en código fuente.

wget http://www.amavis.org/dist/perl/amavis-0.3.12.tar.gz

3.- Seleccionamos en el software de contribución un parche

wget http://www.amavis.org/contrib/amavis-courier.patch.2

4.-Descomprimimos el amavis.

tar xvfz amavis-0.3.12.tar.gz

5.- Aplicamos el parche que hemos bajado

patch -p1 < /tmp/amavis-courier.patch.2

6.- Ahora hay que instalar una serie de librerias.

apt-get install libmime-perl libconvert-tnef-perl libconvert-uulib-perl libarchive-tar-perl libcompress-zlib-perl libunix-syslog-perl nomarch libconfig-inifiles-perl
libfile-mmagic-perl perl-suid unarj lha unrar rar libwww-perl zoo libarchive-zip-perl
      • Básicamente son librería de compresión y descompresión de archivos.

7.- Instalar el paquete arc

apt-get install arc

8.- Seguimos

cd `aclocal --print-ac-dir`

Nos da un error debido a que aclocal no está instalado. Lo buscamos en debian.org

Está en el paquete automake como binario. Instalamos automake.

apt-get install automake

Volvemos a ejecutar cd `aclocal --print-ac-dir`

cd `aclocal --print-ac-dir` 

Nos da como resultado el cambio de directorio al punto donde se encuentra aclocal.

Debemos buscar un archivo m4source/acx_pthread.m4 en el google y lo copiamos al directorio que nos da el comando anterior.

http://sentinel.dk/cookbook/?Courier-ClamAV-Amavis_combo&print
http://www.google.com/search?q=m4source%2Facx_pthread.m4&sourceid=mozilla&start=0&start=0&ie=utf-8&oe=utf-8

Y descargamos el archivo acx_pthread.m4

wget http://autoconf-archive.cryp.to/acx_pthread.m4

En el directorio arriba indicado.

Nos vamos al directorio donde descamprimimos amavis, en nuestro caso

cd /tmp/amavis-0.3.12

Y ejecutamos

aclocal && automake && autoconf

Editamos el fichero de configuración

vi configure                       

Y buscamos MTA=sendmail

Quitamos sendmail y ponemos courier

MTA=courier

Añadimos un usuario

useradd amavis -d /var/spool/amavis -s /bin/false

Ahora configuramos para compilar, dentro del directorio dónde descomprimimos amavis.

./configure --with-amavisuser=amavis --enable-courier --with-mailto=postmaster --with-mailfrom=postmaster --enable-credits

Salida

    • Configuration summary for amavis 0.3.12 "2003-03-07":
 Install amavis as:          ${exec_prefix}/sbin/amavis
 Configured for use with:    courier
 Configuration type:         simple
 Original sendmail.cf:
 Use virus scanner(s):       FRISK Antivirus for Linux
 Scanner runs as:            amavis
 Logging to syslog:          yes
 Run-time directory:         /var/amavis
 Quarantine directory:       /var/virusmails
 Max. recursion depth:       20
 Max. archive nesting depth: 3
 Max. number of extracted files: 500
 Add X-Virus-Scanned header: yes
 Display AMaViS credits:     yes
 Warn sender:                yes
 Warn recipient(s):          yes
 Reports sent to:            postmaster
 Reports sent by:            postmaster

Y hacemos

make && make install

En estos momentos el Amavis ya está instalado, solo falta integrarlo con courier.

Integración de Amavis con Courier 24112005

editar

Le damos todos los permisos a la carptea amavis

chmod 777 /var/amavis /var/virusmails

Y que ambas capetas pertenezcan al usuario amavis

chown amavis /var/amavis /var/virusmails

Y por fin solo queda editar el fichero /etc/courier/courierd.

vi /etc/courier/courierd

Buscamos DEFAULTDELIVERY, esta dirección la cambiamos para que pase por el antivirus antes de ir a la carpeta de correo, usamos maildrop para que antes de entregar el correo, lo pase por antivirus, antispam.... Cambiamos lo que hay por defecto por:

DEFAULTDELIVERY="| /usr/bin/maildrop"

Editamos fichero de configuración del maildrop.

vi /etc/courier/maildroprc

Y metemos esto

#Sacamos varias variables que el antivirus necesita
import SENDER
import RECIPIENT
SH_SENDER=escape($SENDER)
SH_RECIPIENT=escape($RECIPIENT)

xfilter "/usr/sbin/amavis $SH_SENDER $SH_RECIPIENT"

Reiniciamos courier

reiniciacourier

Y hacemos pruebas en envio de correo. Existen varios archivos de test buscar por eicar1.zip a eiacarn.zip

Para obtener actualizaciones del antivirus.

/usr/local/f-prot/tools/check-updates.pl

Y para configurar las actualizaciones para que se ejecuten cada cierto tiempo usamos el crontab. Podemos hacer que se ejecute cada dia, cada semana o cada mes. Vamos a hacer que se ejecute cada dia. Editamos el el /etc/cron.daily

vi /etc/cron.daily/BaseVirus

Le insertamos la orden

#!/bin/bash
/usr/local/f-prot/tools/check-updates.pl

Grabamos y salimos.

Y le damos a este archivo permisos de ejecución.

chmod 755 /etc/cron.daily/BaseVirus

Instalación del AntiSpam

editar

El correo no se elimina, sino que se indica como tal. Y el usuario es quién decide qué hacer con él.

apt-get install spamassassin

Editamos el fichero /etc/default/spamassassin

vi /etc/default/spamassassin

Y ponemos ENABLED=0 a 1

ENABLED=1

Y editamos el fichero de configuración del Maildrop

vi /etc/courier/maildroprc

Añadimos un nuevo xfilter antes del amavis.

#Analiza correos siempre que los correos sean menores de 256K

if ( $SIZE < 262144 )
{
 xfilter "/usr/bin/spamassassin -P"
}

Reiniciamos el courier

reiniciacourier

Y probamos con dos ejempos:

Este sin spam

 zcat /usr/share/doc/spamassassin/examples/sample-nonspam.txt.gz | mail -s "Correo sin Spam" jesus@pol4.net

Este con spam

cat /usr/share/doc/spamassassin/examples/sample-spam.txt | mail -s "Correo con Spam" jesus@pol4.net

Editamos el fichero /etc/spamassassin/local.cf

nano /etc/spamassassin/local.cf

Y ponemos

rewrite_subject 1
report_header 1
defang_mime 0 

Para sacar la ayuda del SpamAssessin

man Mail::SpamAssassin::Conf

Lista de correo válido o inválido.


Editamos /usr/share/spamassassin/60_whitelist.cf

nano /usr/share/spamassassin/60_whitelist.cf

Podemos configurar de forma genérica o individualizada el lenguaje delos mensajes.

vi /home/jesus/.spamassassin/user_prefs

Ó buscando parte del mensaje en el sistema

fgrep -i template /home/jesus/.spamassassin/*