Paquetes para slackware

De Wiki Eslack

Tabla de contenidos

Introducción

En este pequeño documento vamos a aprender a crear un paquete tgz para Slackware a partir de un programa ya hecho, y del cuál disponemos de su código fuente. Para crear el paquete, lo primero es disponer de las herramientas de desarrollo, es decir: las kernel-headers, el compilador (gcc) y demás. Para hacer el proceso lo más didáctico posible vamos a seguirlo paso a paso creando nuestro primer paquete, en este caso utilizaremos el detector de intrusos Snort.

Preparando todo

Bajamos de su página Web (http://www.snort.org/) el archivo fuente snort-2.4.3.tar.gz.

Procedemos a descomprimirlo:

# tar zxvf snort-2.4.3.tar.gz

Entramos en el directorio donde hemos descomprimido la fuente:

# cd snort-2.4.3

Es necesario arreglar o corregir los permisos de los archivos para nuestro futuro paquete.

# chown -R root:root .
# find . -perm 666 -exec chmod 644 {} \;
# find . -perm 664 -exec chmod 644 {} \;
# find . -perm 600 -exec chmod 644 {} \;
# find . -perm 444 -exec chmod 644 {} \;
# find . -perm 400 -exec chmod 644 {} \;
# find . -perm 440 -exec chmod 644 {} \;
# find . -perm 777 -exec chmod 755 {} \;
# find . -perm 775 -exec chmod 755 {} \;
# find . -perm 511 -exec chmod 755 {} \;
# find . -perm 711 -exec chmod 755 {} \;
# find . -perm 555 -exec chmod 755 {} \;

Creamos un directorio sobre el cuál pondremos el programa compilado y desde el que más tarde crearemos nuestro paquete, por convención se usa el nombre 'build':

# mkdir /tmp/build

Configurando el paquete

Ahora usaremos el archivo 'configure' de las fuentes para preparar el paquete de acuerdo a nuestras necesidades. Hay que destacar que 'configure' puede tener muchas opciones que quedan fuera del propósito de este pequeño artículo, la idea es señalar las más usuales:

--prefix=/usr

Ésta opción es para decirle dónde queremos que nos instale el programa cuándo el paquete este ya creado, es decir, que cuándo hagamos el 'installpkg' nos coloque el programa en el directorio /usr del árbol principal.

--sysconfdir=/etc

Ésta opción es para decirle dónde queremos que nos coloque los archivos de configuración del programa, normalmente es en /etc.

--localstatedir=/var

Ésta opción es para decirle dónde queremos que nos coloque las librerías, usualmente será en el directorio /var/lib.

--infodir=/usr/info

Con ésta opción le decimos dónde queremos que nos instale los documentos de información.

--mandir=/usr/man

Con ésta opción le decimos dónde queremos que nos instale las páginas del manual.

Para una descripción detallada de las opciones podemos teclear:

# ./configure --help

Nosotros para nuestro Snort le aplicaremos una opción adicional con la cuál Snort se compila preparado para trabajar volcando sus reportes en las bases de datos de MySQL, la opción es: --with-mysql=/usr.

Adicionalmente incluiremos la opción --enable-flexresp, que permite que Snort sea capaz de mandar respuestas ante determinadas alertas.


En definitiva nuestro comando ./configure es el siguiente:

# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --infodir=/usr/info --mandir=/usr/man --with-mysql=/usr ––enable-flexresp

Construyendo el paquete

El siguiente paso es compilar el programa propiamente dicho. Compilamos simplemente con make:

# make

Ahora tenemos un paso importante, una vez compilado hay que instalarlo en el directorio del cuál queremos tener todo preparado para la creación del paquete:

# make install DESTDIR=/tmp/build

También es necesario quitar los símbolos y el código innecesario de los binarios y las librerías. Se trata de un proceso de limpieza:

# strip -s /tmp/build/usr/{bin,lib}/*

Ahora comprimimos los documentos de información con el máximo nivel de compresión (-9):

Eliminamos una redundancia:
# rm -f /tmp/build/usr/info/dir

Comprimimos:
# gzip -9 /tmp/build/usr/info/*

Luego, las páginas del manual:

# gzip -9 /tmp/build/usr/man/man?/*.?

Los documentos de información y las páginas del manual pertenecen solo a una parte de la documentación del programa. Es de suma importancia identificar e introducir la documentación faltante.

Creando el directorio para la documentación:
# mkdir -p /tmp/build/usr/doc/snort-2.4.3

Ingresaremos al directorio donde descomprimimos la fuente y copiamos los documentos:
# cp -a AUTHORS COPYING README TODO FAQ /tmp/build/usr/doc/snort-2.4.3

Nota:
  El directorio es creado con el nombre del programa y la versión del mismo.
  Esto es solo un ejemplo, por lo qué tu tarea consistirá en identificarlos.

El siguiente paso es crear el directorio 'install' dónde el archivo de descripción será guardado.

# mkdir -p /tmp/build/install
# cd /tmp/build/install

Usando un editor de textos, creamos el archivo 'slack-desc', que contendrá la descripción del programa:

        |-----handy-ruler------------------------------------------------------|
programa: Nombre de la aplicación (Corta/breve descripción)
programa:
programa: Nombre y descripción extendida del programa.
programa: 
programa: Todas las 11 líneas "programa:" deben de estar presente.
programa: El handy-ruler está para ayudarte, no debes exceder de los
programa: 79 caracteres.
programa:
programa:
programa:
programa:

Ejemplo:

     |-----handy-ruler------------------------------------------------------|
snort: snort (Detector de intrusos)
snort:
snort: Snort es un sniffer de paquetes y un detector de intrusos. Es un
snort: software muy flexible que ofrece capacidades de almacenamiento de sus
snort: bitácoras tanto en archivos de texto como en bases de datos abiertas
snort: como lo es MySQL.
snort: 
snort: Visita su sitio en http://www.snort.org
snort: 
snort:
snort:

Por último, creamos el paquete:

# cd /tmp/build
# makepkg -l y -c n ../snort-2.4.3-i686-1dmg.tgz

Notas

La estructura de un paquete en Slackware es la siguiente:

nombre-versión-arquitectura-construcción.tgz

Por convención el nombre del paquete suele ser el nombre del programa. Seguido de su versión, arquitectura y número de construcción. Por ejemplo, si en un futuro modificas nuevamente el paquete pero añadiendo algun cambio significativo, el número de construcción se incrementaría. Finalmente, suele ser acompañado de las iniciales de quien creó el paquete, a esto se le denomina tag y es usado para identificar los paquetes no oficiales.

Cabe aclarar que las opciones vistas y los pasos realizados en este artículo son generales, pueden no estar presente. Dependerá en el mayor de los casos de cada fuente, algunas no poseen documentos de información, páginas del manual, archivos de configuración (/etc). Dejando a criterio del usuario las decisiones de lo mencionado.


Meleagro, Selkfoster