Product SiteDocumentation Site

Capítol 15. Creació d'un paquet Debian

15.1. Recompilació d'un paquet a partir de les fonts
15.1.1. Obtenir les fonts
15.1.2. Fer canvis
15.1.3. Inici de la recompilació
15.2. Creant el primer paquet
15.2.1. Metapaquets o paquets falsos
15.2.2. Simple arxiu de fitxers
15.3. Creació d'un repositori de paquets per a APT
15.4. Convertir-se en mantenidor de paquets
15.4.1. Aprendre a fer paquets
15.4.2. Procés d'acceptació
És bastant habitual que un administrador que ha estat gestionant paquets Debian de manera regular senti finalment la necessitat de crear els seus propis paquets, o de modificar un paquet existent. Aquest capítol pretén respondre a les preguntes més comunes en aquest camp, i proporcionar els elements necessaris per aprofitar la infraestructura de Debian de la millor manera. Amb sort, després d'haver-ho intentat amb paquets locals, potser fins i tot sentiu la necessitat d'anar més enllà i unir-vos al propi projecte Debian!

15.1. Recompilació d'un paquet a partir de les fonts

Recompilar un paquet binari és necessari sota diversos conjunts de circumstàncies. En alguns casos, l'administrador necessita una característica de programari que requereix que el programari sigui compilat a partir de les fonts, amb una opció de compilació particular; en altres, el programari empaquetat en la versió instal·lada de Debian no és prou recent. En aquest últim cas, l'administrador normalment crearà un paquet més recent a partir d'una versió més nova de Debian — com ara Testing o fins i tot Unstable — de manera que aquest nou paquet funcioni a la distribució Stable; aquesta operació s'anomena «backporting». Com de costum, abans d'emprendre una tasca d'aquest tipus, s'hauria de tenir cura de comprovar si ja s'ha fet — un cop d'ull ràpid al Debian Package Tracker per a aquest paquet revelarà aquesta informació.

15.1.1. Obtenir les fonts

Rebuilding a Debian package starts with getting its source code. The easiest way is to use the apt-get source package-name command. This command requires a deb-src line in the /etc/apt/sources.list file, and up-to-date index files (i.e. apt-get update). These conditions should already be met if you followed the instructions from the chapter dealing with APT configuration (see Secció 6.1, «Omplint el fitxer sources.list»). Note, however, that you will be downloading the source packages from the Debian version mentioned in the deb-src line.
If you need another version, you may need to download it manually from a Debian mirror or from the web site. This involves fetching two or three files (with extensions *.dsc — for Debian Source Control*.tar.comp, and sometimes *.diff.gz or *.debian.tar.compcomp taking one value among gz, bz2 or xz depending on the compression tool in use), then run the dpkg-source -x file.dsc command. If the *.dsc file is directly accessible at a given URL, there is an even simpler way to fetch it all, with the dget URL command. This command (which can be found in the devscripts package) fetches the *.dsc file at the given address, then analyzes its contents, and automatically fetches the file or files referenced within. Once everything has been downloaded, it verifies the integrity of the downloaded source packages using dscverify, and it extracts the source package (unless the -d or --download-only option is used). The Debian keyring is needed, unless the option -u is supplied.

15.1.2. Fer canvis

Usem el paquet samba com a exemple.
$ apt source samba
Reading package lists... Done
NOTICE: 'samba' packaging is maintained in the 'Git' version control system at:
https://salsa.debian.org/samba-team/samba.git
Please use:
git clone https://salsa.debian.org/samba-team/samba.git
to retrieve the latest (possibly unreleased) updates to the package.
Need to get 12.3 MB of source archives.
Get:1 http://security.debian.org/debian-security bullseye-security/main samba 2:4.13.13+dfsg-1~deb11u3 (dsc) [4,514 B]
Get:2 http://security.debian.org/debian-security bullseye-security/main samba 2:4.13.13+dfsg-1~deb11u3 (tar) [11.8 MB]
Get:3 http://security.debian.org/debian-security bullseye-security/main samba 2:4.13.13+dfsg-1~deb11u3 (diff) [468 kB]
Fetched 12.3 MB in 3s (4,582 kB/s)
dpkg-source: info: extracting samba in samba-4.13.13+dfsg
dpkg-source: info: unpacking samba_4.13.13+dfsg.orig.tar.xz
dpkg-source: info: unpacking samba_4.13.13+dfsg-1~deb11u3.debian.tar.xz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying 07_private_lib
dpkg-source: info: applying bug_221618_precise-64bit-prototype.patch
dpkg-source: info: applying [...]
The source of the package is now available in a directory named after the source package and its version (samba-4.13.13+dfsg); this is where we'll work on our local changes.
The first thing to do is to change the package version number, so that the rebuilt packages can be distinguished from the original packages provided by Debian. Assuming the current version is 2:4.13.13+dfsg-1~deb11u3, we can create version 2:4.13.13+dfsg-1~deb11u3+falcot1, which clearly indicates the origin of the package. This makes the package version number higher than the one provided by Debian, so that the package will easily install as an update to the original package. Such a change is best effected with the dch command (Debian CHangelog) from the devscripts package.
$ cd 4.13.13+dfsg-1~deb11u3
$ dch --local +falcot
L'última ordre invoca un editor de text (sensible-editor — aquest hauria de ser el vostre editor preferit si s'esmenta en les variables d'entorn VISUAL o EDITOR, i l'editor per defecte altrament) per permetre documentar les diferències aportades per aquesta recompilació. Aquest editor ens mostra que dch realment ha canviat el fitxer debian/changelog.
When a change in build options is required, the changes need to be made in debian/rules, which drives the steps in the package build process. In the simplest cases, the lines concerning the initial configuration (./configure …) or the actual build ($(MAKE) … or make … or cmake … or …) are easy to spot. If these commands are not explicitly called, they are probably a side effect of another explicit command, in which case please refer to their documentation to learn more about how to change the default behavior. With packages using dh, you might need to add an override for the dh_auto_configure or dh_auto_build commands (see their respective manual pages and debhelper(7) for explanations on how to achieve this).
Depenent dels canvis locals en els paquets, també es pot requerir una actualització al fitxer debian/control, que conté una descripció dels paquets generats. En concret, aquest fitxer conté línies Build-Depends que controlen la llista de dependències que s'han de complir en el moment de compilació del paquet. Aquestes sovint es refereixen a versions dels paquets continguts en la distribució del paquet font, però que poden no estar disponibles en la distribució utilitzada per a la recompilació. No hi ha una manera automatitzada de determinar si una dependència és real o només especificada per garantir que la construcció només s'hauria d'intentar amb l'última versió d'una biblioteca — aquesta és l'única manera que hi ha per forçar un «autobuilder» a utilitzar una versió donada del paquet durant la compilació, que és per això que els mantenidors de Debian sovint utilitzen dependències de construcció amb versions “estrictes”.
Si se sap amb seguretat que aquestes dependències de construcció són massa estrictes, no hi patiu per relaxar-les localment. Llegir els fitxers que documenten la manera estàndard de construir el programari — aquests fitxers sovint s'anomenen INSTALL — us ajudarà a esbrinar les dependències apropiades. Idealment, totes les dependències han de ser satisfetes des de la distribució utilitzada per a la recompilació; si no ho són, s'inicia un procés recursiu en el qual els paquets esmentats al camp Build-Depends han de ser “retroadaptats” abans que el paquet desitjat ho pugui ser. Alguns paquets poden no necessitar “retroadaptació”, i es poden instal·lar tal qual durant el procés de construcció (un exemple notable és debhelper). Tingueu en compte que el procés de retroadaptació pot tornar-se complex ràpidament si no aneu amb compte. Per tant, les retroadaptacions han de mantenir-se en un mínim estricte sempre que sigui possible.

15.1.3. Inici de la recompilació

Quan s'han aplicat tots els canvis necessaris a les fonts, podem començar a generar el paquet binari real (fitxer .deb). Tot el procés és gestionat per l'ordre dpkg-buildpackage.

Exemple 15.1. Recompilació d'un paquet

$ dpkg-buildpackage -us -uc
[...]
The previous command can fail if the Build-Depends field has not been updated, or if the related packages are not installed. In such a case, it is possible to overrule this check by passing the -d option to dpkg-buildpackage. However, explicitly ignoring these dependencies runs the risk of the build process failing at a later stage. Worse, the package may seem to build correctly but fail to run properly: some programs automatically disable some of their features when a required library is not available at build time. The switch can still be very useful if you only want to create a source package, which is supposed to be passed to clean build environments as described in QUICK LOOK Building packages in chrooted and virtual environments.
The other options used in the above example make sure that neither the source package's .dsc (-us) nor the produced .changes file (-uc) get signed with the package builder's cryptographic key after the asuccessful build.
More often than not, Debian developers use a higher-level program such as debuild; this runs dpkg-buildpackage as usual, but it also adds an invocation of a program that runs many checks to validate the generated package against the Debian policy. This script also cleans up the environment so that local environment variables do not “pollute” the package build. The debuild command is one of the tools in the devscripts suite, which share some consistency and configuration to make the maintainers' task easier.