Creación de paquetes de Debian Howto

Creación de paquetes de Debian Howto

Prefacio

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

Los paquetes disponibles de su distribuidor preferido son validados y supervisados ​​por un mantenedor de paquetes. Probó el software y asegura que se ajuste a los otros paquetes de software disponibles en la distribución. Además, el paquete está firmado con una clave GPG del mantenedor de paquetes. Esto garantiza la integridad del paquete y le muestra que el paquete es 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 cómo crear un paquete para Debian GNU/Linux brevemente. Para obtener información detallada sobre el formato de paquete Debian y las herramientas para mantener un sistema Linux basado en 'Deb', puede echar un vistazo al libro de gestión de paquetes de Debian [DPMB] para crear paquetes para Debian GNU/Linux Estos documentos son esenciales:

  • La Guía del Nuevo Mantenedor de Debian [DNMG]
  • La referencia del desarrollador de Debian [DDR]
  • El tutorial de empaque de Debian [DPT]
  • El Manual de Política de Debian [DPM]

El paquete con el que trabajaremos se llama 'Helloworld' y tiene la versión número 0.1. Para fines de demostración, simplemente contiene un solo guión de Python que genera el famoso mensaje "Hola, mundo!":

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

Requisitos

2.1. Llave de gpg

Como paso 1, tenga su tecla GPG disponible. Más adelante, la clave será necesaria 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 no tenga una tecla GPG aún, cree una. Puede seguir los tres pasos a continuación. El primer comando genera una nueva clave, la segunda exporta su nueva clave a un archivo separado, y el tercero agrega la clave a su llavero personal.

$ GPG-Gen-Key
$ gpg -a -output ~/.gnupg/your_name.GPG --export 'su nombre'
$ GPG -Import ~/.gnupg/your_name.gpg

Durante la creación, asegúrese de que el nombre de pila _Ur name_ sea correcto. Es común usar una combinación de nombre y apellido. Este nombre tendrá que ser exactamente el mismo en el paquete, entonces, al crear el archivo 'Control' del paquete Debian. Para obtener más información sobre GPG, eche un vistazo al Manual de Privacidad de GNU [GPH].

2.2. La cadena de herramientas de embalaje

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

  • esencial de construcción
  • autoconf
  • automoquero
  • autotools-devel
  • DH-HACE
  • depurador
  • complejos
  • faldón
  • Xutils
  • lintiano
  • pbuilder

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

# Apt-Get Instale Build-Essential Autoconf Autotools AutoTools-Dev DH-Make Desvscripts Fakeroot Xutils Lintian Pbuilder

2.3. Prepare el software a empaquetarse

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

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

Copiar el 'alquitrán.Archivo comprimido de GZ en el directorio:

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

Cambie en el directorio y extraiga el paquete:

$ CD ~./construir/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 Helloworld-0.1.alquitrán.GZ

Debianización

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

3.1 Prepare la estructura del paquete

Cambiar en el directorio que mantiene todo el código fuente del paquete. En nuestro ejemplo, el paquete contiene el archivo 'Helloworld.py ', solo:

~ $ CD Build/Helloworld/0.1/Helloworld-0.1
~/Build/Helloworld/0.1/Helloworld-0.1 $ ls
Hola Mundo.py

Agreguemos los archivos que son específicos de un paquete de Debian. La herramienta 'dh_make' entra en juego. El conmutador '-e' utiliza la dirección dada como la dirección de correo electrónico en el campo 'mantenedor' del archivo 'Debian/Control'. Construyendo el paquete Use su propia dirección de correo electrónico, en su lugar. Tenga en cuenta usar la misma dirección de correo electrónico que corresponde a su clave GPG.

El conmutador '-f' utiliza el archivo dado como el archivo de fuente original, y omite la copia del programa de programa actual al programa '.origen.

~/Build/Helloworld/0.1/Helloworld-0.1 $ dh_make -e [email protected] -f… /helloworld -0.1.alquitrán.GZ

En el aviso se le pide que seleccione el tipo de paquete que debe crearse. Para elegir _single binary_ type 's'.

Tipo de paquete: solo binario, binario independiente, múltiple binario, biblioteca, módulo de núcleo, parche de kernel?
[s/i/m/l/k/n] s
Nombre del mantenedor: Frank Hofmann
Correo electrónico: [email protected]
Fecha: sábado, 04 de noviembre de 2017 21:16:13 +0100
Nombre del paquete: Helloworld
Versión: 0.1
Licencia: en blanco
Tipo de paquete: único
Golpear para confirmar:
Actualmente no hay un archivo de nivel superior. Esto puede requerir un ajuste adicional.
Hecho. Edite los archivos en el Debian/ Subdirectorio ahora. También deberías
Verifique que los makors de Helloworld se instalen en $ Destdir y no en / .

Esto da como resultado un directorio llamado 'Debian':

~/Build/Helloworld/0.1/Helloworld-0.1 $ ls
Debian Helloworld.py

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

3.2. Ajuste el archivo de control

El archivo 'Debian/Control' mantiene las dependencias que se necesitan _ para construir el paquete. Usando el comando 'dpkg -depcheck -d ./Configurar 'Recibe una lista con todos los paquetes requeridos. En nuestro caso, no se necesita más paquete 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 se ve como sigue:

Fuente: Helloworld
Sección: Python
Prioridad: opcional
Mantenedor: Frank Hofmann
Build-Depends: Debhelper (> = 9)
Estándares-Versión: 3.9.5
Página de inicio: http: // www.efho.Delaware/
#Vcs-git: git: // anonscm.debian.org/colabs-manta/helloworld.git
#VCS-Browser: http: // anonscm.debian.org/?P = colaboración-senmar/helloworld.git; a = resumen
Paquete: Helloworld
Arquitectura: cualquier
Depende: $ shlibs: depende, $ misc: depende, python
Descripción: Imprime Hello World en Python
Imprime Hello World en Python

3.3. Ajuste el archivo de derechos de autor

El archivo 'Debian/Copyright' contiene la información de la licencia para el paquete de software. Está preparado para el lanzamiento a través de GNU Public License 2 (GPLV2). Para nuestro ejemplo se ve como sigue:

Formato: http: // www.debian.org/doc/paquete-manual/copyright-formato/1.0/
Nombre ascendente: Helloworld
Fuente: http: // www.efho.Delaware/
Archivos: Debian/*
Copyright: 2017 Frank Hofmann
Licencia: GPL-2+
Este paquete es un software gratuito; puede redistribuirlo y/o modificar
Según los términos de la Licencia Pública General de GNU publicada por
Free Software Foundation; ya sea la versión 2 de la licencia, o
(a su opción) cualquier versión posterior.
.
Este paquete se distribuye con la esperanza de que sea útil,
pero sin ninguna garantía; sin siquiera la garantía implícita de
Comerciabilidad o estado físico para un propósito particular. Ver el
Licencia pública general de GNU para más detalles.
.
Debería haber recibido una copia de la Licencia Pública General de GNU
junto con este programa. Si no, ver
.
Sobre los sistemas Debian, el texto completo del GNU General
Public License versión 2 se puede encontrar en "/usr/share/comunes-licencias/gpl-2".

3.4. Ajuste el archivo ChangeLog

Después de la información de derechos de autor, el archivo 'Debian/ChangeLog' debe ajustarse. En nuestro ejemplo, agregamos la información "Liberación inicial".

Helloworld (0.1-1) inestable; urgencia = bajo
* Versión inicial
-- Frank Hofmann sábado, 04 de noviembre de 2017 21:16:13 +0100

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


Construir el paquete

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

~/Build/Helloworld/0.1/Helloworld-0.1 $ dpkg -buildpackage -rfakeroot

La opción '-rfakerooot' permite 'dpkg-buildpackage' ejecutar comandos como un usuario privilegiado con la ayuda del comando 'Fakeroot'. Esto es necesario para preparar el paquete y crear archivos y directorios.
El comando anterior da como resultado una lista más larga de mensajes de salida (que se muestra 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
dpkg-buildpackage: host-architektur amd64
DPKG-Source--Before-Build Helloworld-0.1
Fakeroot Debian/Rules Limpie
DH limpio
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.oriente.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/Reglas Build
DH Build
dh_testdir
dh_auto_configure
dh_auto_build
dh_auto_test
Fakeroot Debian/Rules Binary
dh binario
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 depende von paket helloworld: nocekannte sustitutionsvariable $ shlibs: depende
dh_md5sums
dh_builddeb
DPKG-DEB: Paket "Helloworld" Wird in "... /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: después de la construcción de Helloworld-0.1
dpkg-buildpackage: Alles Hochzuladen (originalquellen entalten)
Signfile Helloworld_0.1-1.DSC
Sie Benötigen Eine Passfrase, um den Geheimen Schlüssel Zu entsperren.
Benutzer: "Frank Hofmann (Hofmann Edv)
"
RSA Schlüssel de 4096 bits, ID D431AC07, Erzeugt 2014-09-05

4.1. Validando el paquete

Felicitaciones - Has logrado construir un paquete Debian - Sí! Ahora, echemos un vistazo más de cerca al paquete. Aquí, 'Lintian' entra en juego. Esta herramienta valida su paquete para encontrar violaciones contra las estrictas reglas que los paquetes Debian tienen que cumplir.

Para ejecutar las pruebas, escriba el siguiente comando:

Lintian Helloworld_0.1-1_amd64.debutante

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

Excepto por la primera advertencia, podemos hacer que 'Lintian' sea feliz y el contenido del paquete de acuerdo con el conjunto de reglas. La advertencia 'New-Package-shold-Cluido-ITP-Bug' significa que no hay un informe de errores contra el paquete ITP (ITP significa _intendido a paquete_). Para un paquete de Debian regular, se debe enviar un informe de error al bugtracker para el paquete de ITP para notificar a otros que tiene la intención de comenzar a empacar este software.

4.2. ADVERTENCIA: 'Readme-debio-contiene-debmake-template

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

Helloworld para Debian
---------------------

-- Frank Hofmann sábado, 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-inicio con espacios líderes'

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

4.4. Error: 'Descripción-synopsis-is-duplicado'

Cada paquete requiere una descripción corta y más larga en 'Debian/Control'. Este error se plantea porque ambas descripciones son idénticas. Tan pronto como extendimos la descripción más larga, el error se ha ido.


Enlaces y referencias

- [DDR] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: referencia del desarrollador de Debian
- [dnmg] Josip Rodin, Osamu Aoki: la guía de Debian New Manderer
- [DPMB] Axel Beckert, Frank Hofmann: el libro de gestión de paquetes de Debian
- [DPM] El manual de políticas de Debian
- [DPT] El tutorial de empaque de Debian
- [GPH] El manual de privacidad de GNU
- [Lushpaipackage] Alex Lushpai: Cómo crear el paquete Debian desde la fuente


Agradecimientos

El autor desea agradecer a Axel Beckert y Gerold Rupprecht por su apoyo, y críticos mientras prepara este artículo.