Capítol 6. Construir el paquet.

Sumari

6.1. Reconstrucció completa.
6.2. «Autobuilder».
6.3. L'ordre debuild.
6.4. El paquet pbuilder.
6.5. L'ordre git-buildpackage i semblants.
6.6. Reconstrucció ràpida.

Ara hauríem d'estar preparats per construir el paquet.

Per realitzar correctament la construcció ( o la reconstrucció) completa d'un paquet, comprova que els següents paquets estan instal·lats:

Accedeix al directori principal del codi font del programa i executa la següent ordre:

  dpkg-buildpackage -rfakeroot

Aquesta ordre farà totes les tasques necessàries per construir els paquets binaris i de fonts. Més concretament:

  • neteja l'arbre del codi (debian/rules clean).

  • construeix el paquet de codi font (dpkg-source -b).

  • compila el programa (debian/rules build).

  • construeix el paquet binari (fakeroot debian/rules binary)

  • signa l'arxiu .dsc fent servir l'ordre gpg

  • genera i signa l'arxiu .changes, fent servir les ordres dpkg-genchanges i gpg

Només caldrà que escriguis dues vegades la teva contrasenya GPG [64]. Si construeixes paquets Debian per al teu ús privat, pots deixar de signar amb GPG els arxius .dsc i .changes de la següent manera:

$ dpkg-buildpackage -us -uc

Quan acabi el procés de construcció d'un paquet no nadiu Debian (p.ex.gentoo), veuràs els següents fitxers en el directori superior al directori de treball (~/gentoo/):

  • gentoo_0.9.12.orig.tar.gz

    És el codi font original comprimit, simplement s'ha canviat el nom per ajustar-ho als estandards Debian. El fitxer s'ha construït executant l'ordre dh_make -f ../gentoo-0.9.12.tar.gz a l'inici.

  • gentoo_0.9.12-1.dsc

    Aquest és un sumari dels continguts del codi font. Aquest arxiu es genera amb la informació del fitxer control i es fa servir quan es descomprimeixen les fonts amb dpkg-source(1). Aquest arxiu està signat amb GPG i així és possible comprovar qui és l'autor.

  • gentoo_0.9.12-1.debian.tar.gz

    Aquest arxiu comprimit té tots els fitxers del directori debian. Les modificacions de les fonts originals es conserven en els fitxers de pegats quilt en el directori debian/patches.

    Si una altra persona vol tornar a construir el paquet des de l'inici, pot fer-ho fàcilment fent servir aquests tres fitxers. El procés d'extracció és trivial: només cal copiar-los en un directori i executar dpkg-source -x gentoo_0.9.12-1.dsc [65].

  • gentoo_0.9.12-1_i386.deb

    Aquest és el paquet binari Debian. Pots fer servir dpkg per instal·lar o eliminar aquest paquet o qualsevol altre.

  • gentoo_0.9.12-1_i386.changes

    Aquest arxiu conté la descripció dels canvis fets en la revisió actual del paquet, i el fan servir els programes de gestió FTP del repositori Debian per instal·lar-hi els paquets binaris i de fonts. Se genera parcialment amb l'arxiu changelog i el fitxer .dsc. Aquest arxiu està signat amb GPG, per assegurar-ne l'autoria.

    Amb el temps, el paquet anirà canviat i s'afegiran funcions. Les persones que descarreguin el paquet poden llegir aquest arxiu i assabentar-se dels canvis. Els programes de manteniment del repositori Debian també envien el contingut d'aquest arxiu a la llista de correu debian-changes-announce@lists.debian.org.

Les llistes de números en els fitxers .dsc i .changes són les sumes MD5/SHA1/SHA256 dels fitxers. Les persones que descarreguen els arxius poden comprovar-los amb md5sum(1), sha1sum(1) o sha256sum(1) i si els nombres no coincideixen sabran que el fitxer està corrupte o s'ha modificat.

Quan acabi el procés de construcció d'un paquet nadiu Debian (p.ex. el_meu_paquet), veuràs els següents fitxers en el directori superior al directori de treball:

  • el_meu_paquet_1.0.tar.gz

    Aquest és el «tarball» del codi font generat a partir del directori el_meu_paquet-1.0 per l'ordre dpkg-source (el seu sufix no és orig.tar.gz).

  • el_meu_paquet_1.0.dsc

    Aquest és el resum del contingut del codi font dels paquets no nadius Debian (no te la revisió Debian).

  • el_meu_paquet_1.0_i386.deb

    Aquest és el paquet binari complet en el cas dels paquets no nadius Debian (no hi ha la revisió Debian)..

  • el_meu_paquet_1.0_i386.changes

    Aquest arxiu descriu els canvis realitzats en la versió actual del paquet de la mateixa forma que en els paquets Debian no nadius (no hi ha el codi de revisió Debian).

Debian manté diverses adaptacions «ports» amb la xarxa de servidors de compilació automàtica que executa dimonis buildd en ordinadors d'arquitectura diferent. Encara que tu no hauràs de fer res de tot això, has de conèixer el processament del teu paquet. Veurem com es processa el paquet per compilar-ho en diferents arquitectures [66].

Els paquets del tipus Architecture: any, són construïts pel sistema de compilació automàtica. El sistema garanteix la instal·lació de:

A continuació s'executa la següent ordre en el directori de les fonts:

$ dpkg-buildpackage -B

D'aquest manera, s'executa tot el necessari per a la construcció del paquet binari depenent de l'arquitectura per a cada arquitectura. Fa el següent:

  • neteja l'arbre del codi (debian/rules clean).

  • compila el programa (debian/rules build).

  • construeix el paquet binari per a l'arquitectura (fakeroot debian/rules binary-arch).

  • signa l'arxiu .dsc fent servir l'ordre gpg

  • genera i signa l'arxiu .changes, fent servir les ordres dpkg-genchanges i gpg

Així, el paquet estarà disponible per a altres arquitectures.

Encara que és necessari instal·lar els paquets llistats en el camp Build-Depends-indep per a la construcció de paquets normal (consulta Secció 6.1, «Reconstrucció completa.»), el sistema automàtic de construcció no ho requereix degut a què només construeix paquets binaris dependents de l'arquitectura [67]. Aquestes diferències entre l'empaquetament normal i l'automàtic determinen si els paquets requerits per a la compilació s'han de llistar en el camp Build-Depends o en el camp Build-Depends-indep del fitxer debian/control (consulta Secció 4.1, «El fitxer control).

Pots automatitzar encara més el procés de construcció de paquets de dpkg-buildpackage amb l'ordre debuild. Consulta debuild(1).

La personalització de l'ordre debuild pot fer-se mitjançant els fitxers /etc/devscripts.conf o ~/.devscripts. Et suggereixo almenys els següents valors:

DEBSIGN_KEYID=La_teva_ID_de_la_clau_GPG
DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"

Amb aquesta configuració pots construir paquets sempre amb la teva clau GPG, evitant incloure components no desitjats (i facilitant el patrocini del paquet) i la inspecció del paquet amb l'ordre lintian en el mode detallat.

Per exemple, netejar el codi i reconstruir el paquet des d'un compte d'usuari és tan simple com:

  debuild clean
  debuild

Aquí, si construeixes un paquet Debian només pel teu ús personal, pots saltar la signatura amb GPG dels arxius .dsc i .changes fent el següent:

$ debuild -us -uc

Pots eliminar els fitxers generats en la compilació executant:

$ debuild clean

El paquet pbuilder és molt útil per aconseguir un entorn net (chroot) on comprovar les dependències [68]. Això assegura una construcció neta des del codi per a la construcció automàtica en la distribució sid per a diferents arquitectures i evita errades serioses del tipus FTBFS (Petada en la construcció des de les fonts o «Fail to Build From Source»), que són sempre de tipus RC (errades critiques per a la publicació o «release critical») [69].

És possible personalitzar el funcionament del paquet pbuilder en els següents aspectes:

  • permet que el teu usuari tengui permís d'escriptura en el directori /var/cache/pbuilder/result.

  • genera un directori, p. ex. /var/cache/pbuilder/hooks, amb permís d'escriptura per al teu usuari. En aquest directori posaràs els guions «hook».

  • Estableix els fitxers ~/.pbuilderrc o /etc/pbuilderrc amb el següent contingut:

    AUTO_DEBSIGN=${AUTO_DEBSIGN:-yes}
    HOOKDIR=/var/cache/pbuilder/hooks
    

Així signaràs els paquets amb la teva clau GPG emmagatzemada en el directori ~/.gnupg/.

Ara pots inicialitzar el sistema local pbuilder chroot per primera vegada executant:

$ sudo pbuilder create

Si treballes amb un paquet font complet, executa les següents ordres en el directori on tenguis els fitxers nom_del_paquet.orig.tar.gz, nom_del_paquet.debian.tar.gz i nom_del_paquet.dsc per actualitzar el sistema local pbuilder chroot i, a continuació, compilar el paquet binari:

$ sudo pbuilder --update
$ sudo pbuilder --build nom_del_paquet.dsc

En acabar la compilació, el paquet compilat estarà en el directori /var/cache/pbuilder/result/ i tu en seràs el propietari.

La signatura GPG dels arxius .dsc i .changes es poden generar de la següent manera:

$ cd /var/cache/pbuilder/result/
$ debsign nom_del_paquet_versió.dsc
$ debsign nom_del_paquet_versió_arqutectura.changes

Si en lloc d'iniciar la construcció del paquet a partir d'un paquet ja construït, disposes d'un directori amb les fonts originals actualitzades, hauràs d'executar les següents ordres des del directori de les fonts originals (on hi haurà el directori debian amb el seu contingut):

$ sudo pbuilder --update
$ pdebuild

Aquí, si construeixes paquets Debian només pel teu ús privat, pots deixar de signar amb GPG els arxius .dsc i .changes de la següent manera:

$ AUTO_DEBSIGN=no pdebuild

Pots «connectar-te» a l'entorn chroot executant l'ordre pbuilder --login --save-after-login i configurar-lo per adaptar-lo a les teves necessitats. Aquest entorn pot desar-se sortint del «shell» amb ^D (Control-D).

La darrera versió de l'ordre lintian pot executar-se automàticament en l'entorn chroot fent servir el guió «hook» disponible a /var/cache/pbuilder/hooks/B90lintian i configurat de la següent manera [70]:

#!/bin/sh
set -e
install_packages() {
        apt-get -y --force-yes install "$@"
        }
install_packages lintian
echo "+++ informe de lintian +++"
su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes" - pbuilder
# fes servir aquesta versió si no vols que lintian aturi la compilació
#su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes; :" - pbuilder
echo "+++ final del informe de lintian +++"

Has de tenir un entorn sid actualitzat per construir correctament paquets per a sid. En realitat, la versió sid pot tenir errades que no fan recomanable la migració del teu sistema en aquesta versió. El paquet pbuilder t'ajuda a fer front en aquesta situació.

És possible que hagis d'actualitzar el paquet per a la versió stable després de distribuir-lo per a stable-proposed-updates, stable/updates, etc [71]. En algunes ocasions, «Jo treballo amb la versió sid» pot no ésser una excusa per deixar d'actualitzar el paquet. El paquet pbuilder t'ajuda a treballar en entorns per a totes les distribucions derivades Debian en una arquitectura determinada.

Consulta http://www.netfort.gr.jp/~dancer/software/pbuilder.html, pdebuild(1), pbuilderrc(5), i pbuilder(8).

Si l'autor original fa servir un sistema de gestió de versions per al codi (VCS) [72] pots considerar fer-ho servir. Així facilites la coordinació i la selecció dels pegats per a les fonts. Debian disposa de diversos paquets de guions especialitzats en cada tipus de VCS:

  • git-buildpackage: conjunt per a la compilació de paquets en repositoris «Git».

  • svn-buildpackage: programes d'ajuda per al manteniment de paquets Debian amb «Subversion».

  • cvs-buildpackage: conjunt de paquets de guions Debian per a estructures de directoris CVS.

L'ús de git-buildpackage està esdevenint bastant popular entre els desenvolupadors Debian per la gestió dels paquets Debian amb el servidor «Git» a alioth.debian.org. [73] Aquest paquet ofereix moltes ordres per automatitzar el manteniment dels paquets.

  • git-import-dsc(1): importa la versió anterior del paquet Debian al repositori «Git».

  • git-import-orig(1): importa el nou fitxer «tar» de l'autor al repositori «Git».

  • git-dch(1): genera el fitxer de canvis Debian fent servir els missatges de canvis de «Git».

  • git-buildpackage(1): construeix els paquets Debian des del repositori «Git».

  • git-pbuilder(1): construeix els paquets Debian des del repository «Git» fent servir pbuilder/cowbuilder.

Aquestes ordres fan servir 3 branques per gestionar el procés d'empaquetat.

  • main pels directoris de fonts del paquet Debian.

  • upstream pels directoris de les fonts de l'autor.

  • pristine-tar pel fitxer comprimit «.tar» de l'autor generat per l'opció --pristine-tar.[74]

Pots configurar git-buildpackage amb ~/.gbp.conf. Consulta gbp.conf(5). [75]

Amb un paquet gran, pot ésser que no vulguis re-compilar des de l'inici cada vegada que fas algun canvi en el fitxer debian/rules. Per fer proves, pots construir un arxiu .deb sense re-compilar les fonts executant [76]:

$ fakeroot debian/rules binary

O simplement pots comprovar si el paquet se compila amb:

$ fakeroot debian/rules build

Un cop has acabat la posada a punt, caldrà reconstruir el paquet amb el procediment explicat anteriorment. No podràs enviar al repositori els fitxers .deb construïts d'aquesta manera.



[64] Aquesta clau GPG ha de ser signada per un desenvolupador de Debian per connectar-se a la web de confiança i cal registrar-la a l'anell de claus de Debian. Això permet que els paquets siguin acceptats a l'arxiu de Debian. Consulta Creating a new GPG key i Debian Wiki on Keysigning.

[65] Pots evitar l'aplicació automàtica dels pegats per quilt en els paquets amb el format 3.0 (quilt) al final de l'extracció amb l'opció --skip-patches. També pots optar per desfer les modificacions, una vegada acabada l'extracció, executant dquilt pop -a.

[66] El funcionament del sistema actual de compilació automàtica és més complicat del que s'explica en aquest document. Molts dels detalls del seu funcionament no són objectiu d'aquest document.

[67] A diferència a com funciona el paquet pbuilder (que s'explicarà més endavant), l'entorn chroot del paquet sbuild fet servir pel sistema automàtic no té una instal·lació mínima de paquets del sistema i pot deixar molts de paquets instal·lats.

[68] Com que el paquet pbuilder està en evolució, comprova la configuració actual consultant la documentació.

[69] Consulta http://buildd.debian.org/ per a més informació sobre el sistema de construcció automatitzada de paquets Debian.

[70] Se suposa que la variable d'entorn HOOKDIR=/var/cache/pbuilder/hooks ja està configurada. Tens exemples a /usr/share/doc/pbuilder/examples.

[71] Hi ha restriccions per a aquestes actualitzacions del teu paquet per a la versió stable.

[73] Debian wiki Alioth documenta com fer servir el servei alioth.debian.org.

[74] L'opció --pristine-tar invoca l'ordre pristine-tar que pot regenerar una còpia exacta d'un fitxer comprimit de fonts verges fent servir només un petit fitxer binari «delta» i el contingut del fitxer comprimit tipus «.tar», típicament ubicat a la branca upstream en el VCS.

[75] Aquí tens alguns recursos web disponibles per al públic expert.

[76] Les variables d'entorn que normalment estan configurades amb els valors propis no es generen amb aquest mètode. No generis mai paquets reals per a enviar a l'arxiu Debian amb aquest mètode ràpid.