3 581
contributi
S3v (discussione | contributi) (→Azioni) |
m (versioni compatibili) |
||
(23 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 | 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' il proprio sistema. | |||
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]]). | |||
* 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 9: | Riga 14: | ||
</pre> | </pre> | ||
== Configurazione e | == 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. | |||
=== 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> . 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> | |||
=== pbuilder === | ;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 === | |||
Osserviamo le opzioni più importanti: | |||
==== pbuilder ==== | |||
; <code>--basetgz [base.tgz]</code> : permette di indicare una locazione, per il [[tarball]] dell'ambiente da gestire, diverso da quello di default; | ; <code>--basetgz [base.tgz]</code> : permette di indicare una locazione, per il [[tarball]] dell'ambiente da gestire, diverso da quello di default; | ||
; <code>--buildplace [location of build] </code>: permette di specificare una directory, diversa da quella di default, dove ricreare l'ambiente ed eseguire le compilazioni; | ; <code>--buildplace [location of build] </code>: permette di specificare una directory, diversa da quella di default, dove ricreare l'ambiente ed eseguire le compilazioni; | ||
Riga 19: | Riga 37: | ||
; <code>--http-proxy [proxy]</code> : se è presente un proxy http nella rete, è possibile gestirne l'accesso (nella forma http://username:password@server); | ; <code>--http-proxy [proxy]</code> : se è presente un proxy http nella rete, è possibile gestirne l'accesso (nella forma http://username:password@server); | ||
; <code>--distribution [distribution(potato|woody|sarge|sid|etch|experimental)]</code> : imposta la distribuzione; | ; <code>--distribution [distribution(potato|woody|sarge|sid|etch|experimental)]</code> : imposta la distribuzione; | ||
; <code>--buildresult [location-to-copy-build-result]</code> : permette di specificare una directory diversa in cui posizionare i pacchetti creati; | ; <code>--buildresult [location-to-copy-build-result]</code> : permette di specificare una directory diversa in cui posizionare i pacchetti creati. Di default il risultato della compilazione sarà in "/var/cache/pbuilder/result"; | ||
; <code>--aptcache [location of retrieved package files]</code> : permette di specificare una directory in cui immagazzinare i pacchetti Debian scaricati (e usati) per soddisfare le dipendenze per la compilazione; | ; <code>--aptcache [location of retrieved package files]</code> : permette di specificare una directory in cui immagazzinare i pacchetti Debian scaricati (e usati) per soddisfare le dipendenze per la compilazione; | ||
; <code>--configfile [configuration file to load]</code> : specifica un file di configurazione alternativo; | ; <code>--configfile [configuration file to load]</code> : specifica un file di configurazione alternativo; | ||
Riga 25: | 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). | ||
=== pdebuild === | ==== pdebuild ==== | ||
; <code>--use-pdebuild-internal</code> : | ; <code>--use-pdebuild-internal</code> : | ||
; <code>--auto-debsign</code> : impone la firma automatica al termine della compilazione del pacchetto; | ; <code>--auto-debsign</code> : impone la firma automatica al termine della compilazione del pacchetto; | ||
Riga 35: | Riga 53: | ||
== Azioni == | == Azioni == | ||
; <code>create</code> : creazione di un nuovo ambiente. Di default, a meno che non venga utilizzata l'opzione "--basetgz", viene creato il file <code>/var/cache/pbuilder/base.tgz</code> .<br/>Con:<pre># pbuilder create</pre>verrà creato il file <code>/var/cache/pbuilder/base.tgz</code> , mentre con:<pre># pbuilder create --basetgz /home/utente/pbuilder/immagine.tgz</pre> verrà creato il file <code>/home/utente/pbuilder/immagine.tgz</code> . | ; <code>create</code> : creazione di un nuovo ambiente. Di default, a meno che non venga utilizzata l'opzione "--basetgz", viene creato il file <code>/var/cache/pbuilder/base.tgz</code> .<br/>Con:<pre># pbuilder create</pre>verrà creato il file <code>/var/cache/pbuilder/base.tgz</code> , mentre con:<pre># pbuilder create --basetgz /home/utente/pbuilder/immagine.tgz</pre> verrà creato il file <code>/home/utente/pbuilder/immagine.tgz</code> . | ||
; <code>update</code> : aggiornamento di un ambiente esistente. Valgono le stesse considerazioni espresse per la creazione. Di default, a meno che non venga utilizzata l'opzione "--basetgz", viene aggiornato il file <code>/var/cache/pbuilder/base.tgz</code> .<br/>Con:<pre># pbuilder update</pre>verrà aggiornato il file <code>/var/cache/pbuilder/base.tgz</code> , mentre con:<pre># pbuilder update --basetgz /home/utente/pbuilder/immagine.tgz</pre> verrà aggiornato il file <code>/home/utente/pbuilder/immagine.tgz</code> . | ; <code>update</code> : aggiornamento di un ambiente esistente. Valgono le stesse considerazioni espresse per la creazione. Di default, a meno che non venga utilizzata l'opzione "--basetgz", viene aggiornato il file <code>/var/cache/pbuilder/base.tgz</code> .<br/>Con:<pre># pbuilder update</pre>verrà aggiornato il file <code>/var/cache/pbuilder/base.tgz</code> , mentre con:<pre># pbuilder update --basetgz /home/utente/pbuilder/immagine.tgz</pre> verrà aggiornato il file <code>/home/utente/pbuilder/immagine.tgz</code> .<br/>Ricordarsi di utilizzare sempre questo comando prima di ogni nuova operazione con <code>pbuilder</code>. | ||
; <code>build</code> : compilazione. | ; <code>build</code> : compilazione. | ||
; <code>clean</code> : pulizia di un ambiente. | ; <code>clean</code> : pulizia di un ambiente. Viene cancellata sia la directory <code>/var/cache/pbuilder/build/</code> utilizzata per la compilazione, sia tutti i pacchetti .deb precedentemente scaricati che si trovano nella directory <code>/var/cache/pbuilder/aptcache/</code> : <pre># pbuilder clean</pre> | ||
; <code>login</code> : login all'interno di un ambiente.<br/>Il login permette di accedere all'ambiente creato e poi di installare pacchetti o modificare file. Con:<pre># pbuilder login</pre> si accederà all'ambiente individuato dal file <code>/var/cache/pbuilder/base.tgz</code> , mentre con:<pre># pbuilder login --basetgz /home/utente/pbuilder/immagine.tgz</pre> si accederà all'ambiente associato al file <code>/home/utente/pbuilder/immagine.tgz</code> . | ; <code>login</code> : login all'interno di un ambiente.<br/>Il login permette di accedere all'ambiente creato e poi di installare pacchetti o modificare file.<br/>Con:<pre># pbuilder login</pre> si accederà all'ambiente individuato dal file <code>/var/cache/pbuilder/base.tgz</code> , mentre con:<pre># pbuilder login --basetgz /home/utente/pbuilder/immagine.tgz</pre> si accederà all'ambiente associato al file <code>/home/utente/pbuilder/immagine.tgz</code> .<br/>Utilizzare l'opzione "--save-after-login" per rendere disponibili i cambiamenti effettuati anche al successivo login; senza questa opzione tutti i cambiamenti non saranno salvati.<br/>Il classico "exit" permette il logout. | ||
; <code>execute</code> : esecuzione di un comando all'interno di un ambiente. | ; <code>execute</code> : esecuzione di un comando all'interno di un ambiente. | ||
; <code>dumpconfig</code> : mostra a video la configurazione dell'ambiente specificato, utile per le operazioni di debug. | ; <code>dumpconfig</code> : mostra a video la configurazione dell'ambiente specificato, utile per le operazioni di debug. | ||
== Utilizzo == | == Utilizzo == | ||
=== Creazione | === Creazione dell'ambiente === | ||
In questo esempio creeremo un ambiente per la distribuzione Sid, con i repository Debian | In questo esempio creeremo un ambiente per la distribuzione [[Sid]], con i repository Debian [[main]], [[contrib]] e [[non-free]]. | ||
<pre> | <pre> | ||
Riga 59: | 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 | === 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. | ||
Per aggiornare i pacchetti ed il database dei repository, è sufficiente un: | Per aggiornare i pacchetti ed il database dei repository, è sufficiente un: | ||
<pre># | <pre># pbuilder update --basetgz /home/maxer/pbuilder/sid.tgz</pre> | ||
=== 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 73: | Riga 91: | ||
Questa procedura funziona se si dispone di un pacchetto Debian in formato ''sorgente''; la procedura è usabile, ad esempio, per ricompilare un pacchetto presente in testing o unstable per una distribuzione stable (tecnica chiamata [[backport]]). | Questa procedura funziona se si dispone di un pacchetto Debian in formato ''sorgente''; la procedura è usabile, ad esempio, per ricompilare un pacchetto presente in testing o unstable per una distribuzione stable (tecnica chiamata [[backport]]). | ||
<pre># | <pre># pbuilder build --basetgz /home/maxer/pbuilder/sid.tgz file_0.0-1.dsc </pre> | ||
Questo comando avvierà la compilazione, esattamente secondo le seguenti fasi: | Questo comando avvierà la compilazione, esattamente secondo le seguenti fasi: | ||
# creazione dell'ambiente a partire dal tarball indicato | # creazione dell'ambiente a partire dal tarball indicato (di default viene creata una sottodirectory in <code>/var/cache/pbuilder/build/</code>) | ||
# risoluzione delle dipendenze per la compilazione | # risoluzione delle dipendenze per la compilazione | ||
# download e configurazione dei pacchetti richiesti per la compilazione (di default i pacchetti sono scaricati in <code>/var/cache/pbuilder/aptcache/</code>) | |||
# compilazione | # compilazione | ||
# rimozione ambiente creato (definito ''sporco'') | # rimozione ambiente creato (definito ''sporco'') | ||
# eventuale firma GnuPG | # eventuale firma GnuPG | ||
Il [[pacchetto]] .deb risultante dalla compilazione si troverà nella directory "/var/cache/pbuilder/result" a meno che non si sia usata l'opzione "--buildresult". | |||
==== 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 | <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 96: | Riga 117: | ||
# eventuale firma GnuPG | # eventuale firma GnuPG | ||
===Firma GnuPG=== | 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: | ||
Pbuilder permette anche la firma con chiave [[GnuPG]], molto utile in quanto evita l'utilizzo di ''deb-sign'', automatizzando il tutto! | <pre># pdebuild --buildresult /tmp -- --basetgz /home/maxer/pbuilder/sid.tgz</pre> | ||
L'unico problema (se così si può definire) è la necessità di esportare la propria chiave privata ed importarla nel [[keyring]] dell'utente root. | 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 === | |||
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]]. | |||
===File di | === 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 131: | 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> | ||
== 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 |
contributi