Com fer la creació de paquets Debian

Debian Package Creation Howto



1. Prefaci

Ser responsable d'una màquina significa tenir cura del maquinari i dels components del programari. Com es veu a la vida quotidiana com a administrador del sistema, és molt millor instal·lar programari com a paquet de programari en lloc de fer un munt de fitxers font. Això redueix els costos per mantenir correctament el sistema.

Els paquets disponibles al vostre distribuïdor preferit són validats i supervisats per un responsable del paquet. Va provar el programari i va assegurar que s’adapta als altres paquets de programari disponibles a la distribució. A més, el paquet està signat amb una clau GPG del mantenidor del paquet. Això garanteix la integritat del paquet i us mostra que el paquet prové d’una font de confiança.







El format del paquet depèn de la vostra distribució de Linux. Els formats seleccionats són els següents:



deb

Paquets utilitzats a: Debian GNU / Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Paquets utilitzats a: Barret vermell , Fedora , CentOS , OpenSuse





tgz and txz

Paquets utilitzats a: Slackware

tar.xz

Paquets utilitzats a: Arch Linux



Aquest document explica com construir un paquet per a Debian GNU / Linux breument. Per obtenir informació detallada sobre el format del paquet Debian i les eines per mantenir un sistema Linux basat en 'deb', podeu consultar el llibre de gestió de paquets Debian [dpmb] Per construir paquets per a Debian GNU / Linux, aquests documents són essencials:

  • La Guia del nou manteniment de Debian [dnmg]
  • La referència del desenvolupador de Debian [GDR]
  • El tutorial de Debian Packaging [llauna]
  • El manual de polítiques de Debian [Dpm]

El paquet amb el qual treballarem es diu 'helloworld' i té el número de versió 0.1. A efectes de demostració, simplement conté un únic script Python que publica el famós missatge Hola, món !:

#!/usr/bin/python print ('Hello, world!') 

2. Requisits

2.1. Clau GPG

Com a pas 1, teniu disponible la vostra clau GPG. Més endavant, caldrà la clau per signar el paquet. Tingueu en compte que els paquets sense signar no són fiables i no poden formar part de l'univers Debian.

En cas que encara no tingueu una clau GPG, creeu-ne una. Podeu seguir els tres passos següents. La primera ordre genera una clau nova, la segona exporta la vostra clau nova a un fitxer separat i la tercera afegeix la clau al vostre anell de claus personal.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg 

Durant la creació, assegureu-vos que el nom de nom _EU NOM_ és correcte. És habitual utilitzar una combinació de nom i cognom. Aquest nom haurà de ser exactament el mateix al paquet, aleshores, quan creeu el fitxer `control` del paquet Debian. Per obtenir més informació sobre GPG, consulteu el manual de privadesa de GNU [gph].

2.2. La cadena d’eines d’envasat

Per crear un paquet Debian amb el codi font, calen els paquets de programari següents al vostre sistema:

  • essencial per construir
  • autoconf
  • automake
  • autotools-dev
  • dh-make
  • ajudant
  • devscripts
  • fakeroot
  • xutils
  • Lintian
  • constructor

Com a usuari `root ', podeu instal·lar-los mitjançant l'ordre següent:

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

2.3. Prepareu el programari per empaquetar

Hem de preparar un directori per construir el paquet. Creeu un directori per preparar l'entorn en què crearem el paquet:

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

Copieu l'arxiu comprimit `tar.gz` al directori:

$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1 

Canvieu al directori i extraieu el paquet:

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

Ara, el directori conté tant el codi font en un directori separat com l'arxiu comprimit:

~/build/helloworld/0.1$ ls helloworld-0.1 helloworld-0.1.tar.gz 

3. Debianització

En aquest moment afegirem els fitxers específics d’un paquet Debian. Per això, aquest pas s’anomena _Debianització_ del programari. Això es fa en diversos passos.

3.1 Prepareu l'estructura del paquet

Canvieu al directori que guarda tot el codi font del paquet. En el nostre exemple, el paquet només conté el fitxer `helloworld.py`:

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

Afegim els fitxers específics d’un paquet Debian. L'eina `dh_make` entra en joc. El commutador `-e` utilitza l'adreça indicada com a adreça de correu electrònic al camp` Maintainer` del fitxer `debian / control`. Per construir el paquet, utilitzeu la vostra pròpia adreça de correu electrònic. Tingueu present que utilitzeu la mateixa adreça electrònica que correspon a la vostra clau GPG.

El commutador `-f` utilitza el fitxer donat com a arxiu d'origen original i salta la còpia de l'arbre del programa actual a` program.orig`.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f ../helloworld-0.1.tar.gz 

Quan se us demani, se us demanarà que seleccioneu el tipus de paquet que s'hauria de crear. Per triar _un sol binari_ escriviu `s`.

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s Maintainer name : Frank Hofmann Email-Address : [email protected] Date : Sat, 04 Nov 2017 21:16:13 +0100 Package Name : helloworld Version : 0.1 License : blank Type of Package : Single Hit to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the helloworld Makefiles install into $DESTDIR and not in / . 

Això dóna lloc a un directori anomenat `debian`:

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

Aquest directori conté tots els fitxers específics del paquet.

3.2. Ajusteu el fitxer de control

El fitxer `debian / control` manté les dependències necessàries per construir el paquet. Amb l'ordre `dpkg-depcheck -d. / Configure`, rebreu una llista amb tots els paquets necessaris. En el nostre cas no hi ha cap paquet necessari perquè Python és un llenguatge interpretat.

A continuació, hem d’editar el fitxer `debian / control` i afegir valors específics del paquet. Per al nostre exemple, es presenta de la següent manera:

Source: helloworld Section: python Priority: optional Maintainer: Frank Hofmann < [email protected] > Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: 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 Package: helloworld Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python Description: Prints Hello World in Python Prints Hello World in Python 

3.3. Ajusteu el fitxer de drets d'autor

El fitxer `debian / copyright` conté la informació de llicència del paquet de programari. Està preparat per al llançament mitjançant GNU Public License 2 (GPLv2). Per al nostre exemple, es presenta de la següent manera:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Source: http://www.efho.de/ Files: debian/* Copyright: 2017 Frank Hofmann < [email protected] > License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in '/usr/share/common-licenses/GPL-2'. 

3.4. Ajusteu el fitxer de registre de canvis

Després de la informació sobre drets d'autor, s'ha d'ajustar el fitxer `debian / changelog`. Al nostre exemple, afegim la informació Versió inicial.

helloworld (0.1-1) unstable; urgency=low * Initial release -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

Això és tot el que necessitem fins ara: ara ja podem construir el paquet.


4. Construeix el paquet

Per construir el paquet hem de moure un directori cap amunt i executar l'ordre següent:

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

L'opció `-rfakeroot` permet a` dpkg-buildpackage` executar ordres com a usuari privat amb l'ajut de l'ordre `fakeroot`. Això és necessari per preparar el paquet i per crear fitxers i directoris.
L'ordre anterior dóna lloc a una llista més llarga de missatges de sortida (es mostra aquí en un entorn en idioma alemany):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann < [email protected] > dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Information: Quellformat 3.0 (quilt) wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary 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:Depends} 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 --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] > ' 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05 

4.1. Validació del paquet

Enhorabona, heu aconseguit crear un paquet Debian. Ara, donem una ullada més detallada al paquet. Aquí entra en joc 'lintian'. Aquesta eina valida el vostre paquet per trobar infraccions contra les regles estrictes que han de complir els paquets Debian.

Per executar les proves, escriviu l'ordre següent:

lintian helloworld_0.1-1_amd64.deb 

L'eina no troba infraccions de regles, sinó també errors ortogràfics i caràcters incorrectes. El commutador `–pedantic` demana a` lintian` que sigui molt més crític de l'habitual. Com podeu veure a continuació, `lintian` és una mica malhumorat i ha descobert tres advertiments i un error.

Excepte el primer avís, podem fer feliç a `lintian` i ajustar el contingut del paquet segons el conjunt de regles. L'advertència 'new-package-should-close-itp-bug' significa que no hi ha cap informe d'error contra el paquet ITP (ITP significa _intention to package_). Per a un paquet Debian normal, s'ha d'enviar un informe d'errors al tracker d'errors perquè el paquet ITP notifiqui als altres que teniu intenció d'empaquetar aquest programari.

4.2. Advertència: `readme-debian-contains-debmake-template

El fitxer `README.Debian` està destinat a guardar notes addicionals sobre aquest paquet. `dh_make` ens ha creat aquest fitxer:

helloworld for Debian --------------------- -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

En el nostre exemple, no tenim informació addicional, de manera que podem suprimir el fitxer.

4.3. Advertència: `description-starts-with-leading-spaces`

Aquest advertiment es genera perquè la descripció més llarga del nostre paquet al fitxer `debian / control` comença amb més d'un espai. Tan bon punt eliminem un sol espai, l’advertència desapareixerà.

4.4. Error: `description-synopsis-is-duplicated`

Cada paquet requereix una descripció breu i una més llarga a `debian / control`. Aquest error s'ha produït perquè les dues descripcions són idèntiques. Tan bon punt ampliem la descripció més llarga, l'error ja no existeix.


5. Enllaços i referències

- [DDR] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: La referència del desenvolupador de Debian
- [Dnmg] Josip Rodin, Osamu Aoki: La Guia del nou manteniment de Debian
- [dpmb] Axel Beckert, Frank Hofmann: El llibre de gestió de paquets Debian
- [dpm] El manual de polítiques de Debian
- [llauna] El tutorial de Debian Packaging
- [gph] El manual de privadesa de GNU
- [lushpaiPackage] Alex Lushpai: Com es crea el paquet debian des del codi font


6. Agraïments

L’autor vol agrair-ho Axel Beckert i Gerold Rupprecht pel seu suport i per la crítica durant la preparació d’aquest article.