Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Programmazione/Pbuilder"
Differenze tra le versioni 3 e 22 (in 19 versioni)
Versione 3 del 14/01/2007 11.38.32
Dimensione: 6150
Commento: Aggiunto riferimento a dpkg-source
Versione 22 del 31/07/2009 14.27.05
Dimensione: 14098
Autore: valdan
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
## page was renamed from PbuilderHowto
#format wiki
#language it
[[BR]]
[[Indice()]]
Linea 3: Linea 9:
Questo documento descrive i passi per predisporre una chroot jail per la costruzione dei pacchetti per Ubuntu usando [http://www.netfort.gr.jp/~dancer/software/pbuilder.html pbuilder]. E' raccomandato per gli sviluppatori o per chiunque sia interessato nella costruzione di pacchetti per Ubuntu e sistemi basati su ''apt''. Attraverso questo strumento è possibile effettuare un discreto numero di operazioni con facilità tra le quali:

 * Adattare un pacchetto disponibile in una release superiore di Ubuntu
 * Adattare un pacchetto non presente in Ubuntu
 * Contribuire alle attività del team [https://bugs.launchpad.net/people/ubuntu-backports-testers Backports Testers]

E' comunque possibile costruire i pacchetti senza l'ausilio di pbuilder, ma occorre installare preventivamente tutte le dipendenze richieste dal pacchetto, le quali rimangono presenti sul sistema anche dopo aver terminato la procedura di creazione, occupando una notevole quantità di spazio su disco senza giustificato motivo.
Questo documento descrive i passi per predisporre una ''chroot jail'' per la costruzione dei pacchetti per Ubuntu usando '''pbuilder'''. E' raccomandato per gli sviluppatori o per chiunque sia interessato nella costruzione di pacchetti per Ubuntu e sistemi basati su '''apt'''. Attraverso questo strumento è possibile effettuare un discreto numero di operazioni con facilità tra le quali:

 * Compilare con comodità qualsiasi pacchetto Debian
 * a
dattare un pacchetto disponibile in una release superiore di Ubuntu
 * adattare un pacchetto non presente in Ubuntu
 * contribuire alle attività del team [https://bugs.launchpad.net/people/ubuntu-backports-testers Backports Testers]

E' comunque possibile costruire i pacchetti senza l'ausilio di '''pbuilder''', ma occorre installare preventivamente tutte le dipendenze richieste dal pacchetto, le quali rimangono presenti sul sistema anche dopo aver terminato la procedura di creazione, occupando una notevole quantità di spazio su disco, senza giustificato motivo.
Linea 15: Linea 22:
E' consigliabile usare sempre l'ultima release di pbuilder (al momento della stesura di questo documento è la 0.161). pbuilder necessita di ''debootstrap'' per poter funzionare. Anche in questo caso è consigliabile utilizzare l'ultima versione disponibile (al momento della stesura di questo documento è la 0.3.3.1). E' consigliabile usare sempre l'ultima versione di '''pbuilder''' (al momento della stesura di questo documento è la 0.161). '''pbuilder''' necessita di '''debootstrap''' per poter funzionare. Anche in questo caso è consigliabile utilizzare l'ultima versione disponibile (al momento della stesura di questo documento è la 0.3.3.3).
Linea 19: Linea 26:
L'installazione di default permette di abilitare solo il repository ''main'' al momento della creazione della chroot jail. Onde evitare problemi di dipendenze durante la procedura, è consigliabile modificare il file /etc/pbuilder/pbuilderrc adattando l'opzione ''COMPONENTS'' in questo modo:

{{{
L'installazione predefinita permette di abilitare solo il repository '''main''' al momento della creazione della ''chroot jail''.

Onde evitare problemi di dipendenze durante la procedura, è consigliabile modificare il file `/etc/pbuilder/pbuilderrc` adattando l'opzione ''COMPONENTS'' in questo modo: {{{
Linea 25: Linea 32:
||attachment:Icone/Piccole/warning.png Alcuni utenti potrebbero avere l'esigenza di inserire anche altri repository di Ubuntu quali edgy-backports, edgy-security, edgy-updates e edgy-proposed o di terze parti.|| ||<tablestyle="text-align: justify; width:100%; " style="border:none;" 5% ^>[[Immagine(Icone/Piccole/warning.png,,center)]] ||<style="padding:0.5em; border:none;">'''Alcuni utenti potrebbero avere l'esigenza di inserire anche altri repository di Ubuntu quali karmic-backports, karmic-security, karmic-updates e karmic-proposed o di terze parti. Usare questa opportunità con cautela nel caso si distribuisca software per un repository pubblico o per l'upload su REVU, in quanto è possibile che non tutte le dipendenze vengano soddisfatte correttamente.''' ||
Linea 29: Linea 36:
Ora che la fase preparatoria è terminata, è necessario inizializzare pbuilder con il comando

{{{
sudo pbuilder create --basetgz /var/cache/pbuilder/edgy.tgz --distribution edgy
}}}

In questo modo verrà creata la chroot jail scaricando da Internet diversi pacchetti per creare un ambiente minimale ma perfettamente funzionante di Ubuntu, completamente isolato dal sistema ospitante. Avere una connessione a banda larga è consigliabile anche se non strettamente indispensabile.

||[[Immagine(Icone/Piccole/warning.png,50,left)]] Le opzioni ''--basetgz'' e ''--distribution'' servono per indicare a pbuilder che versione di Ubuntu si intende gestire. Per chi non fosse interessato a mantenere più chroot jail contemporaneamente, è possibile adattare il file /etc/pbuilder/pbuilderrc modificando la variabile ''DISTRIBUTION'' secondo le proprie esigenze. In questo caso le due opzioni possono essere tranquillamente omesse, anche per i comandi che verranno presentati in seguito.||
Ora che la fase preparatoria è terminata, è necessario inizializzare '''pbuilder''' con il comando: {{{
sudo pbuilder create --basetgz /var/cache/pbuilder/karmic.tgz --distribution karmic
}}}

In questo modo verrà creata la ''chroot jail'' scaricando da Internet diversi pacchetti per creare un ambiente minimale ma perfettamente funzionante di Ubuntu, completamente isolato dal sistema ospitante. Avere una connessione a banda larga è caldamente consigliato.

||<tablestyle="text-align: justify; width:100%; " style="border:none;" 5% ^>[[Immagine(Icone/Piccole/note.png,,center)]] ||<style="padding:0.5em; border:none;">''Le opzioni'' «--basetgz» ''e'' «--distribution» ''servono per indicare a'' '''pbuilder''' ''quale versione di Ubuntu si intende gestire. Nel caso in cui non si fosse interessati a mantenere più di una chroot jail, è possibile adattare il file'' `/etc/pbuilder/pbuilderrc` ''modificando la variabile'' «DISTRIBUTION» ''secondo le proprie esigenze. In questo caso le due opzioni possono essere tranquillamente omesse, anche per i comandi che verranno presentati in seguito.'' ||
Linea 41: Linea 46:
Per procedere alla creazione di un pacchetto occorre dotarsi dei relativi pacchetti sorgenti, reperibili per mezzo del comando ''apt-get source'' o direttamente dal sito http://packages.ubuntu.com. Solitamente ogni pacchetto sorgente è formato da due file, l'archivio dei sorgenti con estensione ''.tar.gz'' e il file di descrizione con estensione ''.dsc''. A volte è presente anche l'archivio delle differenze con estensione ''.diff.gz''. Per una corretta gestione, tali file devono essere rigorosamente nella stessa directory.

Una volta ottenuti i vari file che formano il pacchetto sorgente, occorre eseguire il comando

{{{
sudo pbuilder build --basetgz /var/cache/pbuilder/edgy.tgz --distribution edgy nomepacchetto.dsc
Per procedere alla creazione di un pacchetto occorre dotarsi dei relativi pacchetti sorgenti, reperibili per mezzo del comando: {{{
apt-get source
}}} o direttamente dal sito [http://packages.ubuntu.com]. Solitamente ogni pacchetto sorgente è formato da tre file, l'archivio dei sorgenti con estensione `,orig.tar.gz`, il file delle differenze con estensione `.diff.gz` e il file di descrizione con estensione `.dsc`. A volte è presente solo il file `.tar.gz` al posto dell'archivio sorgenti e del file delle differenze. Per una corretta gestione, tali file devono essere rigorosamente nella stessa directory.

Una volta ottenuti i vari file che formano il pacchetto sorgente, occorre eseguire il comando: {{{
sudo pbuilder build --basetgz /var/cache/pbuilder/karmic.tgz --distribution karmic nomepacchetto.dsc
Linea 58: Linea 63:
Se la compilazione ha avuto esito positivo, il pacchetto in formato ''.deb'' sarà disponibile nella directory ''/var/cache/pbuilder/result'', pronto per essere utilizzato. Se la compilazione ha avuto esito positivo, il pacchetto in formato `.deb` sarà disponibile nella directory `/var/cache/pbuilder/result`, pronto per essere utilizzato.
Linea 62: Linea 67:
A volte accade che si rende necessario modificare alcuni file sorgente per applicare patch oppure adattare uno o più file di controllo. Per poter procedere alla pacchettizzazione, occorre per prima cosa ottenere i sorgenti del pacchetto da compilare con il comando A volte accade che si rende necessario modificare alcuni file sorgente per applicare patch oppure adattare uno o più file di controllo. Per poter procedere alla pacchettizzazione, occorre per prima cosa ottenere i sorgenti del pacchetto da compilare con il comando: {{{
dpkg-source -x nomepacchetto.dsc
}}}

Una volta terminata l'operazione, è necessario spostarsi nella directory dei sorgenti appena generata e, dopo aver apportato le modifiche desiderate, eseguire il comando: {{{
pdebuild -- --basetgz /var/cache/pbuilder/karmic.tgz --distribution karmic
}}}

In questo caso è però necessario [:AmministrazioneSistema/InstallareProgrammi:installare] i seguenti pacchetti aggiuntivi:

 * ''devscripts''
 * ''debhelper''
 * ''dpatch''
 * ''cdbs''

= Aggiornare la chroot jail =

Ogni tanto è consigliabile aggiornare la ''chroot jail'' con le nuove versioni dei pacchetti onde evitare problemi con le dipendenze nell'installazione dei pacchetti compilati con '''pbuilder'''. Per poter fare ciò è sufficiente eseguire il comando: {{{
sudo pbuilder update --basetgz /var/cache/pbuilder/karmic.tgz --distribution karmic
}}}

= Pulizia della cache =

Con il tempo la cache di '''pbuilder''' può diventare estremamente voluminosa ed è consigliabile effettuare una pulizia periodica delle directory delle dipendenze eseguendo il comando: {{{
sudo pbuilder clean
}}}

||<tablestyle="text-align: justify; width:100%; " style="border:none;" 5% ^>[[Immagine(Icone/Piccole/note.png,,center)]] ||<style="padding:0.5em; border:none;">'''Il comando non andrà a cancellare i pacchetti creati e riposti in `/var/cache/pbuilder/result`.''' ||

= Uso di pbuilder-distribution =

Le opzioni di pbuilder sono potenti, ma a volte è noioso ripeterle ogni volta. Questo è particolarmente vero nel caso si gestiscano più chroot jail contemporaneamente.

Per velocizzare il lavoro è possibile utilizzare lo script pbuilder-distribution in questo modo:
Linea 65: Linea 103:
dpkg-source -x nomepacchetto.dsc
}}}

Una volta terminata l'operazione, è necessario spostarsi nella directory dei sorgenti appena generata e, dopo aver apportato le modifiche desiderate, eseguire il comando
sudo ln -s /usr/share/doc/pbuilder/examples/pbuilder-distribution.sh /usr/local/bin/pbuilder-karmic
}}}

Creando questo link simbolico, è possibile effettuare le operazioni sulla chroot jail desiderata senza specificare alcun parametro opzionale quali ''--distribution'' o ''--basetgz'' dato che pbuilder-distribution si occupa di gestire il tutto automaticamente.

I comandi disponibili sono i medesimi di pbuilder:
Linea 71: Linea 111:
pdebuild -- --basetgz /var/cache/pbuilder/edgy.tgz --distribution edgy
}}}

In questo caso è però necessario installare alcuni pacchetti aggiuntivi:

 * devscripts
 * debhelper
 * dpatch
 * cdbs

= Aggiornare la chroot jail =

Ogni tanto è consigliabile aggiornare la chroot jail con le nuove versioni dei pacchetti onde evitare problemi con le dipendenze nell'installazione dei pacchetti compilati con pbuilder. Per poter fare ciò è sufficiente eseguire il comando

{{{
sudo pbuilder update
}}}

= Pulizia della cache =

Con il tempo la cache di pbuilder può diventare estremamente voluminosa ed è consigliabile effettuare una pulizia periodica delle directory delle dipendeze eseguendo il comando

{{{
sudo pbuilder clean
}}}

||attachment:Icone/Piccole/warning.png Il comando non andrà a cancellare i pacchetti creati e riposti in ''/var/cache/pbuilder/result''.||

= Link =

 * [http://www.netfort.gr.jp/~dancer/software/pbuilder.html pbuilder Home Page]
 * [http://www.netfort.gr.jp/~dancer/software/pbuilder-doc/pbuilder-doc.html pbuilder User's Manual]
 * [http://wiki.ubuntu.com/PbuilderHowto pbuilder Howto @ wiki.ubuntu.com]
   create
   update
   build
   clean
   login
   execute
}}}


= Creazione pacchetti i386 con pbuilder su architetture AMD64 =

Una cosa molto utile di pbuilder è la possibilità di creare pacchetti per architetture i386 da macchine con architettura AMD64. Questo è possibile creando una chroot i386 con il comando: {{{
sudo pbuilder create --debootstrapopts --arch --debootstrapopts i386}}}
Se siete interessati alla compilazione per varie architetture e distribuzioni vi consiglio la lettura del paragrafo successivo.

= pbuilder multipli =

Quando si lavora con i pacchetti, spesso si desidera disporre di più pbuilders sul tuo computer, per esempio se si desidera un backport per Jaunty, mentre si lavora sulla versione di sviluppo di Ubuntu (Karmic attualmente). Oppure si vuole costruire i pacchetti per Debian. Le prossime sezioni forniscono alcune informazioni per iniziare con l'utilizzo di più pbuilders.

== Aggiornamento di debootstrap ==

Si raccomanda di utilizzare sempre una versione aggiornata di debootstrap del repository backports di qualsiasi versione di Ubuntu si sta utilizzando. È possibile attivare i backports nel vostro sources.list attraverso la configurazione del file. Aggiornando la versione si avrà maggior supporto per le distribuzioni più recenti, come il ramo di sviluppo di Ubuntu.

== Cambiare la posizione del file base.tgz ==

L'unica cosa necessaria per utilizzare pbuilder con diverse distribuzioni è un percorso alternativo per memorizzare l'archivio che contiene l'ambiente. Sulla riga di comando, questo può essere specificato con l'opzione 'basetgz'. Tuttavia, è noioso specificare il percorso completo ogni volta che viene eseguito pbuilder, quindi è conveniente creare un frammento di codice in ~/.Pbuilderrc per automatizzare il tutto: {{{
# Codenames for Debian suites according to their alias. Update these when
# needed.
UNSTABLE_CODENAME="sid"
TESTING_CODENAME="squeeze"
STABLE_CODENAME="lenny"
STABLE_BACKPORTS_SUITE="$STABLE_CODENAME-backports"

# List of Debian suites.
DEBIAN_SUITES=($UNSTABLE_CODENAME $TESTING_CODENAME $STABLE_CODENAME
    "unstable" "testing" "stable")

# List of Ubuntu suites. Update these when needed.
UBUNTU_SUITES=("jaunty" "intrepid" "hardy" "karmic")

# Mirrors to use. Update these to your preferred mirror.
DEBIAN_MIRROR="ftp.us.debian.org"
UBUNTU_MIRROR="mirrors.kernel.org"

# Optionally use the changelog of a package to determine the suite to use if
# none set.
if [ -z "${DIST}" ] && [ -r "debian/changelog" ]; then
    DIST=$(dpkg-parsechangelog | awk '/^Distribution: / {print $2}')
    # Use the unstable suite for certain suite values.
    if $(echo "experimental UNRELEASED" | grep -q $DIST); then
        DIST="$UNSTABLE_CODENAME"
    fi
fi

# Optionally set a default distribution if none is used. Note that you can set
# your own default (i.e. ${DIST:="unstable"}).
: ${DIST:="$(lsb_release --short --codename)"}

# Optionally change Debian release states in $DIST to their names.
case "$DIST" in
    unstable)
        DIST="$UNSTABLE_CODENAME"
        ;;
    testing)
        DIST="$TESTING_CODENAME"
        ;;
    stable)
        DIST="$STABLE_CODENAME"
        ;;
esac

# Optionally set the architecture to the host architecture if none set. Note
# that you can set your own default (i.e. ${ARCH:="i386"}).
: ${ARCH:="$(dpkg --print-architecture)"}

NAME="$DIST"
if [ -n "${ARCH}" ]; then
    NAME="$NAME-$ARCH"
    DEBOOTSTRAPOPTS=("--arch" "$ARCH" "${DEBOOTSTRAPOPTS[@]}")
fi
BASETGZ="/var/cache/pbuilder/$NAME-base.tgz"
# Optionally, set BASEPATH (and not BASETGZ) if using cowbuilder
# BASEPATH="/var/cache/pbuilder/$NAME/base.cow/"
DISTRIBUTION="$DIST"
BUILDRESULT="/var/cache/pbuilder/$NAME/result/"
APTCACHE="/var/cache/pbuilder/$NAME/aptcache/"
BUILDPLACE="/var/cache/pbuilder/build/"

if $(echo ${DEBIAN_SUITES[@]} | grep -q $DIST); then
    # Debian configuration
    MIRRORSITE="http://$DEBIAN_MIRROR/debian/"
    COMPONENTS="main contrib non-free"
    # This is for enabling backports for the Debian stable suite.
    if $(echo "$STABLE_CODENAME stable" | grep -q $DIST); then
        EXTRAPACKAGES="$EXTRAPACKAGES debian-backports-keyring"
        OTHERMIRROR="$OTHERMIRROR | deb http://www.backports.org/debian $STABLE_BACKPORTS_SUITE $COMPONENTS"
    fi
elif $(echo ${UBUNTU_SUITES[@]} | grep -q $DIST); then
    # Ubuntu configuration
    MIRRORSITE="http://$UBUNTU_MIRROR/ubuntu/"
    COMPONENTS="main restricted universe multiverse"
else
    echo "Unknown distribution: $DIST"
    exit 1
fi
}}}
||<tablestyle="text-align: justify; width:100%; " style="border:none;" 5% ^>[[Immagine(Icone/Piccole/note.png,,center)]] ||<style="padding:0.5em; border:none;">'''Ci sono alcune linee facoltative in questo frammento di codice che compaiono dopo i commenti che iniziano con "Optionally". È possibile decommentare queste linee o cambiarle per soddisfare le proprie esigenze.''' ||
Ora, se l'utente utilizza un'ltra DIST distribuzione, la posizione del tarball sarà cambiata. La linea che definisce la distribuzione ha effetto solo durante la creazione di un nuovo archivio di base, o se il - override-config è impostato diversamente. L'impostazione di BUILDRESULT o APTCACHE è facoltativa, ma potrebbe tornare utile.
Se ARCH è impostato su una diversa architettura rispetto a quella della macchina si creerà un ambiente per compilare i pacchetti per quell'architettura.
Siamo ora in grado di creare ed utilizzare l'alternativo tarball, come nei seguenti esempi: {{{
 # Creare un ambiente di base per Ubuntu Jaunty
 sudo DIST=jaunty pbuilder create

 # Creare un ambiente di base per Debian sid
 sudo DIST=sid pbuilder create

 # Creare una base per l'ambiente sotto Ubuntu Jaunty AMD64
 # per l'architettura i386
 sudo DIST=jaunty ARCH=i386 pbuilder create

 # Aggiornare l'ambiente per Ubuntu Jaunty
 sudo DIST=jaunty pbuilder update

 # Crea un pacchetto utilizzando come base Ubuntu Jaunty
 DIST=jaunty pdebuild

 # Crea un pacchetto utilizzando come base Ubuntu Jaunty
 # con architettura i386
 DIST=jaunty ARCH=i386 pdebuild
}}}

= Ulteriori risorse =

 * [wiki:Ubuntu/PbuilderHowto pbuilder Documento originale]
 * [http://www.netfort.gr.jp/~dancer/software/pbuilder.html Sito ufficiale del progetto]
 * [http://www.netfort.gr.jp/~dancer/software/pbuilder-doc/pbuilder-doc.html Documentazione ufficiale]
Linea 105: Linea 248:
CategoryComunita CategoryDaRevisionare CategoryProgrammazione

BR Indice()

Introduzione

Questo documento descrive i passi per predisporre una chroot jail per la costruzione dei pacchetti per Ubuntu usando pbuilder. E' raccomandato per gli sviluppatori o per chiunque sia interessato nella costruzione di pacchetti per Ubuntu e sistemi basati su apt. Attraverso questo strumento è possibile effettuare un discreto numero di operazioni con facilità tra le quali:

E' comunque possibile costruire i pacchetti senza l'ausilio di pbuilder, ma occorre installare preventivamente tutte le dipendenze richieste dal pacchetto, le quali rimangono presenti sul sistema anche dopo aver terminato la procedura di creazione, occupando una notevole quantità di spazio su disco, senza giustificato motivo.

Installazione

Ubuntu fornisce nativamente questi pacchetti, quindi è possibile installarli con facilità usando il gestore di pacchetti preferito.

E' consigliabile usare sempre l'ultima versione di pbuilder (al momento della stesura di questo documento è la 0.161). pbuilder necessita di debootstrap per poter funzionare. Anche in questo caso è consigliabile utilizzare l'ultima versione disponibile (al momento della stesura di questo documento è la 0.3.3.3).

Configurazione

L'installazione predefinita permette di abilitare solo il repository main al momento della creazione della chroot jail.

Onde evitare problemi di dipendenze durante la procedura, è consigliabile modificare il file /etc/pbuilder/pbuilderrc adattando l'opzione COMPONENTS in questo modo:

COMPONENTS="main restricted universe multiverse"

Immagine(Icone/Piccole/warning.png,,center)

Alcuni utenti potrebbero avere l'esigenza di inserire anche altri repository di Ubuntu quali karmic-backports, karmic-security, karmic-updates e karmic-proposed o di terze parti. Usare questa opportunità con cautela nel caso si distribuisca software per un repository pubblico o per l'upload su REVU, in quanto è possibile che non tutte le dipendenze vengano soddisfatte correttamente.

Inizializzazione di pbuilder

Ora che la fase preparatoria è terminata, è necessario inizializzare pbuilder con il comando:

sudo pbuilder create --basetgz /var/cache/pbuilder/karmic.tgz --distribution karmic

In questo modo verrà creata la chroot jail scaricando da Internet diversi pacchetti per creare un ambiente minimale ma perfettamente funzionante di Ubuntu, completamente isolato dal sistema ospitante. Avere una connessione a banda larga è caldamente consigliato.

Immagine(Icone/Piccole/note.png,,center)

Le opzioni «--basetgz» e «--distribution» servono per indicare a pbuilder quale versione di Ubuntu si intende gestire. Nel caso in cui non si fosse interessati a mantenere più di una chroot jail, è possibile adattare il file /etc/pbuilder/pbuilderrc modificando la variabile «DISTRIBUTION» secondo le proprie esigenze. In questo caso le due opzioni possono essere tranquillamente omesse, anche per i comandi che verranno presentati in seguito.

Creazione dei pacchetti

Per procedere alla creazione di un pacchetto occorre dotarsi dei relativi pacchetti sorgenti, reperibili per mezzo del comando:

apt-get source

o direttamente dal sito [http://packages.ubuntu.com]. Solitamente ogni pacchetto sorgente è formato da tre file, l'archivio dei sorgenti con estensione ,orig.tar.gz, il file delle differenze con estensione .diff.gz e il file di descrizione con estensione .dsc. A volte è presente solo il file .tar.gz al posto dell'archivio sorgenti e del file delle differenze. Per una corretta gestione, tali file devono essere rigorosamente nella stessa directory.

Una volta ottenuti i vari file che formano il pacchetto sorgente, occorre eseguire il comando:

sudo pbuilder build --basetgz /var/cache/pbuilder/karmic.tgz --distribution karmic nomepacchetto.dsc

Inizierà il processo di creazione che comprende le seguenti fasi:

  • Scompattazione della chroot jail
  • Verifica delle dipendenze del pacchetto
  • Scaricamento delle dipendenze necessarie e loro installazione
  • Compilazione del codice sorgente
  • Creazione del pacchetto
  • Cancellazione dei file temporanei utilizzati

Se la compilazione ha avuto esito positivo, il pacchetto in formato .deb sarà disponibile nella directory /var/cache/pbuilder/result, pronto per essere utilizzato.

Creazione con pdebuild

A volte accade che si rende necessario modificare alcuni file sorgente per applicare patch oppure adattare uno o più file di controllo. Per poter procedere alla pacchettizzazione, occorre per prima cosa ottenere i sorgenti del pacchetto da compilare con il comando:

dpkg-source -x nomepacchetto.dsc

Una volta terminata l'operazione, è necessario spostarsi nella directory dei sorgenti appena generata e, dopo aver apportato le modifiche desiderate, eseguire il comando:

pdebuild -- --basetgz /var/cache/pbuilder/karmic.tgz --distribution karmic

In questo caso è però necessario [:AmministrazioneSistema/InstallareProgrammi:installare] i seguenti pacchetti aggiuntivi:

  • devscripts

  • debhelper

  • dpatch

  • cdbs

Aggiornare la chroot jail

Ogni tanto è consigliabile aggiornare la chroot jail con le nuove versioni dei pacchetti onde evitare problemi con le dipendenze nell'installazione dei pacchetti compilati con pbuilder. Per poter fare ciò è sufficiente eseguire il comando:

sudo pbuilder update --basetgz /var/cache/pbuilder/karmic.tgz --distribution karmic

Pulizia della cache

Con il tempo la cache di pbuilder può diventare estremamente voluminosa ed è consigliabile effettuare una pulizia periodica delle directory delle dipendenze eseguendo il comando:

sudo pbuilder clean

Immagine(Icone/Piccole/note.png,,center)

Il comando non andrà a cancellare i pacchetti creati e riposti in /var/cache/pbuilder/result.

Uso di pbuilder-distribution

Le opzioni di pbuilder sono potenti, ma a volte è noioso ripeterle ogni volta. Questo è particolarmente vero nel caso si gestiscano più chroot jail contemporaneamente.

Per velocizzare il lavoro è possibile utilizzare lo script pbuilder-distribution in questo modo:

sudo ln -s /usr/share/doc/pbuilder/examples/pbuilder-distribution.sh /usr/local/bin/pbuilder-karmic

Creando questo link simbolico, è possibile effettuare le operazioni sulla chroot jail desiderata senza specificare alcun parametro opzionale quali --distribution o --basetgz dato che pbuilder-distribution si occupa di gestire il tutto automaticamente.

I comandi disponibili sono i medesimi di pbuilder:

   create
   update
   build
   clean
   login
   execute

Creazione pacchetti i386 con pbuilder su architetture AMD64

Una cosa molto utile di pbuilder è la possibilità di creare pacchetti per architetture i386 da macchine con architettura AMD64. Questo è possibile creando una chroot i386 con il comando:

sudo pbuilder create --debootstrapopts --arch --debootstrapopts i386

Se siete interessati alla compilazione per varie architetture e distribuzioni vi consiglio la lettura del paragrafo successivo.

pbuilder multipli

Quando si lavora con i pacchetti, spesso si desidera disporre di più pbuilders sul tuo computer, per esempio se si desidera un backport per Jaunty, mentre si lavora sulla versione di sviluppo di Ubuntu (Karmic attualmente). Oppure si vuole costruire i pacchetti per Debian. Le prossime sezioni forniscono alcune informazioni per iniziare con l'utilizzo di più pbuilders.

Aggiornamento di debootstrap

Si raccomanda di utilizzare sempre una versione aggiornata di debootstrap del repository backports di qualsiasi versione di Ubuntu si sta utilizzando. È possibile attivare i backports nel vostro sources.list attraverso la configurazione del file. Aggiornando la versione si avrà maggior supporto per le distribuzioni più recenti, come il ramo di sviluppo di Ubuntu.

Cambiare la posizione del file base.tgz

L'unica cosa necessaria per utilizzare pbuilder con diverse distribuzioni è un percorso alternativo per memorizzare l'archivio che contiene l'ambiente. Sulla riga di comando, questo può essere specificato con l'opzione 'basetgz'. Tuttavia, è noioso specificare il percorso completo ogni volta che viene eseguito pbuilder, quindi è conveniente creare un frammento di codice in ~/.Pbuilderrc per automatizzare il tutto:

# Codenames for Debian suites according to their alias. Update these when
# needed.
UNSTABLE_CODENAME="sid"
TESTING_CODENAME="squeeze"
STABLE_CODENAME="lenny"
STABLE_BACKPORTS_SUITE="$STABLE_CODENAME-backports"

# List of Debian suites.
DEBIAN_SUITES=($UNSTABLE_CODENAME $TESTING_CODENAME $STABLE_CODENAME
    "unstable" "testing" "stable")

# List of Ubuntu suites. Update these when needed.
UBUNTU_SUITES=("jaunty" "intrepid" "hardy" "karmic")

# Mirrors to use. Update these to your preferred mirror.
DEBIAN_MIRROR="ftp.us.debian.org"
UBUNTU_MIRROR="mirrors.kernel.org"

# Optionally use the changelog of a package to determine the suite to use if
# none set.
if [ -z "${DIST}" ] && [ -r "debian/changelog" ]; then
    DIST=$(dpkg-parsechangelog | awk '/^Distribution: / {print $2}')
    # Use the unstable suite for certain suite values.
    if $(echo "experimental UNRELEASED" | grep -q $DIST); then
        DIST="$UNSTABLE_CODENAME"
    fi
fi

# Optionally set a default distribution if none is used. Note that you can set
# your own default (i.e. ${DIST:="unstable"}).
: ${DIST:="$(lsb_release --short --codename)"}

# Optionally change Debian release states in $DIST to their names.
case "$DIST" in
    unstable)
        DIST="$UNSTABLE_CODENAME"
        ;;
    testing)
        DIST="$TESTING_CODENAME"
        ;;
    stable)
        DIST="$STABLE_CODENAME"
        ;;
esac

# Optionally set the architecture to the host architecture if none set. Note
# that you can set your own default (i.e. ${ARCH:="i386"}).
: ${ARCH:="$(dpkg --print-architecture)"}

NAME="$DIST"
if [ -n "${ARCH}" ]; then
    NAME="$NAME-$ARCH"
    DEBOOTSTRAPOPTS=("--arch" "$ARCH" "${DEBOOTSTRAPOPTS[@]}")
fi
BASETGZ="/var/cache/pbuilder/$NAME-base.tgz"
# Optionally, set BASEPATH (and not BASETGZ) if using cowbuilder
# BASEPATH="/var/cache/pbuilder/$NAME/base.cow/"
DISTRIBUTION="$DIST"
BUILDRESULT="/var/cache/pbuilder/$NAME/result/"
APTCACHE="/var/cache/pbuilder/$NAME/aptcache/"
BUILDPLACE="/var/cache/pbuilder/build/"

if $(echo ${DEBIAN_SUITES[@]} | grep -q $DIST); then
    # Debian configuration
    MIRRORSITE="http://$DEBIAN_MIRROR/debian/"
    COMPONENTS="main contrib non-free"
    # This is for enabling backports for the Debian stable suite.
    if $(echo "$STABLE_CODENAME stable" | grep -q $DIST); then
        EXTRAPACKAGES="$EXTRAPACKAGES debian-backports-keyring"
        OTHERMIRROR="$OTHERMIRROR | deb http://www.backports.org/debian $STABLE_BACKPORTS_SUITE $COMPONENTS"
    fi
elif $(echo ${UBUNTU_SUITES[@]} | grep -q $DIST); then
    # Ubuntu configuration
    MIRRORSITE="http://$UBUNTU_MIRROR/ubuntu/"
    COMPONENTS="main restricted universe multiverse"
else
    echo "Unknown distribution: $DIST"
    exit 1
fi

Immagine(Icone/Piccole/note.png,,center)

Ci sono alcune linee facoltative in questo frammento di codice che compaiono dopo i commenti che iniziano con "Optionally". È possibile decommentare queste linee o cambiarle per soddisfare le proprie esigenze.

Ora, se l'utente utilizza un'ltra DIST distribuzione, la posizione del tarball sarà cambiata. La linea che definisce la distribuzione ha effetto solo durante la creazione di un nuovo archivio di base, o se il - override-config è impostato diversamente. L'impostazione di BUILDRESULT o APTCACHE è facoltativa, ma potrebbe tornare utile. Se ARCH è impostato su una diversa architettura rispetto a quella della macchina si creerà un ambiente per compilare i pacchetti per quell'architettura. Siamo ora in grado di creare ed utilizzare l'alternativo tarball, come nei seguenti esempi:

 # Creare un ambiente di base per Ubuntu Jaunty 
 sudo DIST=jaunty pbuilder create 

 # Creare un ambiente di base per Debian sid 
 sudo DIST=sid pbuilder create

 # Creare una base per l'ambiente sotto Ubuntu Jaunty AMD64 
 # per l'architettura i386 
 sudo DIST=jaunty ARCH=i386 pbuilder create 

 # Aggiornare l'ambiente per Ubuntu Jaunty 
 sudo DIST=jaunty pbuilder update 

 # Crea un pacchetto utilizzando come base Ubuntu Jaunty
 DIST=jaunty pdebuild 

 # Crea un pacchetto utilizzando come base  Ubuntu Jaunty
 # con architettura i386 
 DIST=jaunty ARCH=i386 pdebuild 

Ulteriori risorse


CategoryDaRevisionare CategoryProgrammazione