Sumari
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:
el paquet build-essential
.
els paquets llistats en el camp Build-Depends
del fitxer
«control» (consulta Secció 4.1, «El fitxer control
.»).
els paquets llistats en el camp Build-Depends-indep
(també de l'arxiu «control», consulta Secció 4.1, «El fitxer control
.»).
Accedeix al directori principal del codi font del programa i executa la següent ordre:
$ dpkg-buildpackage -us -uc
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
)
genera el fitxer .dsc
genera l'arxiu .changes
, fent servir l'ordre
dpkg-genchanges
Si el resultat de la compilació és satisfactori, signa els fitxers
.dsc
i .changes
amb la teva clau
privada GPG fent servir l'ordre debsign. Caldrà que
escriguis dues vegades la teva contrasenya. [64]
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).
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
.
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.
Caldrà signar els fitxers gentoo_0.9.12-1.dsc
i
gentoo_0.9.12-1_i386.changes
fent servir l'ordre
debsign amb la teva clau privada GPG emmagatzemada en el
directori ~/.gnupg/
, abans de actualitzar-los a l'arxiu
FTP de Debian. Les signatures GPG son la prova que els fitxers són realment
teus fent servir la teva clau GPG pública.
L'ordre debsign pot executar-se per signar amb el
identificador de la clau GPG (útil en el cas de patrocini de paquets)
especificada a l'arxiu ~/.devscripts
de la següent
manera:
DEBSIGN_KEYID=el_teu_identificador_de_la_clau_GPG
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.
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:
el paquet build-essential
, i
els paquets llistats en el camp Build-Depends
(consulta
Secció 4.1, «El fitxer control
.»).
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 seguit de l'ordre debuild. Consulta debuild(1).
L'ordre debuild executa l'ordre
lintian per realitzar una comprovació estàtica posterior
a la construcció del paquet Debian. És possible configurar el comportament
de l'ordre lintianmitjançant el següent a
~/.devscripts
:
DEBUILD_DPKG_BUILDPACKAGE_OPTS="-us -uc -I -i" DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"
Per exemple, netejar el codi i reconstruir el paquet des d'un compte d'usuari és tan simple com:
debuild clean debuild
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.
,
amb permís d'escriptura per al teu usuari. En aquest directori posaràs els
guions «hook».
/var/cache/pbuilder/hooks
Estableix els fitxers ~/.pbuilderrc
o
/etc/pbuilderrc
amb el següent contingut:
AUTO_DEBSIGN=${AUTO_DEBSIGN:-no}
HOOKDIR=/var/cache/pbuilder/hooks
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
i nom_del_paquet
.debian.tar.gz
per
actualitzar el sistema local nom_del_paquet
.dscpbuilder
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ó_arquitectura
.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
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
i configurat de la següent manera [70]:
/var/cache/pbuilder/hooks
/B90lintian
#!/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.
A continuació teniu un resum ràpid de la jerarquia de les ordres de construcció de paquets. Hi ha diversos procediments per fer el mateix.
debian/rules
= guió del responsable del paquet per a la
compilació
dpkg-buildpackage = nucli de l'eina de compilació de paquets
debuild = dpkg-buildpackage + lintian (compilació en un entorn amb les variables controlades)
pbuilder = nucli de l'entorn «chroot» de Debian
pdebuild = pbuilder + dpkg-buildpackage (compilació en l'entorn «chroot»)
cowbuilder = execució accelerada de pbuilder
git-pbuilder = sintaxis fàcil de fer servir de l'ordre pdebuild (la fa servir gbp buildpackge)
gbp = gestiona els fitxers Debian en un repositori «git»
gbp buildpackge = pbuilder + dpkg-buildpackage + gbp
Tot i que fer servir ordres d'alt nivell com a gbp
buildpackge i pbuilder assegura un entorn de
compilació de paquets perfecte, és important entendre com funcionen les
ordres de baix nivell com les executades per
debian/rules
i dpkg-buildpackage en
aquest entorn.
[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
.
[72] Consulta Version control systems.
[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.
Construcció de paquets Debian amb git-buildpackage
(/usr/share/doc/git-buildpackage/manual-html/gbp.html
)
Fent servir «TopGit» per a generar sèries «quilt» en la construcció de paquets Debian
[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.