3 581
contributi
mNessun oggetto della modifica |
m (versioni compatibili) |
||
(45 versioni intermedie di 4 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{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 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 == | |||
Pbuilder è, ovviamente, contenuto in Debian: | |||
<pre> | <pre> | ||
# | # apt-get install pbuilder | ||
</pre> | </pre> | ||
== 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> | <pre> | ||
OPZIONE=valore | |||
</pre> | </pre> | ||
;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>--buildplace [location of build] </code>: permette di specificare una directory, diversa da quella di default, dove ricreare l'ambiente ed eseguire le compilazioni; | |||
; <code>--mirror [mirror location]</code> : permette di specificare un [[mirror]] Debian diverso da quello predefinito; | |||
; <code>--othermirror [other mirror location in apt deb-line format, delimited with | signs]</code> : permette di aggiungere altri mirror (o repository); | |||
; <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>--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>--configfile [configuration file to load]</code> : specifica un file di configurazione alternativo; | |||
; <code>--debemail [mail address] </code>: imposta l'indirizzo email; | |||
; <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>--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). | |||
==== pdebuild ==== | |||
; <code>--use-pdebuild-internal</code> : | |||
; <code>--auto-debsign</code> : impone la firma automatica al termine della compilazione del pacchetto; | |||
; <code>--debsign-k [keyid]</code> : imposta la chiave con cui eseguire la firma del pacchetto. | |||
<pre># | == 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>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>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.<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>dumpconfig</code> : mostra a video la configurazione dell'ambiente specificato, utile per le operazioni di debug. | |||
== Utilizzo == | |||
=== Creazione dell'ambiente === | |||
In questo esempio creeremo un ambiente per la distribuzione [[Sid]], con i repository Debian [[main]], [[contrib]] e [[non-free]]. | |||
<pre> | <pre> | ||
# pbuilder create --basetgz /home/maxer/pbuilder/sid.tgz --mirror http://debian.fastweb.it/debian --othermirror http://debian.fastweb.it/debian contrib non-free --distribution sid --debemail maxer@knio.it --binary-arch i386 | |||
</pre> | </pre> | ||
Analizzando il comando osserviamo che: | |||
* con <code>'''--basetgz'''</code> impostiamo un percorso esistente ma diverso per salvare il [[tarball]] che conterrà l'immagine del nostro ambiente. | |||
* con <code>'''--mirror'''</code> specifichiamo un mirror italiano, mentre con <code>'''--othermirror'''</code> aggiungiamo anche ''non-free'' e ''contrib'' (allo stesso modo potremmo aggiungere altri [[repository]]); | |||
* con <code>'''--distribution'''</code> impostiamo la distribuzione di cui vogliamo creare l'ambiente; | |||
* con <code>'''--debemail'''</code> impostiamo la nostra email; | |||
* con <code>'''--bynary-arch'''</code> impostiamo l'architettura dei nostri binari (utile nei sistemi a 64 bit, in cui è possibile emulare l'architettura a 32 bit ;-). | |||
Pbuilder preleverà dalla rete il sistema base di Debian, configurerà i pacchetti scaricati e creerà il file .tgz. L'operazione richiede qualche minuto. | |||
=== 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. | |||
Per aggiornare i pacchetti ed il database dei repository, è sufficiente un: | |||
<pre># pbuilder update --basetgz /home/maxer/pbuilder/sid.tgz</pre> | |||
=== Compilazione di pacchetti === | |||
La compilazione può avvenire in due modi: | |||
* '''da un pacchetto di sorgenti''', tramite pbuilder o pdebuild | |||
* '''dalla directory che contiene i sorgenti''' tramite pdebuild | |||
==== Da un pacchetto di sorgenti ==== | |||
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># pbuilder build --basetgz /home/maxer/pbuilder/sid.tgz file_0.0-1.dsc </pre> | |||
Questo comando avvierà la compilazione, esattamente secondo le seguenti fasi: | |||
# 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 | |||
# download e configurazione dei pacchetti richiesti per la compilazione (di default i pacchetti sono scaricati in <code>/var/cache/pbuilder/aptcache/</code>) | |||
# compilazione | |||
# rimozione ambiente creato (definito ''sporco'') | |||
# 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 ==== | |||
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). | |||
<pre> | Una volta posizionati nella directory contenente i sorgenti, è sufficiente eseguire questo comando: | ||
<pre># pdebuild --use-pdebuild-internal -- --basetgz /home/maxer/pbuilder/sid.tgz</pre> | |||
# | |||
</pre> | |||
In questo caso, invece, la procedura seguita da pbuilder sarà leggermente diversa: | |||
# esecuzione <code>debian/rules clean</code> all'interno della directory dei sorgenti | |||
# creazione dell'ambiente a partire dal tarball indicato | |||
# risoluzione delle dipendenze per la compilazione | |||
# compilazione | |||
# rimozione ambiente creato (definito ''sporco'') | |||
# 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". Quest'ultima va indicata ''prima'' di "--", ad esempio: | ||
: | <pre># pdebuild --buildresult /tmp -- --basetgz /home/maxer/pbuilder/sid.tgz</pre> | ||
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 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ù). | |||
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 == | |||
=== 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. | |||
Per fare questo, è sufficiente inserire nel file <code>/root/.bashrc</code> delle righe simili alle seguenti: | |||
<pre> | |||
< | # comandi per la compilazione | ||
alias pdebuild-sarge="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/stable -- --basetgz /store3/sarge.tgz --mirror http://debian.fastweb.it/debian" | |||
alias pdebuild-etch="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/testing -- --basetgz /store3/etch.tgz --mirror http://debian.fastweb.it/debian" | |||
alias pdebuild-sid="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/unstable -- --basetgz /store3/sid.tgz --mirror http://debian.fastweb.it/debian" | |||
alias pdebuild-breezy="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/breezy -- --basetgz /store3/breezy.tgz --configfile /root/pbuilder-breezy.conf" | |||
# automatizziamo al massimo | |||
alias pdebuild-all="pdebuild-sarge; pdebuild-etch; pdebuild-sid; pdebuild-breezy" | |||
# aggiornamento | |||
# | |||
alias pbuilder-update-sid="pbuilder update --basetgz /store3/sid.tgz --mirror http://debian.fastweb.it/debian" | |||
alias pbuilder-update-etch="pbuilder update --basetgz /store3/etch.tgz --mirror http://debian.fastweb.it/debian" | |||
alias pbuilder-update-sarge="pbuilder update --basetgz /store3/sarge.tgz --mirror http://debian.fastweb.it/debian" | |||
alias pbuilder-update-breezy="pbuilder update --basetgz /store3/breezy.tgz --configfile /root/pbuilder-breezy.conf" | |||
# automatizziamo al massimo | |||
alias pbuilder-update-all="pbuilder-update-sarge && pbuilder-update-etch && pbuilder-update-sid && pbuilder-update-breezy" | |||
</pre> | </pre> | ||
Se | == 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> | <pre> | ||
# | # pbuilder --architecture i386 --distribution wheezy --basetgz /home/pippo/pbuilder/386wheezy.tgz create | ||
</pre> | </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> | <pre> | ||
# | # dpkg --add-architecture i386 | ||
</pre> | </pre> | ||
e accertarsi della corretta aggiunta: | |||
<pre> | <pre> | ||
# | # dpkg --print-foreign-architectures | ||
i386 | |||
</pre> | </pre> | ||
Modificare il file "/etc/apt/sources.list" inserendo: | |||
<pre> | <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> | </pre> | ||
e adattando, eventualmente, queste righe alle proprie esigenze ([[mirror]] diverso, [[release]] scelta, [[sezione]] etc.). Infine eseguire: | |||
<pre> | <pre> | ||
# apt-get update | |||
</pre> | </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> | <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> | </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> | <pre> | ||
# dpkg- | # dpkg --remove-architecture i386 | ||
# dpkg --print-foreign-architectures | |||
# apt-get update | |||
</pre> | </pre> | ||
{{Autori | |||
|Autore=[[Utente:MaXeR|MaXeR]] | |||
}} | |||
[[ | |||
[[Categoria: | [[Categoria:Apt]] | ||
[[Categoria:Creare e modificare pacchetti]] |
contributi