wiki:crear_paquete_deb_desde_cero

Crear un paquete .deb desde cero

¿Qué es un paquete .deb?

.deb es la extensión del formato de paquetes de software de la distribución de Linux, Debian GNU/Linux y derivadas.

El programa predeterminado para manejar estos paquetes es dpkg, generalmente usando apt/aptitude.

¿Qué es dpkg?

dpkg es la base del sistema de gestión de paquetes de Debian GNU/Linux. Se utiliza para instalar, configurar, construir, quitar, y proporcionar información sobre los paquetes .deb.

En este ejemplo crearemos un paquete.deb a partir de un script.sh de prueba.

Creamos el script.sh

$ touch script.sh

Luego llenamos el script con el siguiente contenido:

#!/bin/bash
VAL=10
echo $VAL

Guardamos, este script imprime el valor de una variable precargada.

Podemos probarlo con:

$ bash script.sh

Los scripts de ejecución de la mayoría de programas instalados en GNU/Linux Debian se guardan la ruta /usr/bin del sistema, por tanto crearemos un paquete que siga esa regla.

Creamos un directorio donde guardaremos todos los ficheros que irán dentro de nuestro paquete. Podemos usar cualquier nombre, luego entramos en el directorio creado.

$ mkdir tmp && cd tmp

Dentro de la carpeta tmp creamos otro directorio.

tmp$ mkdir mipaquete

Dentro del directorio creado mipaquete crearemos otra carpeta llamada usr.

tmp$ cd mipaquete
tmp/mipaquete$ mkdir usr

Luego, dentro de la carpeta usr crearemos otra carpeta llamada bin

tmp/mipaquete$ cd usr
tmp/mipaquete/usr$ mkdir bin

Ahora movemos el script.sh a ese directorio tmp/mipaquete/usr/bin

$ cd
$ mv script.sh tmp/mipaquete/usr/bin/

Ahora creamos otro directorio junto a la carpeta mipaquete llamado DEBIAN, que contendra el fichero de paquete de control. Este es un fichero con un determinado formato y que proporciona informacion del contenido del paquete .deb

tmp$ mkdir DEBIAN

Dentro de la carpeta DEBIAN Creamos el fichero de control con:

tmp$ cd DEBIAN
tmp/DEBIAN$ touch control

Luego, el fichero control lo llenamos con lo siguiente:

Descripción de como llenar el fichero control:

Package: NombreDelPaquete (no se permiten espacios o caracteres _)
Priority: optional
Section: misc
Maintainer: NombreDelCreador <email>
Architecture: all
Version: 1.0
Depends: NombrePaquete1, NombrePaquete2,... (si tiene alguna dependencia)
Description: Descripción corta del paquete
 Y aqui una descripción larga (No eliminar el espacio inicial al comienzo de esta línea)
(Por último, se elimina esta linea y se deja una linea vacia)

Ejemplo de fichero control para nuestra prueba:

Package: Script
Priority: optional
Section: misc
Maintainer: Argenis Osorio <aosorio@cenditel.gob.ve>
Architecture: all
Version: 1.0
Depends:
Description: Este script imprime el valor de una variable precargada.
 Este script imprime el valor de una variable precargada, usa una cabecera que lo distingue como script de bash

Guardamos el fichero modificado y cambiamos los permisos del directorio tmp:

$ cd
$ sudo chown -R root.root tmp/

Antes de construir nuestro paquete, nuestro directorio debería tener el siguiente contenido:

tmp/
  DEBIAN/
    control
  mipaquete/
    usr/
      bin/
        script.sh

Por último creamos el paquete en formato .deb, ejemplo:

$ dpkg -b paquete /ruta/del/paquete/nombre_paquete.deb

Creamos el .deb de nuestra prueba

$ dpkg -b tmp /home/debian/mipaquete.deb

El comando nos muestra:

dpkg-deb: construyendo el paquete `script' en `/home/debian/mipaquete.deb'.

Me generará mipaquete.deb con el script listo para instalar.

Comandos básicos de dpkg

Listar el contenido de nuestro paquete:

$ dpkg -c mipaquete.deb

Desempaquetamos el contenido del paquete en una ruta, necesario es crear la ruta donde se va a guardar antes de ejecutar el comando:

$ dpkg -x mipaquete.deb /home/debian/tmp/

Mostrar información sobre el paquete, sobre las dependencias y las versiones de las mismas, con esto veremos el contenido que escribimos en el fichero control:

$ dpkg --info mipaquete.deb

Información de nuestro paquete:

Package: Script
Priority: optional
Section: misc
Maintainer: Argenis Osorio <aosorio@cenditel.gob.ve>
Architecture: all
Version: 1.0
Depends:
Description: Este script imprime el valor de una variable precargada.
 Este script imprime el valor de una variable precargada, usa una cabecera que lo distingue como script de bash.

Last modified 2 years ago Last modified on Aug 24, 2016, 5:39:00 PM