Commit be780b6f authored by Elena Grandi's avatar Elena Grandi
Browse files

Pacchetti e repository: cowbuilder è il metodo consigliato per le build

parent 05051b2f
...@@ -68,31 +68,79 @@ quanto segue a ``~/.ssh/config``:: ...@@ -68,31 +68,79 @@ quanto segue a ``~/.ssh/config``::
Inoltre non verrà salvato il fingerprint dei server, ma verrà chiesto Inoltre non verrà salvato il fingerprint dei server, ma verrà chiesto
ogni volta di verificarlo. ogni volta di verificarlo.
A luglio 2018 i fingerprint di isolda sono:: A marzo 2019i fingerprint di isolda sono::
256 SHA256:aLTgA+Trj5iYo0dl0i8Q82aigs3K/dPwDbazrvG95YY root@isolda (ECDSA) 256 SHA256:aLTgA+Trj5iYo0dl0i8Q82aigs3K/dPwDbazrvG95YY root@isolda (ECDSA)
256 SHA256:7i6j0jXPWRrW6LXDGbR+HWr3AFJi6gGSmdW41uBRJV4 root@isolda (ED25519) 256 SHA256:7i6j0jXPWRrW6LXDGbR+HWr3AFJi6gGSmdW41uBRJV4 root@isolda (ED25519)
2048 SHA256:OkP1maDf0pSIGCdq1mph8oI8CTADMrFXfe3aty608SA root@isolda (RSA) 2048 SHA256:OkP1maDf0pSIGCdq1mph8oI8CTADMrFXfe3aty608SA root@isolda (RSA)
Chroot Cowbuilder
'''''' ''''''''''
I pacchetti ``.deb`` vanno buildati all'interno della versione di .. note::
destinazione in cui andranno installati; il modo più semplice per farlo cowbuilder e pbuilder sono degli strumenti per gestire delle chroot
è creare una chroot ed installarvi gli strumenti di base per la all'interno delle quali effettuare build di pacchetti in un ambiente
generazione di pacchetti:: pulito e abbastanza isolato dal sistema base.
# mkdir <versione>_build Buildare pacchetti all'interno di un sistema isolato è utile per
# debootstrap <versione> <versione>_build (<mirror>) evitare influenze da parte del proprio sistema (con librerie ed altre
# chroot <versione>_build dipendenze già installate, magari in versioni non standard), ma è
# apt install debhelper devscripts dpkg-dev anche comodo nel caso si vogliano generare pacchetti per
distribuzioni diverse da quelle in uso (ad esempio buildare per
jessie o stretch su un sistema buster)
Oltre a quanto indicato sopra, installare cowbuilder e pbuilder::
# apt install pbuilder cowbuilder
ed assicurarsi che l'utente che si vuole usare per lanciare le build
faccia parte del gruppo ``sudo``.
Quindi creare le chroot base per le distribuzioni attualmente (marzo
2019) in uso stretch e jessie::
# cowbuilder --create --distribution stretch --debootstrap debootstrap \
--basepath /var/cache/pbuilder/base-fuss-stretch.cow
# cowbuilder --create --distribution jessie --debootstrap debootstrap \
--basepath /var/cache/pbuilder/base-fuss-jessie.cow
Aggiungere i repository di backports e fuss alle chroot base appena
create: fare login nella chroot::
# cowbuilder --login --save-after-login \
--basepath /var/cache/pbuilder/base-fuss-stretch.cow
ed effettuare le modifiche a ``/etc/apt/sources.list`` e l'aggiunta
della chiave (sostituendo ``<mirror>`` con un mirror debian opportuno,
ad esempio quello già presente in ``/etc/apt/sources.list``::
# echo 'deb <mirror> stretch-backports main' >> /etc/apt/sources.list
# echo 'deb http://archive.fuss.bz.it/ stretch main contrib' \
>> /etc/apt/sources.list
# apt install gnupg
# apt-key add - # incollare i contenuti di
# https://archive.fuss.bz.it/apt.key seguiti da ctrl-d
# apt remove gnupg
# apt autoremove
# apt update
# exit
.. note::
nella chroot minimale da stretch in poi non è presente gnupg, che è
necessario per l'uso di apt-key add: lo installiamo per l'operazione
e rimuoviamo subito dopo per essere certi che l'immagine sia sempre
minimale e continuare ad accorgersi di eventuali dipendenze non
esplicitate nei pacchetti che generiamo.
Ripetere la stessa cosa per la chroot ``jessie``.
dove ``<versione>`` è al momento (settembre 2018) ``jessie`` per il FUSS
server e ``stretch`` per il FUSS client.
In alternativa, vedere la sezione :ref:`cowbuilder` per gestire Nel caso in cui le chroot siano state create da un po' di tempo è
automaticamente le chroot, inclusa l'installazione automatica delle opportuno aggiornarle, coi seguenti comandi::
eventuali dipendenze necessarie.
# cowbuilder --update --basepath /var/cache/pbuilder/base-fuss-stretch.cow/
# cowbuilder --update --basepath /var/cache/pbuilder/base-fuss-jessie.cow/
Clone del repository Clone del repository
-------------------- --------------------
...@@ -170,23 +218,32 @@ repository:: ...@@ -170,23 +218,32 @@ repository::
debian/rules debsrc debian/rules debsrc
Per eseguire il build del pacchetto, nella directory principale del A questo punto si può usare ``pdebuild`` per eseguire la build del
repository eseguire:: pacchetto all'interno di una chroot opportuna gestita da cowbuilder
(sostituendo ``stretch`` con ``jessie`` nel caso del fuss server)::
dpkg-buildpackage -us -uc $ DIST=stretch pdebuild --use-pdebuild-internal --pbuilder cowbuilder -- --basepath /var/cache/pbuilder/base-fuss-stretch.cow/
Se la procedura va a buon fine, nella directory superiore si troveranno ``pdebuild`` provvederà autonomamente ad installare le dipendenze
i pacchetti ``.deb`` generati, e anche i file ``.changes``, ``.dsc`` e necessarie all'interno della chroot e ad effettuare la build.
``.tar.gz`` con il sorgente del pacchetto.
La procedura potrebbe fallire con un errore contenente:: Generalmente, l'infrastruttura di build [#infrastruttura]_ è in grado di
capire dal numero di versione ed altri indizi se sia necessario o meno
includere la tarball ``.orig`` tra ciò che va uploadato.
Nel caso in cui però si stia effettuando un backport questo non è
automatico: per il primo backport di una certa versione upstream è
necessario prevedere l'inclusione della tarball sorgente con l'opzione
``--debbuildopts "-sa"``, ovvero::
Unmet build dependencies: <pacchetto1> <pacchetto2> $ DIST=stretch pdebuild --buildresult ../build/ --use-pdebuild-internal --pbuilder cowbuilder --debbuildopts "-sa" -- --basepath /var/cache/pbuilder/base-fuss-stretch.cow/
in tal caso installare semplicemente i pacchetti e riprovare. .. [#infrastruttura] In particolare, l'inclusione o meno della tarball sorgente è
Tali dipendenze sono elencate nel campo ``Build-Depends`` del file decisa ed effettuata da ``dpkg-genchanges``, richiamato da
``debian/control``, nel caso ci si voglia assicurare di averle già ``dpkg-buildpackage`` al quale ``pdebuild`` passa le opzioni
installate prima di buildare. specificate con il parametro ``--debbuildopts``.
Generalmente questo avviene in automatico, senza bisogno di
preoccuparsi di chi faccia cosa.
Test Test
---- ----
...@@ -234,110 +291,54 @@ ed aggiornare il repository con il comando:: ...@@ -234,110 +291,54 @@ ed aggiornare il repository con il comando::
Verificare poi che in ``/iso/incoming/<versione>`` non siano rimasti Verificare poi che in ``/iso/incoming/<versione>`` non siano rimasti
file spuri, e nel caso cancellarli a mano. file spuri, e nel caso cancellarli a mano.
.. _cowbuilder: .. _chroot:
Build dei pacchetti con cowbuilder
==================================
cowbuilder e pbuilder sono degli strumenti per gestire delle chroot Build dei pacchetti in chroot
all'interno delle quali effettuare build di pacchetti in un ambiente =============================
pulito e abbastanza isolato dal sistema base.
Buildare pacchetti all'interno di un sistema isolato è utile per evitare Nel caso ci siano problemi con l'uso di cowbuilder, è anche possibile
influenze da parte del proprio sistema (con librerie ed altre dipendenze usare una semplice chroot all'interno della quale installare gli
già installate, magari in versioni non standard), ma è anche comodo nel strumenti di build e clonare il pacchetto.
caso si vogliano generare pacchetti per distribuzioni diverse da quelle
in uso (ad esempio buildare per jessie o stretch su un sistema buster)
Setup Setup
----- -----
Oltre a quanto indicato nelle istruzioni di setup generale, installare Per creare una chroot ed installare gli strumenti di base::
cowbuilder e pbuilder::
# apt install pbuilder cowbuilder
Quindi creare le chroot base per le distribuzioni attualmente (agosto
2018) in uso stretch e jessie::
# cowbuilder --create --distribution stretch --debootstrap debootstrap \
--basepath /var/cache/pbuilder/base-fuss-stretch.cow
# cowbuilder --create --distribution jessie --debootstrap debootstrap \
--basepath /var/cache/pbuilder/base-fuss-jessie.cow
Aggiungere i repository di backports e fuss alle chroot base appena
create: fare login nella chroot::
# cowbuilder --login --save-after-login \
--basepath /var/cache/pbuilder/base-fuss-stretch.cow
ed effettuare le modifiche a ``/etc/apt/sources.list`` e l'aggiunta
della chiave (sostituendo ``<mirror>`` con un mirror debian opportuno,
ad esempio quello già presente in ``/etc/apt/sources.list``::
# echo 'deb <mirror> stretch-backports main' >> /etc/apt/sources.list
# echo 'deb http://archive.fuss.bz.it/ stretch main contrib' \
>> /etc/apt/sources.list
# apt install gnupg
# apt-key add - # incollare i contenuti di
# https://archive.fuss.bz.it/apt.key seguiti da ctrl-d
# apt remove gnupg
# apt autoremove
# apt update
# exit
.. note::
nella chroot minimale da stretch in poi non è presente gnupg, che è
necessario per l'uso di apt-key add: lo installiamo per l'operazione
e rimuoviamo subito dopo per essere certi che l'immagine sia sempre
minimale e continuare ad accorgersi di eventuali dipendenze non
esplicitate nei pacchetti che generiamo.
Ripetere la stessa cosa per la chroot ``jessie``.
Nel caso in cui le chroot siano state create da un po' di tempo è # mkdir <versione>_build
opportuno aggiornarle, coi seguenti comandi:: # debootstrap <versione> <versione>_build (<mirror>)
# chroot <versione>_build
# apt install debhelper devscripts dpkg-dev
# cowbuilder --update --basepath /var/cache/pbuilder/base-fuss-stretch.cow/ dove ``<versione>`` è al momento (marzo 2019) ``jessie`` per il FUSS
# cowbuilder --update --basepath /var/cache/pbuilder/base-fuss-jessie.cow/ server e ``stretch`` per il FUSS client.
Build Build
----- -----
Una volta clonato o aggiornato il repository del pacchetto, aggiornata Una volta clonato il repository (dentro la chroot), incrementato il
la versione come sopra, e se necessario genererato la tarball sorgente numero di versione come sopra ed eventualmente generato il tar sorgente,
con ``debian/rules debsrc`` si può quindi usare ``pdebuild`` per per eseguire il build del pacchetto eseguire, nella directory principale
eseguire la build del pacchetto all'interno di una chroot opportuna del repository::
(sostituendo ``stretch`` con ``jessie`` nel caso del fuss server)::
$ DIST=stretch pdebuild --use-pdebuild-internal --pbuilder cowbuilder -- --basepath /var/cache/pbuilder/base-fuss-stretch.cow/ dpkg-buildpackage -us -uc
``pdebuild`` provvederà autonomamente ad installare le dipendenze Se la procedura va a buon fine, nella directory superiore si troveranno
necessarie all'interno della chroot e ad effettuare la build. i pacchetti ``.deb`` generati, e anche i file ``.changes``, ``.dsc`` e
``.tar.gz`` con il sorgente del pacchetto.
Generalmente, l'infrastruttura di build [#infrastruttura]_ è in grado di La procedura potrebbe fallire con un errore contenente::
capire dal numero di versione ed altri indizi se sia necessario o meno
includere la tarball ``.orig`` tra ciò che va uploadato.
Nel caso in cui però si stia effettuando un backport questo non è
automatico: per il primo backport di una certa versione upstream è
necessario prevedere l'inclusione della tarball sorgente con l'opzione
``--debbuildopts "-sa"``, ovvero::
$ DIST=stretch pdebuild --buildresult ../build/ --use-pdebuild-internal --pbuilder cowbuilder --debbuildopts "-sa" -- --basepath /var/cache/pbuilder/base-fuss-stretch.cow/ Unmet build dependencies: <pacchetto1> <pacchetto2>
in tal caso installare semplicemente i pacchetti e riprovare.
Tali dipendenze sono elencate nel campo ``Build-Depends`` del file
``debian/control``, nel caso ci si voglia assicurare di averle già
installate prima di buildare.
A questo punto si può procedere con test, commit+push ed upload come nel A questo punto si può procedere con test, commit+push ed upload come nel
caso generale. caso generale.
.. [#infrastruttura] In particolare, l'inclusione o meno della tarball sorgente è
decisa ed effettuata da ``dpkg-genchanges``, richiamato da
``dpkg-buildpackage`` al quale ``pdebuild`` passa le opzioni
specificate con il parametro ``--debbuildopts``.
Generalmente questo avviene in automatico, senza bisogno di
preoccuparsi di chi faccia cosa.
.. _versionamento: .. _versionamento:
Policy di versionamento Policy di versionamento
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment