3 581
contributi
m (primo inserimento) |
m (versioni compatibili) |
||
(46 versioni intermedie di 4 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{ | {{Versioni compatibili|Wheezy|Jessie}} | ||
Pbuilder è uno strumento che permette di creare un ambiente pulito per la compilazione e il test | == 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. | |||
= Installazione = | 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: | Pbuilder è, ovviamente, contenuto in Debian: | ||
<pre> | <pre> | ||
Riga 8: | 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> | |||
;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 == | ==== pbuilder ==== | ||
; --basetgz [base.tgz] : 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; | ||
; --buildplace [location of build] : permette di specificare | ; <code>--buildplace [location of build] </code>: permette di specificare una directory, diversa da quella di default, dove ricreare l'ambiente ed eseguire le compilazioni; | ||
; --mirror [mirror location] : permette di specificare un [[mirror]] Debian diverso da quello predefinito | ; <code>--mirror [mirror location]</code> : permette di specificare un [[mirror]] Debian diverso da quello predefinito; | ||
; --othermirror [other mirror location in apt deb-line format, delimited with | signs] : permette di aggiungere altri mirror (o repository) | ; <code>--othermirror [other mirror location in apt deb-line format, delimited with | signs]</code> : permette di aggiungere altri mirror (o repository); | ||
; --http-proxy [proxy] : 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); | ||
; --distribution [distribution(potato|woody|sarge|sid|etch|experimental)] : imposta la distribuzione | ; <code>--distribution [distribution(potato|woody|sarge|sid|etch|experimental)]</code> : imposta la distribuzione; | ||
; --buildresult [location-to-copy-build-result] : 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"; | ||
; --aptcache [location of retrieved package files] : permette di specificare una directory in cui immagazzinare i pacchetti | ; <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; | ||
; --configfile [configuration file to load] : specifica un file di configurazione alternativo | ; <code>--configfile [configuration file to load]</code> : specifica un file di configurazione alternativo; | ||
; --debemail [mail address] : imposta l'indirizzo email | ; <code>--debemail [mail address] </code>: imposta l'indirizzo email; | ||
; --debbuildopts [dpkg-buildpackage options] : 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; | ||
; --logfile [filename to output log] : 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; | ||
; --binary-arch : 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); | ||
; --save-after-login/--save-after-exec : 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 ==== | ||
; --use-pdebuild-internal : | ; <code>--use-pdebuild-internal</code> : | ||
; --auto-debsign : impone la firma automatica al termine della compilazione del pacchetto | ; <code>--auto-debsign</code> : impone la firma automatica al termine della compilazione del pacchetto; | ||
; --debsign-k [keyid] : imposta la chiave con cui eseguire la firma del pacchetto | ; <code>--debsign-k [keyid]</code> : imposta la chiave con cui eseguire la firma del pacchetto. | ||
== Azioni == | == Azioni == | ||
; create : creazione di un nuovo ambiente | ; <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> . | ||
; update : | ; <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>. | ||
; build : compilazione | ; <code>build</code> : compilazione. | ||
; clean : 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> | ||
; login : login all'interno di un ambiente | ; <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. | ||
; execute : esecuzione di un comando all'interno di un ambiente | ; <code>execute</code> : esecuzione di un comando all'interno di un ambiente. | ||
; dumpconfig : 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 dell'ambiente === | ||
== Creazione | 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 | |||
<pre> | <pre> | ||
Riga 51: | Riga 69: | ||
Analizzando il comando osserviamo che: | Analizzando il comando osserviamo che: | ||
* con '''--basetgz''' impostiamo un percorso diverso per salvare il [[tarball]] che conterrà l'immagine del nostro ambiente | * con <code>'''--basetgz'''</code> impostiamo un percorso esistente ma diverso per salvare il [[tarball]] che conterrà l'immagine del nostro ambiente. | ||
* con '''--mirror''' specifichiamo un mirror italiano, mentre con '''--othermirror''' aggiungiamo anche ''non-free'' e ''contrib'' (allo stesso modo potremmo aggiungere altri repository | * 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 '''--distribution''' impostiamo la distribuzione di cui vogliamo creare l'ambiente; | * con <code>'''--distribution'''</code> impostiamo la distribuzione di cui vogliamo creare l'ambiente; | ||
* con '''--debemail''' impostiamo la nostra email; | * con <code>'''--debemail'''</code> impostiamo la nostra email; | ||
* con '''--bynary-arch''' impostiamo l'architettura dei nostri binari (utile nei sistemi a 64 bit, in cui è possibile emulare l'architettura a 32 bit ;-). | * 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 | 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 è | 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 o pdebuild | ||
* ''' | * '''dalla directory che contiene i sorgenti''' tramite pdebuild | ||
=== Da un pacchetto di sorgenti === | ==== Da un pacchetto di sorgenti ==== | ||
Questa procedura funziona se si dispone di un pacchetto Debian in formato ''sorgente'' | 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". | |||
Una volta posizionati nella | ==== Dalla directory dei sorgenti ==== | ||
<pre> # pdebuild | 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: | |||
<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: | ||
# esecuzione | # esecuzione <code>debian/rules clean</code> all'interno della directory dei sorgenti | ||
# creazione dell'ambiente a partire dal tarball indicato | # creazione dell'ambiente a partire dal tarball indicato | ||
# risoluzione delle dipendenze per la compilazione | # risoluzione delle dipendenze per la compilazione | ||
Riga 96: | Riga 117: | ||
# eventuale firma GnuPG | # eventuale firma GnuPG | ||
= Varie = | 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> | |||
== 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 | |||
|Autore=[[Utente:MaXeR|MaXeR]] | |||
}} | |||
[[Categoria:Apt]] | |||
[[Categoria:Creare e modificare pacchetti]] |
contributi