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``::
Inoltre non verrà salvato il fingerprint dei server, ma verrà chiesto
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:7i6j0jXPWRrW6LXDGbR+HWr3AFJi6gGSmdW41uBRJV4 root@isolda (ED25519)
2048 SHA256:OkP1maDf0pSIGCdq1mph8oI8CTADMrFXfe3aty608SA root@isolda (RSA)
Chroot
''''''
Cowbuilder
''''''''''
I pacchetti ``.deb`` vanno buildati all'interno della versione di
destinazione in cui andranno installati; il modo più semplice per farlo
è creare una chroot ed installarvi gli strumenti di base per la
generazione di pacchetti::
.. note::
cowbuilder e pbuilder sono degli strumenti per gestire delle chroot
all'interno delle quali effettuare build di pacchetti in un ambiente
pulito e abbastanza isolato dal sistema base.
# mkdir <versione>_build
# debootstrap <versione> <versione>_build (<mirror>)
# chroot <versione>_build
# apt install debhelper devscripts dpkg-dev
Buildare pacchetti all'interno di un sistema isolato è utile per
evitare influenze da parte del proprio sistema (con librerie ed altre
dipendenze già installate, magari in versioni non standard), ma è
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
automaticamente le chroot, inclusa l'installazione automatica delle
eventuali dipendenze necessarie.
Nel caso in cui le chroot siano state create da un po' di tempo è
opportuno aggiornarle, coi seguenti comandi::
# cowbuilder --update --basepath /var/cache/pbuilder/base-fuss-stretch.cow/
# cowbuilder --update --basepath /var/cache/pbuilder/base-fuss-jessie.cow/
Clone del repository
--------------------
......@@ -170,23 +218,32 @@ repository::
debian/rules debsrc
Per eseguire il build del pacchetto, nella directory principale del
repository eseguire::
A questo punto si può usare ``pdebuild`` per eseguire la build del
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
i pacchetti ``.deb`` generati, e anche i file ``.changes``, ``.dsc`` e
``.tar.gz`` con il sorgente del pacchetto.
``pdebuild`` provvederà autonomamente ad installare le dipendenze
necessarie all'interno della chroot e ad effettuare la build.
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.
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.
.. [#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.
Test
----
......@@ -234,110 +291,54 @@ ed aggiornare il repository con il comando::
Verificare poi che in ``/iso/incoming/<versione>`` non siano rimasti
file spuri, e nel caso cancellarli a mano.
.. _cowbuilder:
Build dei pacchetti con cowbuilder
==================================
.. _chroot:
cowbuilder e pbuilder sono degli strumenti per gestire delle chroot
all'interno delle quali effettuare build di pacchetti in un ambiente
pulito e abbastanza isolato dal sistema base.
Build dei pacchetti in chroot
=============================
Buildare pacchetti all'interno di un sistema isolato è utile per evitare
influenze da parte del proprio sistema (con librerie ed altre dipendenze
già installate, magari in versioni non standard), ma è 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)
Nel caso ci siano problemi con l'uso di cowbuilder, è anche possibile
usare una semplice chroot all'interno della quale installare gli
strumenti di build e clonare il pacchetto.
Setup
-----
Oltre a quanto indicato nelle istruzioni di setup generale, installare
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``.
Per creare una chroot ed installare gli strumenti di base::
Nel caso in cui le chroot siano state create da un po' di tempo è
opportuno aggiornarle, coi seguenti comandi::
# mkdir <versione>_build
# debootstrap <versione> <versione>_build (<mirror>)
# chroot <versione>_build
# apt install debhelper devscripts dpkg-dev
# cowbuilder --update --basepath /var/cache/pbuilder/base-fuss-stretch.cow/
# cowbuilder --update --basepath /var/cache/pbuilder/base-fuss-jessie.cow/
dove ``<versione>`` è al momento (marzo 2019) ``jessie`` per il FUSS
server e ``stretch`` per il FUSS client.
Build
-----
Una volta clonato o aggiornato il repository del pacchetto, aggiornata
la versione come sopra, e se necessario genererato la tarball sorgente
con ``debian/rules debsrc`` si può quindi usare ``pdebuild`` per
eseguire la build del pacchetto all'interno di una chroot opportuna
(sostituendo ``stretch`` con ``jessie`` nel caso del fuss server)::
Una volta clonato il repository (dentro la chroot), incrementato il
numero di versione come sopra ed eventualmente generato il tar sorgente,
per eseguire il build del pacchetto eseguire, nella directory principale
del repository::
$ 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
necessarie all'interno della chroot e ad effettuare la build.
Se la procedura va a buon fine, nella directory superiore si troveranno
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
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::
La procedura potrebbe fallire con un errore contenente::
$ 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
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:
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