Empaquetando software para Debian

De WikiSalud
Saltar a: navegación, buscar
Commons-emblem-Under construction-green
Este artículo está en una fase temprana de desarrollo, por lo que puede estar incompleto o tener aún errores de redacción o formato

Contenido

Resumen

Creación de paquetes DEB en base a software

Introducción

Esta es una guía relativamente sencilla (Debido al gran avance que ha habido con las herramientas de parte de la gente de Debian) que sin embargo debe usarse con sumo cuidado. El enfoque a usar es debmake, debuild y quilt como herramientas para empaquetado

Procedimiento

Instalación de paquetes

Estos paquetes se refieren a las herramientas que vamos a usar para empaquetar. El software que va a instalar podría necesitar otros paquetes, así que antes de empaquetarlo, debería probar a compilarlo para resolver todas las dependencias que necesite.

apt install debmake devscripts quilt git

Preparando la mesa de trabajo

Para facilitar todo, considere usar un par de variables desde consola

nombre=paquete
version=0.1

Las fuentes del software a empaquetar deben ser instaladas en un directorio que se llame <nombre_del_paquete>-<version>. Al mismo nivel que este se van a guardar todos los ficheros resultado del proceso de empaquetado, incluyendo precisamente el .deb. Así que lo recomendado es crear un directorio antes, quizá algo con el nombre más genérico del paquete.

Es decir:

mkdir $nombre
cd $nombre

Obteniendo el paquete

Lo más común es que el software a empaquetar se encuentre en github. Lo recomendable es que use el comando git para obtenerlo.

git clone https://github.com/usuario/paquete $nombre-$version

Necesitamos crear un tar.gz con el mismo nombre del directorio ya que debmake no lo hace

tar czvf $nombre-$version.tar.gz $nombre-$version

Ya que no tenemos nada parecido, vamos a crear el proyecto más simple del mundo:

mkdir $nombre-$version
cat <<"MAFI">$nombre-$version/main.c
#include <stdio.h> 

int main(){
    
    printf("Hola Mundo\n");

    return 0;
}

MAFI
cat <<"MAFI">$nombre-$version/Makefile
salida:=saludador
 
saludador:
   gcc main.c -o $(salida)

install:
   install -m 0775 $(salida) /usr/local/bin

.PHONY: clean

uninstall:
   rm /usr/local/bin/$(salida)

 
MAFI

Probamos que la compilación de nuestro paquete vaya bien:

cd $nombre-$version
# make
gcc main.c -o saludador
# make install
install -m 0775 saludador /usr/local/bin
# saludador
Hola Mundo

Ahora borramos y eliminamos todo rastro de compilación

# make uninstall 
rm /usr/local/bin/saludador

También creamos el tar para este pequeño proyecto

cd ..
tar czvf $nombre-$version.tar.gz $nombre-$version

Debianizando el paquete

Debianizar un paquete se refiere a crear una serie de ficheros que:

  • Controlan como el paquete será creado (debian/control por ejemplo)
  • Permite realizar algunos script en el proceso de instalacion (debian/postins, para realizar tareas de configuración al instalar el paquete)
  • Dota al software de algunos añadidos esenciales para estar dentro del sistema (Páginas de README y MAN)

De todas las opciones posibles, usamos debmake dentro del directorio con las fuentes del software

cd paquete-0.1/
debmake -e alortiz@salud.gob.sv -f "Alexander Ortíz"

Solucionando problemas de compilación

debuild se limita a ejecutar el proceso de compilación de la forma más sencilla posible. La construcción de este paquete va a fallar en varias maneras. La solución más sencilla (Me llevo como cuatro días darme cuenta) es la de modificar el Makefile. Como Makefile es básicamente parte del programa, es una mala idea que lo modifiquemos así nada más: La forma más correcta de hacerlo (Y tener un paquete apegado a las buenas prácticas) es la de crear un parche para nuestra aplicación. Usaremos <quilt>

# export QUILT_PATCHES=debian/patches/
# quilt new 01_construccion
Patch debian/patches//01_construccion is now on top
# quilt add Makefile 
File Makefile added to patch debian/patches//01_construccion

En este punto, ya podemos hacer las modificaciones necesarias. El archivo debe quedar de la siguiente forma:

cat <<"MAFI">Makefile
salida:=saludador

saludador:
   gcc main.c -o $(salida)

install:
   mkdir -p $(DESTDIR)/usr/bin
   install -m 0775 $(salida) $(DESTDIR)/usr/bin

.PHONY: clean

uninstall:
   rm $(DESTDIR)/usr/bin/$(salida)

clean:
   rm saludador
MAFI

Los principales cambios han sido:

* Agregamos la variable $(DESTDIR) como prefijo a todas las rutas. Esta es una buena práctica que debería usarse siempre
* Ahora que será un paquete más oficial, le es permitido (Y de hecho necesario) dejar de usar /usr/local/ por /usr/
* Creamos el directorio donde vamos a instalar el fichero. Lo que adquiere más sentido al construir el software dentro de este proceso de empaquetado. Este es un punto bastante medular de todo este proceso.

Antes de guardar los cambios, puede probar a compilar el paquete, y verá que sigue funcionando. Esto es porque todo lo que agregamos se consideran buenas prácticas en la elaboración de un Makefile que compile software.

Ahora guardamos los cambios y revertimos los cambios. El paquete sigue siendo una copia exacta de parte del proveedor, nuestros parches están en debian/patches, todo muy estándar

# quilt refresh
Refreshed patch debian/patches//01_construccion
 # quilt pop -a
Removing patch debian/patches//01_construccion
Restoring Makefile 

No patches applied

Contruyendo el paquete

En este momento, habrá visto que todo es bastante más sencillo de lo que se puede creer en un principio. En este punto, bastará con correr el siguiente comando

debuild -us -uc

Y básicamente, eso es todo. Un directorio atrás de las fuentes se encuentra el paquete. Se instala con dpkg -i

# dpkg -i ../paquete_0.1-1_amd64.deb 
Seleccionando el paquete paquete previamente no seleccionado.
(Leyendo la base de datos ... 43811 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar ../paquete_0.1-1_amd64.deb ...
Desempaquetando paquete (0.1-1) ...
Configurando paquete (0.1-1) ...
# saludador
Hola Mundo

En principio, debuild puede ser corrido muchas tanta veces como se desee; en la práctica, puede presentar algunas complicaciones según el paquete. Hasta este punto, este paquete es funcional.

Mejoras: Cumpliendo las normas de empaquetado

Hacia el final de la salida del comando hay unas lineas del tipo W: paquete Se refieren a ciertas cosas que deben arreglar en los archivos en debian/

Fuentes

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas