Pbuilder: compilazione in ambienti puliti: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
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.


Questo how-to spiegher� il procedimento da seguire per compilare (alla debian-way) un kernel 2.6.11 con la patch bootsplash.
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.
== Software richiesto ==
In ambiente Debian, ci viene in aiuto il tool '''[[APT]]''' (Advanced Package Tool), che ci fornir� tutto (o quasi) ci� di cui abbiamo bisogno.
Anzitutto, editiamo il nostro '''/etc/apt/sources.list''' aggiungendo il [[I_repository_ed_il_loro_utilizzo | repository]] bootsplash:
 
<pre>deb http://www.bootsplash.de/files/debian/ unstable main</pre>
 
Abbiamo poi bisogno delle librerie e/o programmi che utilizzeremo per la compilazione vera e propria:
 
<pre>
PACCHETTO          VERSIONE MINIMA    COMANDO
 
binutils            2.12                ld -v
e2fsprogs          1.29                tune2fs
gcc                2.95.3              gcc --version
make                3.78                make --version
module-init-tools  0.9.10              depmod -V
procps              3.1.13              ps --version
util-linux          2.10o              fdformat --version
kernel-package
initrd-tools
libncurses-dev
</pre>
 
Ora possiamo procedere al download dei sorgenti del kernel:
 
<pre># apt-get install kernel-source-2.6.11</pre>
 
Con questo comando, [[APT]] scaricher� un archivio .tar.bz2 in '''/usr/src/''', contenente proprio il sorgente del [[kernel]].
 
&Egrave; inoltre necessario scaricare una patch apposita da applicare al kernel:
 
In caso si tenti questa procedura con altri kernel,
 
[http://www.bootsplash.de/files/bootsplash-3.1.6-2.6.11.diff Patch per Kernel 2.6.11]
 
In caso si tenti questa procedura con altri kernel, oppure, essendo la pagina soggetta ad aggiornamento, il file risultasse inesistente, &egrave; possibile scaricare la patch di interesse cercandola in http://www.bootsplash.de/files/
 
''formato: bootsplash-versione_patch-versione_kernel.diff''
 
== Compilazione ==
 
=== Scompattazione e Patch del Sorgente ===
 
Bene, prima di procedere con la compilazione, &egrave; necessario applicare la patch bootsplash (vedi sopra) al nostro kernel.
 
Prima di tutto, scompattiamo l'archivio contenente i sorgenti.
 
Per fare ci�, spostiamoci in '''/usr/src/''', e procediamo con la scompattazione':


== Installazione ==
Pbuilder è, ovviamente, contenuto in Debian:
<pre>
<pre>
# cd /usr/src/
# apt-get install pbuilder
# tar -jxvf kernel-source-2.6.11.tar.bz2
</pre>
</pre>


A questo punto verr&agrave; creata una nuova directory, '''/usr/src/kernel-source-2.6.11/'''.
== 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.
Spostiamoci dunque nella nuova directory e applichiamo la patch che abbiamo scaricato:


=== 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>
# cd /usr/src/kernel-source-2.6.11
OPZIONE=valore
# patch -p1 < /usr/src/bootsplash-3.1.6-2.6.11.diff
</pre>
</pre>


Non dovrebbe essere segnalato alcun errore nella patch a questo punto. In caso contrario, rimuoviamo la directory dei sorgenti e ripetiamo la procedura dall'inizio. &Egrave; importante applicare la patch bootsplash prima di qualunque altra patch, cio&egrave; sul kernel debian originale preso da APT.
;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"


A questo punto, possiamo procedere con la compilazione del kernel.
=== Opzioni da linea di comando ===
Osserviamo le opzioni più importanti:


=== Configurazione del Kernel ===
==== 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).


Anzitutto, configuriamo il kernel stesso:
==== 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># make menuconfig</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.


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


Selezioniamo il nostro modello di processore:
<pre>
<pre>
| Processor type and features
# 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
|--- Processor family (Athlon/Duron/K7)
</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 ;-).


Attiviamo qualche altra opzione per il boot:
Pbuilder preleverà dalla rete il sistema base di Debian, configurerà i pacchetti scaricati e creerà il file .tgz. L'operazione richiede qualche minuto.


<pre>
=== Aggiornamento dell'ambiente ===
| Device Drivers
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.
|--- Block devices
|------ <*> Loopback device support
|------ <*> RAM disk support
|------ (8192) Default RAM disk size (kbytes)
|------ [*]   Initial RAM disk (initrd) support
</pre>


Per aggiornare i pacchetti ed il database dei repository, è sufficiente un:
<pre># pbuilder update --basetgz /home/maxer/pbuilder/sid.tgz</pre>


Attiviamo le opzioni necessarie a mostrare la schermata di boot:
=== 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


<pre>
==== Da un pacchetto di sorgenti ====
| Device Drivers
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]]).
|--- Graphics support
|------ <M>  VGA 16-color graphics support
|------ <*>  VESA VGA graphics support
|------ Console display driver support
|--------- [*] VGA text console
|--------- [*]   Video mode selection support
|--------- <*> Framebuffer Console support
|------ Bootsplash configuration
|--------- [*] Bootup splash screen
</pre>


Ricordiamoci ovviamente di indicare, tra i [http://it.wikipedia.org/wiki/Filesystem Filesystem], quelli che utilizziamo sulla nostra macchina in aggiunta a quello ''ROM'', che viene utilizzato per le immagini initrd, le schede che abbiamo, etc...
<pre># pbuilder build --basetgz /home/maxer/pbuilder/sid.tgz file_0.0-1.dsc </pre>


Se stiamo ricompilando un kernel ovviamente sono cose che non si dovrebbero dimenticare!!!
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


=== Compilazione con make-kpkg (debian-way) ===
Il [[pacchetto]] .deb risultante dalla compilazione si troverà nella directory "/var/cache/pbuilder/result" a meno che non si sia usata l'opzione "--buildresult".


Ora che il kernel � compilato, possiamo procedere alla compilazione (debian-way):
==== 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:
# make-kpkg clean
<pre># pdebuild --use-pdebuild-internal -- --basetgz /home/maxer/pbuilder/sid.tgz</pre>
# make-kpkg --initrd --append-to-version -splash binary
</pre>


Prendiamo in considerazione l'ultimo comando:
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


'''make-kpkg''' � uno strumento che ci aiuta a creare kernel pacchettizzati in file binari, con estensione *.deb.
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:
: --initrd - Crea il RAMDisk iniziale per mostrare l'immagine al boot;
<pre># pdebuild --buildresult /tmp -- --basetgz /home/maxer/pbuilder/sid.tgz</pre>
: --append-to-version -splash - Aggiunge la stringa '-splash' alla versione del kernel che stiamo creando. In questo modo, se stiamo gi� utilizzando un kernel 2.6.11, il nostro nuovo kernel sar� il '2.6.11-splash', cos� in caso di problemi al boot potremo sempre tornare al kernel ''funzionante''.
per creare il pacchetto .deb nella directory <code>/tmp</code> .<br/>
: binary - Questo argomento specifica il ''target'' della nostra compilazione:
L'opzione "--use-pdebuild-internal" è necessaria affinché i pacchetti contenenti le [[dipendenze]] per la compilazione vengano installati nell'ambiente chroot e non sul sistema.


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


kernel_source    questo target produce un pacchetto .deb contenente i sorgenti del nuovo
=== File di configurazione ===
                kernel che stiamo compilando
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ù).


kernel_headers  questo target produce un pacchetto .deb contenente gli header inclusi nel
Un altro vantaggio, inoltre, consiste nel poter specificare altre distribuzioni (come Ubuntu, Knoppix, ecc) che altrimenti non sarebbero supportate dal pbuilder disponibile in Debian.
                nuovo kernel


kernel_doc      questo target produce un pacchetto .deb contenente la documentazione
== Varie ==
                relativa al nuovo kernel
=== 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.


kernel_image    questo target produce un pacchetto .deb contenente il kernel in formato
Per fare questo, è sufficiente inserire nel file <code>/root/.bashrc</code> delle righe simili alle seguenti:
                binario, con tutti i moduli specificati nella configurazione
<pre>
</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"


Una volta terminata la compilazione, troveremo in /usr/src un pacchetto il cui nome sar&agrave; qualcosa di molto simile a '''kernel-image-2.6.11-splash_10.00.Custom_i386.deb'''.
# automatizziamo al massimo


A questo punto possiamo installare il nostro nuovo kernel!
alias pdebuild-all="pdebuild-sarge; pdebuild-etch; pdebuild-sid; pdebuild-breezy"


<pre>
# aggiornamento
# dpkg -i /usr/src/kernel-image-2.6.11-splash_10.00.Custom_i386.deb
</pre>


Controlliamo la presenza del RAMDisk iniziale. Per fare ci&ograve; eseguiamo questo comando:
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"


<pre>
# automatizziamo al massimo
# ls /boot/initrd.img-2.6.11*
alias pbuilder-update-all="pbuilder-update-sarge && pbuilder-update-etch && pbuilder-update-sid && pbuilder-update-breezy"
</pre>
</pre>


Se il comando restituisce un errore, creiamo il nostro RAMDisk:
== 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>
# cd /boot/
# pbuilder --architecture i386 --distribution wheezy --basetgz /home/pippo/pbuilder/386wheezy.tgz create
# mkinitrd -o /boot/initrd.img-2.6.11-splash 2.6.11-splash
</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]].


== Installazione di Bootsplash ==
Ora bisogna abilitare il [[multiarch]] per poter usare l'architettura "i386":
 
In questa fase ci viene in aiuto quel repository che abbiamo aggiunto all'inizio al nostro '''/etc/apt/sources.list'''.
 
Aggiorniamo i nostri archivi APT ed installiamo Bootsplash:
 
<pre>
<pre>
# apt-get update
# dpkg --add-architecture i386
# apt-get install bootsplash sysv-rc-bootsplash bootsplash-theme-tuxinfo-debian
</pre>
</pre>
 
e accertarsi della corretta aggiunta:
Attenzione! L'ultimo pacchetto (bootsplash-theme-tuxinfo-debian) &egrave; il '''tema che vedremo al boot'''. Per vedere quali temi sono disponibili, diamo il seguente comando:
 
<pre>
<pre>
# apt-cache search bootsplash-theme
# dpkg --print-foreign-architectures
i386
</pre>
</pre>
 
Modificare il file "/etc/apt/sources.list" inserendo:
(Suggerimento: conviene inviare l'output in pipe a ''more'' o ''less'', dato che esistono numerosi temi!)
 
Scegliamo in questo caso il tema "tuxinfo-debian".
 
Durante l'installazione comparir&agrave; una finestra per la configurazione, che ci chieder&agrave; quale immagine utilizzare per il nostro boot.
 
Selezioniamo l'immagine creata in precedenza, cio&egrave; '''initrd.img-2.6.11-splash'''.
 
=== Configurazione del Bootloader ===
 
A questo punto siamo pronti per modificare il nostro bootloader. Facciamo un esempio per i due bootloader pi&ugrave; comuni: GRUB e LiLO:
 
Configurazione per GRUB ('''/boot/grub/menu.lst''')
<pre>
<pre>
title          Debian GNU/Linux, kernel 2.6.11-splash
deb [arch=i386] http://ftp.it.debian.org/debian wheezy main
root            (hd0,0)
deb-src [arch=i386] http://ftp.it.debian.org/debian wheezy main
kernel          /boot/vmlinuz-2.6.11-splash root=/dev/hda1 ro bootkbd=it
initrd          /boot/initrd.img-2.6.11-splash
savedefault
boot
</pre>
</pre>
 
e adattando, eventualmente, queste righe alle proprie esigenze ([[mirror]] diverso, [[release]] scelta, [[sezione]] etc.). Infine eseguire:
Configurazione per LiLO ('''/etc/lilo.conf''')
<pre>
<pre>
image=/boot/vmlinuz-2.6.11-splash
# apt-get update
        label="2.6.11-splash"
        initrd=/boot/initrd.img-2.6.11-splash
        append="splash=silent"
</pre>
</pre>


Attenzione! Se usate LiLO come bootloader, &egrave; necessario aggiornare la sua configurazione con il seguente comando (dopo la modifica di /etc/lilo.conf):
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>
# lilo
# 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:
== Conclusioni ==
 
Bene, adesso siamo in grado di riavviare la nostra macchina e gustarci un bel bootsplash!
Nel caso vogliate cambiare tema, dopo aver installato il relativo pacchetto '''bootsplash-theme-*''', basta fare:
 
<pre>
<pre>
# dpkg-reconfigure bootsplash
# dpkg --remove-architecture i386
# dpkg --print-foreign-architectures
# apt-get update
</pre>
</pre>


Bisogna poi selezionare il nuovo tema che abbiamo installato, di nuovo initrd.img-2.6.11-splash come initrd, ricontrolliamo LiLO / GRUB e riavviamo...
{{Autori
 
|Autore=[[Utente:MaXeR|MaXeR]]
Happy Debian!
}}
 
----
[[User:Hanska|Hanska]] 20:32, 14 May 2005 (CEST)


[[Categoria:Kernel]]
[[Categoria:Apt]]
[[Categoria:Creare e modificare pacchetti]]

Versione attuale delle 19:02, 10 apr 2016

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 7 "wheezy"
Debian 8 "jessie"

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 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.
Il principale vantaggio di utilizzare Pbuilder consiste nel fatto che tutte le librerie necessarie alla compilazione verranno scaricate (di default in /var/cache/pbuilder/aptcache) 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:

# apt-get install pbuilder

Configurazione e opzioni

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

Opzioni da file di configurazione

Queste vanno inserite nel file /etc/pbuilder/pbuilderrc (per tutti gli utenti) oppure nel file .pbuilderrc creato nella home dell'utente che esegue pbuilder . Leggere a tal proposito anche la manpage di pbuilderrc . Le opzioni specificate in questi file vengono bypassate dalle corrispondenti opzioni specificate dalla linea di comando.
Tutte queste opzioni, una per riga, sono nella forma:

OPZIONE=valore
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

--basetgz [base.tgz]
permette di indicare una locazione, per il tarball dell'ambiente da gestire, diverso da quello di default;
--buildplace [location of build]
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;
--othermirror [other mirror location in apt deb-line format, delimited with | signs]
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);
--distribution [distribution(potato|woody|sarge|sid|etch|experimental)]
imposta la distribuzione;
--buildresult [location-to-copy-build-result]
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 Debian scaricati (e usati) per soddisfare le dipendenze per la compilazione;
--configfile [configuration file to load]
specifica un file di configurazione alternativo;
--debemail [mail address]
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;
--logfile [filename to output log]
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);
--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).

pdebuild

--use-pdebuild-internal
--auto-debsign
impone la firma automatica al termine della compilazione del pacchetto;
--debsign-k [keyid]
imposta la chiave con cui eseguire la firma del pacchetto.

Azioni

create
creazione di un nuovo ambiente. Di default, a meno che non venga utilizzata l'opzione "--basetgz", viene creato il file /var/cache/pbuilder/base.tgz .
Con:
# pbuilder create
verrà creato il file /var/cache/pbuilder/base.tgz , mentre con:
# pbuilder create --basetgz /home/utente/pbuilder/immagine.tgz
verrà creato il file /home/utente/pbuilder/immagine.tgz .
update
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 /var/cache/pbuilder/base.tgz .
Con:
# pbuilder update
verrà aggiornato il file /var/cache/pbuilder/base.tgz , mentre con:
# pbuilder update --basetgz /home/utente/pbuilder/immagine.tgz
verrà aggiornato il file /home/utente/pbuilder/immagine.tgz .
Ricordarsi di utilizzare sempre questo comando prima di ogni nuova operazione con pbuilder.
build
compilazione.
clean
pulizia di un ambiente. Viene cancellata sia la directory /var/cache/pbuilder/build/ utilizzata per la compilazione, sia tutti i pacchetti .deb precedentemente scaricati che si trovano nella directory /var/cache/pbuilder/aptcache/ :
# pbuilder clean
login
login all'interno di un ambiente.
Il login permette di accedere all'ambiente creato e poi di installare pacchetti o modificare file.
Con:
# pbuilder login
si accederà all'ambiente individuato dal file /var/cache/pbuilder/base.tgz , mentre con:
# pbuilder login --basetgz /home/utente/pbuilder/immagine.tgz
si accederà all'ambiente associato al file /home/utente/pbuilder/immagine.tgz .
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.
Il classico "exit" permette il logout.
execute
esecuzione di un comando all'interno di un ambiente.
dumpconfig
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.

# 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

Analizzando il comando osserviamo che:

  • con --basetgz 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 --distribution impostiamo la distribuzione di cui vogliamo creare l'ambiente;
  • con --debemail 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 ;-).

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:

# pbuilder update --basetgz /home/maxer/pbuilder/sid.tgz

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).

# pbuilder build --basetgz /home/maxer/pbuilder/sid.tgz file_0.0-1.dsc 

Questo comando avvierà la compilazione, esattamente secondo le seguenti fasi:

  1. creazione dell'ambiente a partire dal tarball indicato (di default viene creata una sottodirectory in /var/cache/pbuilder/build/)
  2. risoluzione delle dipendenze per la compilazione
  3. download e configurazione dei pacchetti richiesti per la compilazione (di default i pacchetti sono scaricati in /var/cache/pbuilder/aptcache/)
  4. compilazione
  5. rimozione ambiente creato (definito sporco)
  6. 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 debian/, che gestisce la creazione dei pacchetti).

Una volta posizionati nella directory contenente i sorgenti, è sufficiente eseguire questo comando:

# pdebuild --use-pdebuild-internal -- --basetgz /home/maxer/pbuilder/sid.tgz

In questo caso, invece, la procedura seguita da pbuilder sarà leggermente diversa:

  1. esecuzione debian/rules clean all'interno della directory dei sorgenti
  2. creazione dell'ambiente a partire dal tarball indicato
  3. risoluzione delle dipendenze per la compilazione
  4. compilazione
  5. rimozione ambiente creato (definito sporco)
  6. 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:

# pdebuild --buildresult /tmp -- --basetgz /home/maxer/pbuilder/sid.tgz

per creare il pacchetto .deb nella directory /tmp .
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!
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 /root/.bashrc delle righe simili alle seguenti:

# 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"

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":

# pbuilder --architecture i386 --distribution wheezy --basetgz /home/pippo/pbuilder/386wheezy.tgz create

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":

# dpkg --add-architecture i386

e accertarsi della corretta aggiunta:

# dpkg --print-foreign-architectures
i386

Modificare il file "/etc/apt/sources.list" inserendo:

deb [arch=i386] http://ftp.it.debian.org/debian wheezy main
deb-src [arch=i386] http://ftp.it.debian.org/debian wheezy main

e adattando, eventualmente, queste righe alle proprie esigenze (mirror diverso, release scelta, sezione etc.). Infine eseguire:

# apt-get update

Adesso è tutto pronto per scaricare i file sorgente e lanciare la compilazione. Spostarsi in una directory a propria scelta (magari creata appositamente) e poi:

# apt-get source --download-only apt:i386/wheezy
# pbuilder build --basetgz /home/pippo/pbuilder/386wheezy.tgz apt_0.9.7.9+deb7u7.dsc

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").
Al termine delle diverse operazioni eseguite da "pbuilder", il pacchetto .deb compilato per architettura "i386" sarà presente nella directory /var/cache/pbuider/result.

Per disabilitare il multiarch e ritornare alla situazione di partenza per il proprio sistema, rimuovere (o commentare) le righe aggiunte al file sources.list e infine:

# dpkg --remove-architecture i386
# dpkg --print-foreign-architectures
# apt-get update




Guida scritta da: MaXeR Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized