De código fuente a paquete .deb con checkinstall

Debian todo lo hace sencillo. Vamos a ver cómo crear fácilmente un paquete .deb a partir del código fuente de una aplicación. Para ello utilizaremos checkinstall. De su página man:

Como vemos sirve para crear otro tipo de paquetes como RPM o TGZ, pero en este caso nos centraremos en los .deb

Si no lo tenemos instalado, procedemos a ello con:

apt-get install checkinstall

Imaginemos que queremos compilar una determinada versión del servidor web Apache con unas opciones específicas. Lo primero que haríamos sería descargar el código fuente:

wget -c http://apache.rediris.es//httpd/httpd-2.4.23.tar.gz

Posteriormente desempaquetaríamos y lanzaríamos un configure con las opciones para la compilación:

tar -zxvf httpd-2.4.23.tar.gz
cd httpd-2.4.23
./configure --prefix=/opt/apache-2.4.23 --enable-mods-shared=all --enable-ssl \
--enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http \
--enable-proxy-scgi --enable-proxy-ajp --enable-proxy-balancer --with-mpm=worker

Después un make:

make

Y finalmente haríamos un make install… Pero no, en esta ocasión vamos a construir el paquete con checkinstall. Con la opción -D indicamos que vamos a crear un paquete .deb, con --pkgname indicamos el nombre del paquete y con --fstrans=no deshabilitamos el uso de un directorio temporal durante la instalación (he necesitado esta opción para poder compilar el binario sin errores). Procedemos entonces con:

checkinstall -D --pkgname=apache-with-proxy-balancer --fstrans=no make install

Posteriormente tendremos que contestar alguna que otra pregunta, como por ejemplo la descripción del paquete.

checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
           This software is released under the GNU GPL.


The package documentation directory ./doc-pak does not exist. 
Should I create a default set of package docs?  [y]: 

Preparing package documentation...OK

Please write a description for the package.
End your description with an empty line or EOF.
>> Apache .deb package with mod_proxy_balancer compiled
>> 

Después, tendremos la opción de cambiar una serie de campos (mantenedor, descripción, licencia, etc…) referentes a la información asociadada al paquete que vamos a generar:

*****************************************
**** Debian package creation selected ***
*****************************************

This package will be built according to these values: 

0 -  Maintainer: [ root@debianbob ]
1 -  Summary: [ Apache .deb package with mod_proxy_balancer compiled ]
2 -  Name:    [ apache-with-proxy-balancer ]
3 -  Version: [ 2.4.23 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ httpd-2.4.23 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ apache-with-proxy-balancer ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Enter a number to change any of them or press ENTER to continue: 

Modificamos según necesitamos y continuamos. Si todo ha ido bien deberíamos ver lo siguiente al final:

**********************************************************************

 Done. The new package has been installed and saved to

 /root/apache/httpd-2.4.23/apache-with-proxy-balancer_2.4.23-1_amd64.deb

 You can remove it from your system anytime using: 

      dpkg -r apache-with-proxy-balancer

**********************************************************************

Una vez generado, podemos manejar el paquete con las herramientas de manejo de binarios que le corresponden, que en este caso es dpkg. Por ejemplo podemos ver que lo hemos instalado con un dpkg -l | grep apache:

ii  apache-with-proxy-balancer            2.4.23-1                             amd64        Apache .deb package with mod_proxy_balancer compiled
ii  apache2                               2.4.10-10+deb8u5                     amd64        Apache HTTP Server
ii  apache2-bin                           2.4.10-10+deb8u5                     amd64        Apache HTTP Server (modules and other binary files)
ii  apache2-data                          2.4.10-10+deb8u5                     all          Apache HTTP Server (common files)
ii  apache2-utils                         2.4.10-10+deb8u5                     amd64        Apache HTTP Server (utility programs for web servers)
ii  apache2.2-bin                         2.4.10-10+deb8u5                     amd64        Transitional package for apache2-bin
ii  libapache2-mod-dnssd                  0.6-3.1                              amd64        Zeroconf support for Apache 2 via avahi

Para borrarlo podríamos hacer un dpkg -r apache-with-proxy-balancer. De la misma manera, para reinstalarlo haríamos un dpkg -i apache-with-proxy-balancer_2.4.23-1_amd64.deb

Como nota final, cuando lanzamos checkinstall podemos incluir todas las opciones -mantenedor, descripción, etc…- pasándolas como argumentos. Por ejemplo:

checkinstall-D -y \
  --install=no \
  --fstrans=no \
  --reset-uids=yes \
  --pkgname=apache-with-proxy-balancer \
  --pkgversion=2.4.23 \
  --arch=amd64 \
  --pkglicense=GPL \
  --maintainer="root@debianbob" \

Para echarle un vistazo a todas las opciones y posibilidades como siempre man es nuestro amigo 😉