Pbuilder: compilazione in ambienti puliti: differenze tra le versioni

m
versioni compatibili
m (versioni compatibili)
 
(12 versioni intermedie di un altro utente non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili|Wheezy|Jessie}}
==Introduzione==
== Introduzione ==
Pbuilder è uno strumento che permette di creare un ambiente pulito per la compilazione e il test esclusivamente dei pacchetti Debian. Inoltre può essere usato anche per effettuare i backport, compilazioni particolari e tutto quello che può richiedere l'uso di un ambiente pulito e controllato.<br/>
Pbuilder è uno strumento che permette di creare un ambiente pulito per la compilazione e il test esclusivamente dei pacchetti Debian. Inoltre può essere usato anche per effettuare i backport, compilazioni per diverse [[architettura|architetture]] (utilizzando "debootstrap" sono supportate solo "i386" e "amd64"), compilazioni particolari e tutto quello che può richiedere l'uso di un ambiente pulito e controllato.<br/>
Il principale vantaggio di utilizzare Pbuilder consiste nel fatto che tutte le librerie necessarie alla compilazione verranno scaricate (di default in <code>//var/cache/pbuilder/aptcache</code>) all'occorrenza dal [[mirror]] predefinito e utilizzate nell'ambiente [[chroot]] creato; il tutto senza 'sporcare' l'ambiente chroot che, pertanto, resterà immutato a meno di 'update'.
Il principale vantaggio di utilizzare Pbuilder consiste nel fatto che tutte le librerie necessarie alla compilazione verranno scaricate (di default in <code>/var/cache/pbuilder/aptcache</code>) all'occorrenza dal [[mirror]] predefinito e utilizzate nell'ambiente [[chroot]] creato; il tutto senza 'sporcare' il proprio sistema.


Se si desidera ''modificare'' un pacchetto .deb (ad esempio nel caso in cui si voglia aggiungere una [[patch]] con [[quilt]]) servirà utilizzare prima il comando "pdebuild" (fornito con Pbuilder) e successivamente il comando "pbuilder" sul nuovo file *.dsc creato con il comando precedente.
La compilazione può essere eseguita in due modi:
 
* Utilizzare il comando "pdebuild" per compilare un [[pacchetto]] Debian e creare il file .deb dopo averne modificato i sorgenti (ad esempio nel caso in cui si voglia applicare una [[patch]] con [[quilt]]).
Il secondo metodo (pdebuild e pbuilder) è di gran lunga il più utilizzato mentre il primo (il solo pbuilder) è utile per evitare i [[bug]] di tipo [[FTBFS]] per una determinata [[release]].
* Utilizzare il comando "pbuilder build nomefile.dsc" per compilare un pacchetto Debian non modificato, utile per evitare i [[bug]] di tipo [[FTBFS]] per una determinata [[release]]. Questo comando richiama automaticamente "pdebuild" e, quindi, è equivalente a utilizzare "pdebuild" nella directory dei sorgenti del pacchetto.


== Installazione ==
== Installazione ==
Riga 14: Riga 14:
</pre>
</pre>


== Configurazione e Opzioni ==
== Configurazione e opzioni ==
Il comando <code>pbuilder</code> va eseguito con i privilegi di [[root]] e normalmente non sono necessarie configurazioni particolari. Esistono opzioni che possono trovarsi nel file di configurazione <code>/etc/pbuilder/pbuilderrc</code>  oppure nel file <code>.pbuilderrc</code> . Se le opzioni non dovessero essere specificate nei file, devono essere specificate insieme al comando <code>pbuilder</code>; se anche da linea di comando non vengono inserite, assumeranno dei valori di default.
Il comando <code>pbuilder</code> va eseguito con i privilegi di [[root]] e normalmente non sono necessarie configurazioni particolari. Esistono opzioni che possono trovarsi nel file di configurazione <code>/etc/pbuilder/pbuilderrc</code>  oppure nel file <code>.pbuilderrc</code> . Se le opzioni non dovessero essere specificate nei file, devono essere specificate insieme al comando <code>pbuilder</code>; se anche da linea di comando non vengono inserite, assumeranno dei valori di default.


=== Opzioni da file di configurazione ===
=== Opzioni da file di configurazione ===
Queste vanno inserite nel file <code>/etc/pbuilder/pbuilderrc</code> (per tutti gli utenti) oppure nel file <code>.pbuilderrc</code> creato nella home dell'utente che esegue <code>pbuilder</code> . Leggere a tal proposito anche la [[manpage]] di <code>pbuilderrc</code> . Tutte le opzioni specificate in questi file vengono bypassate dalle corrispondenti opzioni specificate da linea di comando.
Queste vanno inserite nel file <code>/etc/pbuilder/pbuilderrc</code> (per tutti gli utenti) oppure nel file <code>.pbuilderrc</code> creato nella home dell'utente che esegue <code>pbuilder</code> . Leggere a tal proposito anche la [[manpage]] di <code>pbuilderrc</code> . Le opzioni specificate in questi file vengono bypassate dalle corrispondenti opzioni specificate dalla linea di comando.<br/>
Tutte queste opzioni, una per riga, sono nella forma:
<pre>
OPZIONE=valore
</pre>
 
;BASETGZ:specifica il percorso e il nome del file .tgz da utilizzare. Questa opzione viene bypassata da "--basetgz"
;BASETGZ:specifica il percorso e il nome del file .tgz da utilizzare. Questa opzione viene bypassata da "--basetgz"
;BUILDRESULT:il percorso assoluto della directory in cui si troveranno i pacchetti .deb al termine della compilazione. Questa opzione viene bypassata da "--buildresult"


=== Opzioni da linea di comando ===
=== Opzioni da linea di comando ===
Osserviamo e opzioni più importanti:
Osserviamo le opzioni più importanti:


==== pbuilder ====
==== pbuilder ====
Riga 37: Riga 43:
; <code>--debbuildopts [dpkg-buildpackage options]</code> : permette di impostare delle opzioni aggiuntive per il comando ''dpkg-buildpackage'', che si occupa della creazione di un pacchetto Debian a partire dai sorgenti;
; <code>--debbuildopts [dpkg-buildpackage options]</code> : permette di impostare delle opzioni aggiuntive per il comando ''dpkg-buildpackage'', che si occupa della creazione di un pacchetto Debian a partire dai sorgenti;
; <code>--logfile [filename to output log]</code> : specifica un file di log, utile per analizzare con calma i risultati delle compilazioni;
; <code>--logfile [filename to output log]</code> : specifica un file di log, utile per analizzare con calma i risultati delle compilazioni;
; <code>--binary-arch</code> : permette di impostare l'architettura da usare per la creazione dell'ambiente (utile nel caso di supporto per più architetture (macchina a 64 bit))
; <code>--binary-arch</code> : permette di impostare l'architettura da usare per la creazione dell'ambiente (utile nel caso di supporto per più architetture (macchina a 64 bit);
; <code>--save-after-login/--save-after-exec</code> : permette di salvare lo stato della macchina al termine di una sessione interattiva, ricreando il tarball a partire dall'ambiente modificato (usare con attenzione).
; <code>--save-after-login/--save-after-exec</code> : permette di salvare lo stato della macchina al termine di una sessione interattiva, ricreando il tarball a partire dall'ambiente modificato (usare con attenzione).


Riga 55: Riga 61:


== Utilizzo ==
== Utilizzo ==
=== Creazione Ambiente ===
=== Creazione dell'ambiente ===
In questo esempio creeremo un ambiente per la distribuzione Sid, con i repository Debian '''main''', '''contrib''' e '''non-free'''.
In questo esempio creeremo un ambiente per la distribuzione [[Sid]], con i repository Debian [[main]], [[contrib]] e [[non-free]].


<pre>
<pre>
Riga 71: Riga 77:
Pbuilder preleverà dalla rete il sistema base di Debian, configurerà i pacchetti scaricati e creerà il file .tgz. L'operazione richiede qualche minuto.
Pbuilder preleverà dalla rete il sistema base di Debian, configurerà i pacchetti scaricati e creerà il file .tgz. L'operazione richiede qualche minuto.


=== Aggiornamento Ambiente ===
=== Aggiornamento dell'ambiente ===
L'aggiornamento di un ambiente è altamente consigliato (così come si farebbe per una qualunque installazione di Debian), in particolare per le [[release]] [[testing]] e [[unstable]] nelle quali sono spesso presenti degli aggiornamenti che potrebbero portare ad una modifica delle dipendenze.
L'aggiornamento di un ambiente è altamente consigliato (così come si farebbe per una qualunque installazione di Debian), in particolare per le [[release]] [[testing]] e [[unstable]] nelle quali sono spesso presenti degli aggiornamenti che potrebbero portare ad una modifica delle dipendenze.


Riga 79: Riga 85:
=== Compilazione di pacchetti ===
=== Compilazione di pacchetti ===
La compilazione può avvenire in due modi:
La compilazione può avvenire in due modi:
* '''da un pacchetto di sorgenti''', tramite pbuilder
* '''da un pacchetto di sorgenti''', tramite pbuilder o pdebuild
* '''dalla directory che contiene i sorgenti''' tramite pdebuild
* '''dalla directory che contiene i sorgenti''' tramite pdebuild


Riga 98: Riga 104:


==== Dalla directory dei sorgenti ====
==== Dalla directory dei sorgenti ====
Questa procedura, a differenza di quella illustrata precedentemente, è molto più usata (almeno nel mio caso) in quanto può essere applicata direttamente alla directory dei sorgenti (si sta sempre parlando di pacchetti Debian, quindi i sorgenti devono contenere la directory <code>''debian/''</code>, che gestisce la creazione dei pacchetti.
Questa procedura, a differenza di quella illustrata precedentemente, è molto più usata (almeno nel mio caso) in quanto può essere applicata direttamente alla directory dei sorgenti (si sta sempre parlando di pacchetti Debian, quindi i sorgenti devono contenere la directory <code>''debian/''</code>, che gestisce la creazione dei pacchetti).


Una volta posizionati nella directory contenente i sorgenti, è sufficiente eseguire questo comando:
Una volta posizionati nella directory contenente i sorgenti, è sufficiente eseguire questo comando:
<pre># pdebuild -- --basetgz /home/maxer/pbuilder/sid.tgz</pre>
<pre># pdebuild --use-pdebuild-internal -- --basetgz /home/maxer/pbuilder/sid.tgz</pre>


In questo caso, invece, la procedura seguita da pbuilder sarà leggermente diversa:
In questo caso, invece, la procedura seguita da pbuilder sarà leggermente diversa:
Riga 113: Riga 119:
Il [[pacchetto]] .deb risultante dalla compilazione si troverà nella directory "/var/cache/pbuilder/result" a meno che non si sia usata l'opzione "--buildresult". Quest'ultima va indicata ''prima'' di "--", ad esempio:
Il [[pacchetto]] .deb risultante dalla compilazione si troverà nella directory "/var/cache/pbuilder/result" a meno che non si sia usata l'opzione "--buildresult". Quest'ultima va indicata ''prima'' di "--", ad esempio:
<pre># pdebuild --buildresult /tmp -- --basetgz /home/maxer/pbuilder/sid.tgz</pre>
<pre># pdebuild --buildresult /tmp -- --basetgz /home/maxer/pbuilder/sid.tgz</pre>
per creare il pacchetto .deb nella directory <code>/tmp</code> .
per creare il pacchetto .deb nella directory <code>/tmp</code> .<br/>
L'opzione "--use-pdebuild-internal" è necessaria affinché i pacchetti contenenti le [[dipendenze]] per la compilazione vengano installati nell'ambiente chroot e non sul sistema.


===Firma GnuPG===
=== Firma GnuPG ===
Pbuilder permette anche la firma con chiave [[GnuPG]], molto utile in quanto evita l'utilizzo di ''deb-sign'', automatizzando il tutto!
Pbuilder permette anche la firma con chiave [[GnuPG]], molto utile in quanto evita l'utilizzo di ''deb-sign'', automatizzando il tutto!<br/>
L'unico problema (se così si può definire) è la necessità di esportare la propria chiave privata ed importarla nel [[keyring]] dell'utente root.
L'unico problema (se così si può definire) è la necessità di esportare la propria chiave privata ed importarla nel [[keyring]] dell'utente [[root]].


===File di Configurazione===
=== File di configurazione ===
Una pratica diffusa e molto comoda per semplificare l'utilizzo di pbuider sono i file di configurazione: essi permettono, infatti, di specificare direttamente al loro interno i parametri (oltre ad offrirne molti di più).
Una pratica diffusa e molto comoda per semplificare l'utilizzo di pbuider sono i file di configurazione: essi permettono, infatti, di specificare direttamente al loro interno i parametri (oltre ad offrirne molti di più).


Un altro vantaggio, inoltre, consiste nel poter specificare altre distribuzioni (come Ubuntu, Knoppix, ecc) che altrimenti non sarebbero supportate dal pbuilder disponibile in Debian.
Un altro vantaggio, inoltre, consiste nel poter specificare altre distribuzioni (come Ubuntu, Knoppix, ecc) che altrimenti non sarebbero supportate dal pbuilder disponibile in Debian.


==Varie==
== Varie ==
===Semplifichiamo i comandi con alias===
=== Semplifichiamo i comandi con alias===
I comandi da impartire sono spesso complessi e lunghi: in questo caso ci viene in aiuta ''alias'', che permette di creare un nuovo ''comando'', alias di uno più complesso.
I comandi da impartire sono spesso complessi e lunghi: in questo caso ci viene in aiuta ''alias'', che permette di creare un nuovo ''comando'', [[alias]] di uno più complesso.


Per fare questo, è sufficiente inserire nel file <code>/root/.bashrc</code> delle righe simili alle seguenti:
Per fare questo, è sufficiente inserire nel file <code>/root/.bashrc</code> delle righe simili alle seguenti:
Riga 150: Riga 157:
alias pbuilder-update-all="pbuilder-update-sarge && pbuilder-update-etch && pbuilder-update-sid && pbuilder-update-breezy"
alias pbuilder-update-all="pbuilder-update-sarge && pbuilder-update-etch && pbuilder-update-sid && pbuilder-update-breezy"
</pre>
</pre>
I comandi elencati sono, per l'esattezza, quelli che uso io per creare i pacchetti per qualsiasi release Debian ed Ubuntu.
 
== Esempi ==
=== Compilazione per diverse architetture ===
Se si vuole compilare un [[pacchetto]] sorgente per una [[architettura]] diversa da quella della propria macchina (es. compilare un pacchetto per "i386" su una macchina "amd64"), è necessario innanzitutto creare l'ambiente "i386":
<pre>
# pbuilder --architecture i386 --distribution wheezy --basetgz /home/pippo/pbuilder/386wheezy.tgz create
</pre>
In cui le diverse opzioni significano:
;--architecture i386: l'architettura scelta (sono supportate, se si utilizza "debootstrap", solo "i386" e "amd64").
;--distribution wheezy: la distribuzione per cui compilare il pacchetto. Si può omettere questa opzione se si intende utilizzare una [[suite]] uguale a quella utilizzata dal proprio sistema.
;--basetgz /home/pippo/pbuilder/386wheezy.tgz: il percorso e il nome del file .tgz da creare per contenere il nuovo ambiente [[chroot]].
 
Ora bisogna abilitare il [[multiarch]] per poter usare l'architettura "i386":
<pre>
# dpkg --add-architecture i386
</pre>
e accertarsi della corretta aggiunta:
<pre>
# dpkg --print-foreign-architectures
i386
</pre>
Modificare il file "/etc/apt/sources.list" inserendo:
<pre>
deb [arch=i386] http://ftp.it.debian.org/debian wheezy main
deb-src [arch=i386] http://ftp.it.debian.org/debian wheezy main
</pre>
e adattando, eventualmente, queste righe alle proprie esigenze ([[mirror]] diverso, [[release]] scelta, [[sezione]] etc.). Infine eseguire:
<pre>
# apt-get update
</pre>
 
Adesso è tutto pronto per scaricare i file sorgente e lanciare la compilazione. Spostarsi in una directory a propria scelta (magari creata appositamente) e poi:
<pre>
# apt-get source --download-only apt:i386/wheezy
# pbuilder build --basetgz /home/pippo/pbuilder/386wheezy.tgz apt_0.9.7.9+deb7u7.dsc
</pre>
Anche in questo caso si devono adattare i comandi in base all'architettura per cui si vuol compilare, alla release scelta e al file .dsc ottenuto con il comando "apt-get source" (in questo caso sono, rispettivamente, "i386", "wheezy" e "apt_0.9.7.9+deb7u7.dsc").<br/>
Al termine delle diverse operazioni eseguite da "pbuilder", il pacchetto .deb compilato per architettura "i386" sarà presente nella directory <code>/var/cache/pbuider/result</code>.
 
Per disabilitare il multiarch e ritornare alla situazione di partenza per il proprio sistema, rimuovere (o commentare) le righe aggiunte al file <code>sources.list</code> e infine:
<pre>
# dpkg --remove-architecture i386
# dpkg --print-foreign-architectures
# apt-get update
</pre>


{{Autori
{{Autori
3 581

contributi