Old:Compilazione Kernel 2.6.11 con Bootsplash: differenze tra le versioni

Riga 1: Riga 1:
Questa pagina ha lo scopo di raccogliere i casi pi� frequenti di errori (o FAQ) legati all'utilizzo degli strumenti [[APT]] di Debian, quali apt-get, dpkg, ...
{{stub}}
Pbuilder � uno strumento che permette di creare un ambiente pulito per la compilazione e il test di pacchetti Debian. Inoltre pu� essere usato anche per effettuare i backport, compilazioni particolari e tutto quello che pu� richiedere l'uso di un ambiente pulito e controllato.
 
= Installazione =
Pbuilder �, ovviamente, contenuto in Debian:
<pre>
# apt-get install pbuilder
</pre>
 
= Configurazione e Opzioni =
Normalmente non sono necessarie configurazioni particolari, osserviamo, perci�, 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 un 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
; --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
; update : aggiornametno di un ambiene esistente
; build : compilazione
; clean : pulizia di un ambiente
; login : login all'interno di un ambiente
; 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




=apt-get=
= Utilizzo =
==Problema con la firma GPG==
== Creazione Ambiente ==
Con l'introduzione, da etch in poi, di una nuova forma di autenticazione dei pacchetti, pu� capitare di trovarsi davanti ad un messaggio del genere:
In questo esempio creeremo un ambiente per la distribuzione sid, con i repository Debian '''main''', '''contrib''' e '''non-free'''.
<pre>
W: GPG error: http://ftp.debian-unofficial.org sarge Release: \
The following signatures couldn't be verified because the public key is not available: \
NO_PUBKEY F82E5CC04B2B2B9E</pre>
Questo avviso indica che la chiave gpg usata per firmare l'archivio non � disponibile sul computer in uso...


Per ovviare questo problema, sufficiente eseguire i seguenti comandi:
<pre>
<pre>
# gpg --recv-keys #numerochiaveindicatonelmessaggio
# pbuilder create --basetgz /home/maxer/pbuilder/sid.tgz --mirror http://debian.fastweb.it/debian \
# gpg --armor --export #numerochiaveindicatonelmessaggio | apt-key add -  
    --othermirror http://debian.fastweb.it/debian contrib non-free --distribution sid \
    --debemail maxer@knio.it --binary-arch i386
</pre>
</pre>
==Problema con la Dynamic MMap==
 
[[Introduzione_all%27_Apt_System | APT]] usa un file di Cache, in cui vengono archiviate le informazioni disponibili sui pacchetti, che al momento dell'utilizzo viene mappato in memoria (RAM) in un'area di grandezza fissata, chiamata "Dynamic MMap".
Analizzando il comando osserviamo che:
Aggiungendo dei repository al sources.list pu� succedere che la grandezza fissata di default non sia pi� sufficiente a contenere le informazioni ottenute, e APT restituisce il seguente errore:
* con '''--basetgz''' impostiamo un percorso diverso per salvare il [[tarball]] che conterr� l'immagine del nostro ambiente;
<pre>
* con '''--mirror''' specifichiamo un mirror italiano, mentre con '''--othermirror''' aggiungiamo anche ''non-free'' e ''contrib'' (allo stesso modo potremmo aggiungere altri repository...);
Error: Dynamic MMap ran out of room
* con '''--distribution''' impostiamo la distribuzione di cui vogliamo creare l'ambiente;
</pre>
* con '''--debemail''' impostiamo la nostra email;
Per ovviare all'inconveniente sufficiente inserire (o modificare) una riga nel file <tt>/etc/apt/apt-conf</tt>, creandolo se non esiste, in cui viene specificato un limite pi� alto per la Dynamic MMap: la riga
* 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 scaricher� dalla rete tutto il materiale necessario, e creer� l'immagine (potrebbe volerci molto tempo.. quindi � consigliata una bella tazzona di caff�)!
 
== Aggiornamento Ambiente ==
L'aggiornamento di un ambiente � utile per le release diversa da Stable, nelle quali sono spesso presenti degli aggiornamenti, che potrebbero portare ad una modifica delle dipendenze (si pensi, ad esempio, alla migrazione da xfree ad xorg).
 
Per aggiornare i pacchetti ed il database dei repository, � sufficiente un
<pre> # pbuider 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
* '''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> # pbuild 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
# risoluzione delle dipendenze per la compilazione
# compilazione
# rimozione ambiente creato (definito ''sporco'')
# eventuale firma GnuPG
 
=== 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 directori contenente i sorgenti, � sufficiente eseguire questo comando:
<pre> # pdebuild build --basetgz /home/maxer/pbuilder/sid.tgz</pre>
 
In questo caso, invece, la procedura seguita da pbuilder sar� leggermente diversa:
# esecuzione ''debian/rules clean'' 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
 
==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, ...) che altrimenti non sarebbero supportate dal pbuilder dispnibile in Debian.
 
I link seguenti portano a dei file di configurazione ad hoc per le distribuzioni indicate:
* [[Pbuilder: Breezy.conf]]
* [[Pbuilder: Dapper.conf]]
 
=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:
<pre>
<pre>
APT::Cache-Limit 16777216;
# comandi per la compilazione
</pre>
alias pdebuild-sarge="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/stable -- --basetgz /store3/sarge.tgz \
imposta il limite a 16 MB, che nei moderni PC � un valore ragionevole.
    --mirror http://debian.fastweb.it/debian"
Per controllare al volo quanta RAM avete disponibile al momento potete usare <tt>cat /proc/meminfo</tt>.
alias pdebuild-etch="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/testing -- --basetgz /store3/etch.tgz \
La voce interessante � quella che inizia con <tt>Active</tt> (non con <tt>Free</tt>), infatti Linux � solito usare la memoria libera per mantenere una cache, cosa che permette di velocizzare le operazioni pi� comuni, e la libera al volo in caso di necessit�: la memoria attiva � la memoria totale usata, meno quella impiegata come cache ;-)
    --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"


Vedere anche: [[Introduzione_all'_Apt_System]]
# automatizziamo al massimo
alias pdebuild-all="pdebuild-sarge; pdebuild-etch; pdebuild-sid; pdebuild-breezy"


=dpkg=
# 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
=Link utili=
alias pbuilder-update-all="pbuilder-update-sarge && pbuilder-update-etch && pbuilder-update-sid && pbuilder-update-breezy"
* [http://www.maximumdebian.org/modules.php?op=modload&name=FAQ&file=index&myfaq=yes&id_cat=16&categories=I+Pacchetti+deb&parent_id=0 FAQ su APT e dpkg] in italiano
</pre>
[[Categoria:Apt]]
I comandi elencati sono, per l'esattezza, quelli che uso io per creare i pacchetti per qualsiasi release Debian ed Ubuntu.
6

contributi