Debian

Cómo crear un paquete Debian

Cómo crear un paquete Debian

1. Prefacio

Ser responsable de una máquina significa cuidar tanto el hardware como los componentes del software. Como se ve en la vida cotidiana como administrador de sistemas, es mucho mejor instalar el software como un paquete de software en lugar de un montón de archivos de origen. Esto reduce los costos para mantener adecuadamente el sistema.

Los paquetes que están disponibles en su distribuidor preferido son validados y supervisados ​​por un encargado del paquete. Probó el software y asegura que se ajusta a los otros paquetes de software disponibles en la distribución. Además, el paquete está firmado con una clave GPG del responsable del paquete. Esto garantiza la integridad del paquete y le muestra que el paquete proviene de una fuente confiable.

El formato del paquete depende de su distribución de Linux. Los formatos seleccionados son los siguientes:

debutante

Paquetes utilizados en: Debian GNU / Linux, Ubuntu, Armbian, Linux Mint, Knoppix

rpm

Paquetes utilizados en: RedHat, Fedora, CentOS, OpenSuse

tgz y txz

Paquetes utilizados en: Slackware

alquitrán.xz

Paquetes utilizados en: Arch Linux

Este documento explica brevemente cómo crear un paquete para Debian GNU / Linux. Para obtener información detallada sobre el formato del paquete Debian y las herramientas para mantener un sistema Linux basado en 'deb', puede consultar el Libro de administración de paquetes de Debian [dpmb]. Para crear paquetes para Debian GNU / Linux, estos documentos son esenciales:

El paquete con el que trabajaremos se llama 'helloworld' y tiene el número de versión 0.1. Para fines de demostración, simplemente contiene una única secuencia de comandos de Python que genera el famoso mensaje "Hola, mundo!”:

#!/ usr / bin / python print ("Hola, mundo!") 

2. Requisitos

2.1. Clave GPG

Como paso 1, tenga su clave GPG disponible. Más adelante, se necesitará la clave para firmar el paquete. Tenga en cuenta que los paquetes sin firmar no son confiables y no pueden ser parte del universo Debian.

En caso de que aún no tenga una clave GPG, cree una. Puede seguir los tres pasos siguientes. El primer comando genera una nueva clave, el segundo exporta su nueva clave a un archivo separado y el tercero agrega la clave a su llavero personal.

$ gpg --gen-key $ gpg -a --salida ~ /.gnupg / YOUR_NAME.gpg --exporta 'TU NOMBRE' $ gpg --import ~ /.gnupg / YOUR_NAME.gpg 

Durante la creación, asegúrese de que el nombre de pila _SU NOMBRE_ sea correcto. Es común usar una combinación de nombre y apellido. Este nombre tendrá que ser exactamente el mismo en el paquete, luego, al crear el archivo 'control' del paquete Debian. Para obtener más información sobre GPG, consulte el Manual de privacidad de GNU [gph].

2.2. La cadena de herramientas de embalaje

Para construir un paquete Debian con código fuente, se requieren los siguientes paquetes de software en su sistema:

Como usuario 'root' puede instalarlos usando el siguiente comando:

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. Prepare el software para empaquetar

Tenemos que preparar un directorio para construir el paquete. Cree un directorio para preparar el entorno en el que construiremos el paquete:

$ mkdir -p ~./ build / helloworld / 0.1 

Copia el 'alquitrán.gz 'archivo comprimido en el directorio:

$ cp helloworld-0.1.alquitrán.gz ~./ build / helloworld / 0.1 

Cambie al directorio y extraiga el paquete:

$ cd ~./ build / helloworld / 0.1 ~ / build / helloworld / 0.1 $ tar -xzf helloworld-0.1.alquitrán.gz 

Ahora, el directorio contiene tanto el código fuente en un directorio separado como el archivo comprimido:

~ / build / helloworld / 0.1 $ ls helloworld-0.1 hola mundo-0.1.alquitrán.gz 

3. Debianización

En este punto, agregaremos los archivos que son específicos de un paquete Debian. Es por eso que este paso se llama _Desbianización_ del software. Esto se hace en varios pasos únicos.

3.1 Prepare la estructura del paquete

Cambie al directorio que guarda todo el código fuente del paquete. En nuestro ejemplo, el paquete contiene el archivo 'helloworld.py ', solo:

~ $ cd build / helloworld / 0.1 / hola mundo-0.1 ~ / build / helloworld / 0.1 / hola mundo-0.1 $ ls helloworld.py 

Agreguemos los archivos que son específicos de un paquete Debian. Entra en juego la herramienta 'dh_make'. El interruptor '-e' usa la dirección dada como la dirección de correo electrónico en el campo 'Mantenedor' del archivo 'debian / control'. Para crear el paquete, use su propia dirección de correo electrónico, en su lugar. Recuerde utilizar la misma dirección de correo electrónico que corresponde a su clave GPG.

El interruptor '-f' usa el archivo dado como el archivo fuente original y omite la copia del árbol del programa actual a 'programa.orig '.

~ / build / helloworld / 0.1 / hola mundo-0.1 $ dh_make -e [email protected] -f… / helloworld-0.1.alquitrán.gz 

Cuando se le solicite, se le pedirá que seleccione el tipo de paquete que se debe crear. Para elegir _single binary_ type 's'.

Tipo de paquete: binario único, binario indep, binario múltiple, biblioteca, módulo del kernel, parche del kernel? [s / i / m / l / k / n] s Nombre del encargado del mantenimiento: Frank Hofmann Dirección de correo electrónico: [correo electrónico protegido] Fecha: Sáb, 04 de noviembre de 2017 21:16:13 +0100 Nombre del paquete: helloworld Versión: 0.1 Licencia: en blanco Tipo de paquete: Un solo golpe  para confirmar: Actualmente no hay Makefile de nivel superior. Esto puede requerir un ajuste adicional. Hecho. Edite los archivos en el subdirectorio debian / ahora. También debe verificar que helloworld Makefiles se instale en $ DESTDIR y no en / . 

Esto da como resultado un directorio llamado 'debian':

~ / build / helloworld / 0.1 / hola mundo-0.1 $ ls debian helloworld.py 

Este directorio contiene todos los archivos específicos del paquete.

3.2. Ajustar el archivo de control

El archivo 'debian / control' mantiene las dependencias que se necesitan _para construir_ el paquete. Usando el comando 'dpkg-depcheck -d ./ configure 'recibe una lista con todos los paquetes requeridos. En nuestro caso, no se necesitan más paquetes porque Python es un lenguaje interpretado.

A continuación, tenemos que editar el archivo 'debian / control' y agregar valores específicos del paquete. Para nuestro ejemplo, tiene el siguiente aspecto:

Fuente: helloworld Sección: python Prioridad: opcional Mantenedor: Frank Hofmann <[email protected]> Depende de la compilación: debhelper (> = 9) Versión estándar: 3.9.5 Página de inicio: http: // www.efho.de / # Vcs-Git: git: // anonscm.debian.org / collab-maint / helloworld.git # Vcs-Browser: http: // anonscm.debian.org /?p = collab-maint / helloworld.git; a = summary Paquete: helloworld Arquitectura: cualquiera Depende: $ shlibs: Depends, $ misc: Depends, python Descripción: Imprime Hello World en Python Imprime Hello World en Python 

3.3. Ajustar el archivo de derechos de autor

El archivo 'debian / copyright' contiene la información de licencia del paquete de software. Está preparado para el lanzamiento a través de GNU Public License 2 (GPLv2). Para nuestro ejemplo, tiene el siguiente aspecto:

Formato: http: // www.debian.org / doc / packaging-manual / copyright-format / 1.0 / Upstream-Name: helloworld Fuente: http: // www.efho.de / Archivos: debian / * Copyright: 2017 Frank Hofmann <[email protected]> Licencia: GPL-2 + Este paquete es software gratuito; puede redistribuirlo y / o modificarlo según los términos de la Licencia Pública General GNU publicada por la Free Software Foundation; ya sea la versión 2 de la Licencia, o (a su elección) cualquier versión posterior ... Este paquete se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; incluso sin la garantía implícita de COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia pública general GNU para obtener más detalles ... Debería haber recibido una copia de la Licencia pública general GNU junto con este programa. Si no, vea  . En los sistemas Debian, el texto completo de la licencia pública general GNU versión 2 se puede encontrar en "/ usr / share / common-licence / GPL-2". 

3.4. Ajustar el archivo de registro de cambios

Después de la información de copyright, el archivo 'debian / changelog' debe ajustarse. En nuestro ejemplo agregamos la información "Versión inicial".

hola mundo (0.1-1) inestable; urgencia = baja * Versión inicial - Frank Hofmann <[email protected]> Sáb, 04 de noviembre de 2017 21:16:13 +0100 

Eso es todo lo que necesitamos hasta ahora, ahora podemos construir el paquete, finalmente.


4. Construye el paquete

Para construir el paquete tenemos que subir un directorio y ejecutar el siguiente comando:

~ / build / helloworld / 0.1 / hola mundo-0.1 $ dpkg-buildpackage -rfakeroot

La opción '-rfakeroot' permite que 'dpkg-buildpackage' ejecute comandos como un usuario privilegiado con la ayuda del comando 'fakeroot'. Esto es necesario para preparar el paquete y para crear archivos y directorios.
El comando anterior da como resultado una lista más larga de mensajes de salida (que se muestran aquí en un entorno de idioma alemán):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution inestable dpkg-buildpackage: Quellen geändert durch Frank Hofmann <[email protected]> dpkg-buildpackage: Host-Architektur amd64 dpkg-source --antes de construir helloworld-0.1 fakeroot debian / rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Información: Quellformat "3.0 (edredón) "wird verwendet dpkg-source: Información: helloworld wird unter Benutzung des existierenden ./ helloworld_0.1.orig.alquitrán.gz gebaut dpkg-source: Información: helloworld wird en helloworld_0.1-1.debian.alquitrán.xz gebaut dpkg-source: Información: helloworld wird en helloworld_0.1-1.DSC gebaut debian / rules build dh construcción dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian / rules binary dh binarios dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte $ Substitutionsvariable shlibs : Depende dh_md5sums dh_builddeb dpkg-deb: Paquete "helloworld" wird en "… / helloworld_0.1-1_amd64.deb "gebaut. dpkg-genchanges <… /helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: "Frank Hofmann (Hofmann EDV) <[email protected]> "RSA Schlüssel de 4096 bits, ID D431AC07, erzeugt 2014-09-05 

4.1. Validando el paquete

Felicitaciones, logró construir un paquete Debian, sí! Ahora, echemos un vistazo más de cerca al paquete. Aquí entra en juego 'lintian'. Esta herramienta valida su paquete para encontrar violaciones de las estrictas reglas que deben cumplir los paquetes Debian.

Para ejecutar las pruebas, escriba el siguiente comando:

lintian helloworld_0.1-1_amd64.debutante 

La herramienta no encuentra infracciones de reglas, sino también errores ortográficos y caracteres incorrectos. El interruptor '-pedantic' pide a 'lintian' que sea mucho más crítico de lo habitual. Como puede ver a continuación, 'lintian' está un poco gruñón y ha descubierto tres advertencias y un error.

Excepto por la primera advertencia, podemos fácilmente hacer feliz a 'lintian' y ajustar el contenido del paquete de acuerdo con el conjunto de reglas. La advertencia 'new-package-should-close-itp-bug' significa que no hay un informe de error contra el paquete ITP (ITP significa _intend to package_). Para un paquete Debian normal, se debe enviar un informe de error al rastreador de errores del paquete ITP para notificar a otros que tiene la intención de comenzar a empaquetar este software.

4.2. Advertencia: 'readme-debian-contains-debmake-template

El archivo 'README.Debian 'tiene la intención de guardar notas adicionales sobre este paquete. 'dh_make' creó este archivo para nosotros:

helloworld para Debian ---------------------  -- Frank Hofmann <[email protected]> Sáb, 04 de noviembre de 2017 21:16:13 +0100 

En nuestro ejemplo, no tenemos información adicional, por lo que podemos eliminar el archivo.

4.3. Advertencia: 'descripción-comienza-con-espacios-iniciales'

Esta advertencia surge porque la descripción más larga de nuestro paquete en el archivo 'debian / control' comienza con más de un espacio. Tan pronto como eliminemos un solo espacio, la advertencia desaparecerá.

4.4. Error: 'descripción-sinopsis-está-duplicada'

Cada paquete requiere una descripción corta y más larga en 'debian / control'. Este error surge porque ambas descripciones son idénticas. Tan pronto como ampliamos la descripción más larga, el error desaparece.


5. Enlaces y referencias

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: la referencia del desarrollador de Debian
- [dnmg] Josip Rodin, Osamu Aoki: La guía del nuevo administrador de Debian
- [dpmb] Axel Beckert, Frank Hofmann: El libro de administración de paquetes de Debian
- [dpm] El manual de políticas de Debian
- [dpt] El tutorial de empaquetado de Debian
- [gph] El manual de privacidad de GNU
- [lushpaiPackage] Alex Lushpai: Cómo crear un paquete Debian desde la fuente


6. Agradecimientos

El autor desea agradecer a Axel Beckert y Gerold Rupprecht por su apoyo y a las críticas durante la preparación de este artículo.

Cómo descargar y jugar Sid Meier's Civilization VI en Linux
Introducción al juego Civilization 6 es una versión moderna del concepto clásico introducido en la serie de juegos Age of Empires. La idea era bastant...
Cómo instalar y jugar a Doom en Linux
Introducción a Doom La serie Doom se originó en los años 90 después del lanzamiento del Doom original. Fue un éxito instantáneo y, desde ese momento e...
Vulkan para usuarios de Linux
Con cada nueva generación de tarjetas gráficas, vemos que los desarrolladores de juegos superan los límites de la fidelidad gráfica y se acercan un pa...