| Current Path : /proc/283367/root/usr/share/doc/maint-guide-it/html/ |
| Current File : //proc/283367/root/usr/share/doc/maint-guide-it/html/build.it.html |
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Capitolo 6. Costruzione del pacchetto</title>
<link rel="stylesheet" type="text/css" href="debian.css"/>
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="home" href="index.it.html" title="Guida per il nuovo Maintainer"/>
<link rel="up" href="index.it.html" title="Guida per il nuovo Maintainer"/>
<link rel="prev" href="dother.it.html" title="Capitolo 5. Altri file nella directory debian"/>
<link rel="next" href="checkit.it.html" title="Capitolo 7. Controllare il pacchetto per errori"/>
</head>
<body>
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Capitolo 6. Costruzione del pacchetto</th>
</tr>
<tr>
<td align="left"><a accesskey="p" href="dother.it.html"><img src="images/prev.png" alt="Indietro"/></a> </td>
<th width="60%" align="center"> </th>
<td align="right"> <a accesskey="n" href="checkit.it.html"><img src="images/next.png" alt="Avanti"/></a></td>
</tr>
</table>
<hr/>
</div>
<div class="chapter">
<div class="titlepage">
<div>
<div>
<h1 class="title"><a id="build"/>Capitolo 6. Costruzione del pacchetto</h1>
</div>
</div>
</div>
<div class="toc">
<p>
<strong>Indice</strong>
</p>
<dl class="toc">
<dt>
<span class="section">
<a href="build.it.html#completebuild">6.1. (ri)Creazione completa</a>
</span>
</dt>
<dt>
<span class="section">
<a href="build.it.html#autobuilder">6.2. Auto-costruzione</a>
</span>
</dt>
<dt>
<span class="section">
<a href="build.it.html#debuild">6.3. Il comando <span class="command"><strong>debuild</strong></span></a>
</span>
</dt>
<dt>
<span class="section">
<a href="build.it.html#pbuilder">6.4. Il pacchetto <code class="systemitem">pbuilder</code></a>
</span>
</dt>
<dt>
<span class="section">
<a href="build.it.html#git-buildpackage">6.5. Il comando <span class="command"><strong>git-buildpackage</strong></span> ed altri simili</a>
</span>
</dt>
<dt>
<span class="section">
<a href="build.it.html#quickrebuild">6.6. Ricostruzione veloce</a>
</span>
</dt>
<dt>
<span class="section">
<a href="build.it.html#hierarchy">6.7. Struttura gerarchica del comando</a>
</span>
</dt>
</dl>
</div>
<p>
È disponibile la riscrittura di questo tutorial, con contenuti aggiornati e
con esempi più pratici, denominato <a class="ulink" href="https://www.debian.org/doc/devel-manuals#debmake-doc">Guide for Debian
Maintainers</a>. Si prega di utilizzare il nuovo tutorial come
documento primario.
</p>
<p>
A questo punto, si dovrebbe essere pronti a creare il pacchetto.
</p>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="completebuild"/>6.1. (ri)Creazione completa</h2>
</div>
</div>
</div>
<p>
Al fine di (ri)creare un pacchetto in modo appropriato, è necessario
assicurarsi di installare
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
il pacchetto <code class="systemitem">build-essential</code>,
</p>
</li>
<li class="listitem">
<p>
i pacchetti elencati nel campo <code class="literal">Build-Depends</code> (vedere
<a class="xref" href="dreq.it.html#control" title="4.1. control">Sezione 4.1, «<code class="filename">control</code>»</a>), e
</p>
</li>
<li class="listitem">
<p>
i pacchetti elencati nel campo <code class="literal">Build-Depends-indep</code>
(vedere <a class="xref" href="dreq.it.html#control" title="4.1. control">Sezione 4.1, «<code class="filename">control</code>»</a>).
</p>
</li>
</ul>
</div>
<p>
Adesso ci si sposti nella directory dei sorgenti del programma e si lanci il
comando:
</p>
<pre class="screen">
$ dpkg-buildpackage -us -uc
</pre>
<p>
Questo comando creerà i pacchetti binari e sorgenti al posto vostro.
Eseguirà le seguenti operazioni:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
pulirà l'albero dei sorgenti (<code class="literal">debian/rules clean</code>)
</p>
</li>
<li class="listitem">
<p>
costruirà il pacchetto sorgente (<code class="literal">dpkg-source -b</code>)
</p>
</li>
<li class="listitem">
<p>
costruirà il programma (<code class="literal">debian/rules build</code>)
</p>
</li>
<li class="listitem">
<p>
costruirà il pacchetto binario (<code class="literal">fakeroot debian/rules
binary</code>)
</p>
</li>
<li class="listitem">
<p>
crea il file <code class="filename">.dsc</code>
</p>
</li>
<li class="listitem">
<p>
crea il file <code class="filename">.changes</code>, utilizzando
<span class="command"><strong>dpkg-genchanges</strong></span>
</p>
</li>
</ul>
</div>
<p>
Se si è soddisfatti del pacchetto generato, si firmino i file
<code class="filename">.dsc</code> e <code class="filename">.changes</code> con la chiave GPG
privata utilizzando il comando <span class="command"><strong>debsign</strong></span>. È necessario
inserire la propria passphrase segreta due volte. <a href="#ftn.idm2742" class="footnote" id="idm2742"><sup class="footnote">[62]</sup></a>
</p>
<p>
Per un pacchetto Debian non-nativo, per esempio, <code class="systemitem">gentoo</code>, si vedano i seguenti file nella
directory superiore (<code class="filename">~/gentoo</code>) dopo la creazione dei
pacchetti:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
<code class="filename">gentoo_0.9.12.orig.tar.gz</code>
</p>
<p>
Questo è il codice sorgente originale, semplicemente rinominato in modo da
aderire allo standard Debian. Da notare che questo è stato creato
inizialmente con il comando <code class="literal">dh_make -f
../gentoo-0.9.12.tar.gz</code>.
</p>
</li>
<li class="listitem">
<p>
<code class="filename">gentoo_0.9.12-1.dsc</code>
</p>
<p>
Questo è un sommario del contenuto del codice sorgente. Questo file è
generato dal file <code class="filename">control</code>, ed è usato quando si
decomprime il sorgente con <span class="citerefentry"><span class="refentrytitle">dpkg-source</span>(1)</span>.
</p>
</li>
<li class="listitem">
<p>
<code class="filename">gentoo_0.9.12-1.debian.tar.gz</code>
</p>
<p>
Questo file compresso contiene il contenuto della directory
<code class="filename">debian</code>. Ogni modifica effettuata al codice sorgente
originale, verrà memorizzata come patch di <span class="command"><strong>quilt</strong></span> in
<code class="filename">debian/patches</code>.
</p>
<p>
Se qualcun altro volesse ri-creare il pacchetto da zero, potrebbe farlo
facilmente usando i suddetti tre file. La procedura di estrazione è banale:
basta copiare i tre file da qualche parte ed eseguire <code class="literal">dpkg-source
-x gentoo_0.9.12-1.dsc</code>. <a href="#ftn.idm2773" class="footnote" id="idm2773"><sup class="footnote">[63]</sup></a>
</p>
</li>
<li class="listitem">
<p>
<code class="filename">gentoo_0.9.12-1_i386.deb</code>
</p>
<p>
Questo è il pacchetto binario completo. Si può usare
<span class="command"><strong>dpkg</strong></span> per installarlo e rimuoverlo, come per ogni altro
pacchetto.
</p>
</li>
<li class="listitem">
<p>
<code class="filename">gentoo_0.9.12-1_i386.changes</code>
</p>
<p>
Questo file descrive tutte le modifiche effettuate nella revisione corrente
del pacchetto; è usata dai programmi di manutenzione dell'archivio FTP di
Debian, per installare i pacchetti binari e sorgenti. È generato
parzialmente dal contenuto del file <code class="filename">changelog</code> e dal
file <code class="filename">.dsc</code>.
</p>
<p>
Quando si lavora sul pacchetto, potrebbero cambiare il funzionamento del
programma, o potrebbero venire introdotte nuove funzionalità. Chi
scaricherà il pacchetto, potrà controllare questo file per vedere
velocemente quali sono i cambiamenti. I programmi di manutenzione
dell'archivio Debian invieranno anche i contenuti di questo file alla
mailing list <a class="ulink" href="http://lists.debian.org/debian-devel-changes/">debian-devel-changes-@lists.debian.org</a>.
</p>
</li>
</ul>
</div>
<p>
I file <code class="filename">gentoo_0.9.12-1.dsc</code> e
<code class="filename">gentoo_0.9.12-1_i386.changes</code> devono essere firmati
usando il comando <span class="command"><strong>debsign</strong></span> con la propria chiave privata
GPG presente nella directory <code class="filename">~/.gnupg/</code>, prima di
caricarli nell'archivio FTP Debian. La firma GPG è la prova che questi file
sono veramente stati generati da te, utilizzando la chiave GPG pubblica.
</p>
<p>
Il comando <span class="command"><strong>debsign</strong></span> può essere eseguito per firmare con
l'ID della chiave GPG specificata, nel file
<code class="filename">~/.devscripts</code>, come seguie (utile in caso di sponsoring
di pacchetti):
</p>
<pre class="screen">
DEBSIGN_KEYID=Your_GPG_keyID
</pre>
<p>
Le lunghe stringhe di numeri nei file <code class="filename">.dsc</code> e
<code class="filename">.changes</code> sono codici di controllo SHA1/SHA256 per i
file menzionati. Chi scarica questi file, può controllarli con
<span class="citerefentry"><span class="refentrytitle">sha1sum</span>(1)</span>, o <span class="citerefentry"><span class="refentrytitle">sha256sum</span>(1)</span> e se i numeri non corrispondessero saprebbe che il file
relativo è corrotto, o è stato alterato.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="autobuilder"/>6.2. Auto-costruzione</h2>
</div>
</div>
</div>
<p>
Debian supporta molti <a class="ulink" href="http://www.debian.org/ports/">port</a> tramite la <a class="ulink" href="http://www.debian.org/devel/buildd/">autobuilder network</a>, su cui sono in esecuzione i
demoni di <span class="command"><strong>buildd</strong></span> su molti computer con architetture
differenti. Anche se non sarà necessario fare questo da soli, si dovrebbe
essere consapevoli di quello che succederà ai pacchetti. Si vedrà, in
maniera non approfondita, come i pacchetti vengono ricostruiti per
architetture differenti. <a href="#ftn.idm2816" class="footnote" id="idm2816"><sup class="footnote">[64]</sup></a>
</p>
<p>
I pacchetti con <code class="literal">Architecture: any</code>, verranno ricostruiti
dal sistema di auto-costruzione. Ci si assicuri di avere installato
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
il pacchetto <code class="systemitem">build-essential</code>, e
</p>
</li>
<li class="listitem">
<p>
i pacchetti elencati nel campo <code class="literal">Build-Depends</code> (vedere
<a class="xref" href="dreq.it.html#control" title="4.1. control">Sezione 4.1, «<code class="filename">control</code>»</a>).
</p>
</li>
</ul>
</div>
<p>
Dopo si può eseguire il comando seguente nella directory dei sorgenti:
</p>
<pre class="screen">
$ dpkg-buildpackage -B
</pre>
<p>
Questo comando creerà i pacchetti binari e sorgenti al posto vostro.
Eseguirà le seguenti operazioni:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
pulirà l'albero dei sorgenti (<code class="literal">debian/rules clean</code>)
</p>
</li>
<li class="listitem">
<p>
costruirà il programma (<code class="literal">debian/rules build</code>)
</p>
</li>
<li class="listitem">
<p>
costruirà il pacchetto binario per una specifica architettura
(<code class="literal">fakeroot debian/rules binary-arch</code>)
</p>
</li>
<li class="listitem">
<p>
firmerà il file sorgente <code class="filename">.dsc</code> file, usando
<span class="command"><strong>gpg</strong></span>
</p>
</li>
<li class="listitem">
<p>
creerà e firmerà il file di upload <code class="filename">.changes</code> file,
usando <span class="command"><strong>dpkg-genchanges</strong></span> e <span class="command"><strong>gpg</strong></span>
</p>
</li>
</ul>
</div>
<p>
È questo il motivo per il quale si vede il proprio pacchetto per altre
architetture.
</p>
<p>
Anche se i pacchetti sono elencati nel campo
<code class="literal">Build-Depends-Indep</code>, per la normale creazione del
pacchetto, devono comunque essere installati (vedere <a class="xref" href="build.it.html#completebuild" title="6.1. (ri)Creazione completa">Sezione 6.1, «(ri)Creazione completa»</a>), invece per il sistema di auto-costruzione non è
necessario installarli dato che costruisce solamente pacchetti binari per
una specifica architettura. <a href="#ftn.idm2854" class="footnote" id="idm2854"><sup class="footnote">[65]</sup></a> Questa
distinzione tra la normale pacchettizzazione e il sistema di
auto-costruzione determina se i pacchetti richiesti devono essere registrati
nei campi <code class="literal">Build-Depends</code> o
<code class="literal">Build-Depends-Indep</code> nel file
<code class="filename">debian/control</code> (vedere <a class="xref" href="dreq.it.html#control" title="4.1. control">Sezione 4.1, «<code class="filename">control</code>»</a>).
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="debuild"/>6.3. Il comando <span class="command"><strong>debuild</strong></span></h2>
</div>
</div>
</div>
<p>
È possibile automatizzare ulteriormente il processo di creazione del
pacchetto, eseguito con il comando <span class="command"><strong>dpkg-buildpackage</strong></span>,
utilizzando il comando <span class="command"><strong>debuild</strong></span>. Vedere <span class="citerefentry"><span class="refentrytitle">debuild</span>(1)</span>.
</p>
<p>
Il comando <span class="command"><strong>debuild</strong></span> esegue il comando
<span class="command"><strong>lintian</strong></span> per effettuare un controllo statico dopo la
creazione del pacchetto Debian. Il comando <span class="command"><strong>lintian</strong></span> può
essere personalizzato come segue, nel file
<code class="filename">~/.devscripts</code>:
</p>
<pre class="screen">
DEBUILD_DPKG_BUILDPACKAGE_OPTS="-us -uc -I -i"
DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"
</pre>
<p>
Si possono ripulire i sorgenti e ricreare il pacchetto da un account utente,
semplicemente con:
</p>
<pre class="screen">
$ debuild
</pre>
<p>
È possibile ripulire l'albero dei sorgenti semplicemente con:
</p>
<pre class="screen">
$ debuild -- clean
</pre>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="pbuilder"/>6.4. Il pacchetto <code class="systemitem">pbuilder</code></h2>
</div>
</div>
</div>
<p>
Il pacchetto <code class="systemitem">pbuilder</code> è molto utile
per verificare le dipendenze di creazione del pacchetto da un ambiente
(<span class="command"><strong>chroot</strong></span>) di compilazione sano e minimale. <a href="#ftn.idm2888" class="footnote" id="idm2888"><sup class="footnote">[66]</sup></a> Questo assicura di compilare i sorgenti in maniera
pulita, usando la distribuzione <code class="literal">sid</code> un compilatore
automatico (auto-builder) per differenti architetture ed evita i bug FTBFS
(Fails To Build From Source) di severità seria, che sono sempre di categoria
RC (Critici per il Rilascio). <a href="#ftn.idm2892" class="footnote" id="idm2892"><sup class="footnote">[67]</sup></a>
</p>
<p>
Si configuri il pacchetto <code class="systemitem">pbuilder</code>
come segue:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
impostare il permesso di scrittura per l'utente alla directory
<code class="filename">/var/cache/pbuilder/result</code>.
</p>
</li>
<li class="listitem">
<p>
creare una directory, ad es.
<code class="filename"><em class="replaceable"><code>/var/cache/pbuilder/hooks</code></em></code>,
con i permessi di scrittura per l'utente per potergli inserire degli script
di hook.
</p>
</li>
<li class="listitem">
<p>
configurare il file <code class="filename">~/.pbuilderrc</code> o
<code class="filename">/etc/pbuilderrc</code> in modo che includa le seguenti righe.
</p>
<pre class="screen">
AUTO_DEBSIGN=${AUTO_DEBSIGN:-no}
HOOKDIR=<em class="replaceable"><code>/var/cache/pbuilder/hooks</code></em>
</pre>
</li>
</ul>
</div>
<p>
Si avvii <code class="systemitem">pbuilder</code> per costruire
l'ambiente <span class="command"><strong>chroot</strong></span> locale, come segue:
</p>
<pre class="screen">
$ sudo pbuilder create
</pre>
<p>
Se si hanno già i pacchetti sorgenti, eseguire i seguenti comandi nella
directory in cui si trovano i file
<code class="filename"><em class="replaceable"><code>foo</code></em>.orig.tar.gz</code>,
<code class="filename"><em class="replaceable"><code>foo</code></em>.debian.tar.gz</code>, e
<code class="filename"><em class="replaceable"><code>foo</code></em>.dsc</code> per aggiornare
l'ambiente <span class="command"><strong>chroot</strong></span> di <code class="systemitem">pbuilder</code> e per costruirci dentro il pacchetto
binario:
</p>
<pre class="screen">
$ sudo pbuilder --update
$ sudo pbuilder --build <em class="replaceable"><code>foo_version</code></em>.dsc
</pre>
<p>
Il nuovo pacchetto, senza firme GPG, sarà creato nella directory
<code class="filename">/var/cache/pbuilder/result/</code> e non sarà assegnato
all'utente root.
</p>
<p>
Le firme GPG sui file <code class="filename">.dsc</code>
<code class="filename">.changes</code> possono essere generate come segue:
</p>
<pre class="screen">
$ cd /var/cache/pbuilder/result/
$ debsign <em class="replaceable"><code>foo_version_arch</code></em>.changes
</pre>
<p>
Se si ha l'albero dei sorgenti aggiornato, ma non si sono generati i
rispettivi pacchetti sorgenti, eseguire i seguenti comandi nella directory
dei sorgenti in cui si trova il file <code class="filename">debian</code>:
</p>
<pre class="screen">
$ sudo pbuilder --update
$ pdebuild
</pre>
<p>
È possibile accedere all'ambiente <span class="command"><strong>chroot</strong></span> con il comando
<code class="literal">pbuilder --login --save-after-login</code> e configurarlo come
si vuole. Questo ambiente può essere salvato, semplicemente uscendo dalla
shell con <code class="literal">^D</code> (Control-D).
</p>
<p>
L'ultima versione del programma <span class="command"><strong>lintian</strong></span> può essere
eseguita nell'ambiente <code class="literal">chroot</code>, usando gli script di hook
<code class="filename"><em class="replaceable"><code>/var/cache/pbuilder/hooks</code></em>/B90lintian</code>,
configurati come segue: <a href="#ftn.idm2945" class="footnote" id="idm2945"><sup class="footnote">[68]</sup></a>
</p>
<pre class="screen">
#!/bin/sh
set -e
install_packages() {
apt-get -y --allow-downgrades install "$@"
}
install_packages lintian
echo "+++ lintian output +++"
su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes" - pbuilder
# use this version if you don't want lintian to fail the build
#su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes; :" - pbuilder
echo "+++ end of lintian output +++"
</pre>
<p>
È necessario avere accesso all'ultima versione di <code class="literal">sid</code> per
poter costruire correttamente i pacchetti per <code class="literal">sid</code>. In
pratica <code class="literal">sid</code> potrebbe avere dei problemi che rendono poco
consigliabile migrare l'intero sistema. In questo caso il pacchetto
<code class="systemitem">pbuilder</code> può essere molto di aiuto.
</p>
<p>
Potrebbe essere necessario aggiornare i pacchetti <code class="literal">stable</code>
dopo il loro rilascio per <code class="literal">stable-proposed-updates</code>,
<code class="literal">stable/updates</code>, ecc. <a href="#ftn.idm2959" class="footnote" id="idm2959"><sup class="footnote">[69]</sup></a> Per questa ragione se si sta utilizzando un sistema
<code class="literal">sid</code> non è una buona scusa per non aggiornarli
tempestivamente. Il pacchetto <code class="systemitem">pbuilder</code> aiuta ad accedere agli ambienti di
quasi tutte le distribuzioni derivate da Debian con la stessa architettura
di CPU.
</p>
<p>
Vedere <a class="ulink" href="http://www.netfort.gr.jp/~dancer/software/pbuilder.html">http://www.netfort.gr.jp/~dancer/software/pbuilder.html</a>, <span class="citerefentry"><span class="refentrytitle">pdebuild</span>(1)</span>, <span class="citerefentry"><span class="refentrytitle">pbuilderrc</span>(5)</span>, e <span class="citerefentry"><span class="refentrytitle">pbuilder</span>(8)</span>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="git-buildpackage"/>6.5. Il comando <span class="command"><strong>git-buildpackage</strong></span> ed altri simili</h2>
</div>
</div>
</div>
<p>
Se l'autore originale utilizza un sistema di controllo di versione (VCS)
<a href="#ftn.idm2979" class="footnote" id="idm2979"><sup class="footnote">[70]</sup></a> per gestire il proprio codice, si
dovrebbe prendere in considerazione di usarlo. Questo rende molto più
semplice la fusione e la raccolta di patch dai sorgenti originali. Ci sono
diversi pacchetti di script adatti alla costruzione di pacchetti Debian per
ogni sistema VCS.
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
<code class="systemitem">git-buildpackage</code>: una suite per
aiutare con i pacchetti Debian nei repository Git.
</p>
</li>
<li class="listitem">
<p>
<code class="systemitem">svn-buildpackage</code>: programmi di
supporto per mantenere i pacchetti Debian con Subversion.
</p>
</li>
<li class="listitem">
<p>
<code class="systemitem">cvs-buildpackage</code>: una serie di
script per i pacchetti Debian per gli alberi di sorgenti sotto CVS.
</p>
</li>
</ul>
</div>
<p>
L'utilizzo di <code class="systemitem">git-buildpackage</code> sta
diventando molto popolare per gli sviluppatori Debian,questo permette di
gestire i pacchetti Debian con il server Git su <a class="ulink" href="http://alioth.debian.org/">alioth.debian.org</a>. <a href="#ftn.idm2995" class="footnote" id="idm2995"><sup class="footnote">[71]</sup></a> Questo pacchetto offre molti comandi che
<span class="emphasis"><em>automatizzano</em></span> le procedure di pacchettizzazione:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p> <span class="citerefentry"><span class="refentrytitle">gbp-import-dsc</span>(1)</span>: import a previous Debian package
to a Git repository.</p>
</li>
<li class="listitem">
<p> <span class="citerefentry"><span class="refentrytitle">gbp-import-orig</span>(1)</span>: import a new upstream tar to a Git
repository.</p>
</li>
<li class="listitem">
<p> <span class="citerefentry"><span class="refentrytitle">gbp-dch</span>(1)</span>: generate the Debian changelog from
Git commit messages.</p>
</li>
<li class="listitem">
<p> <span class="citerefentry"><span class="refentrytitle">git-buildpackage</span>(1)</span>: costruisce i pacchetti Debian da
un repository Git.</p>
</li>
<li class="listitem">
<p> <span class="citerefentry"><span class="refentrytitle">git-pbuilder</span>(1)</span>: costruisce i pacchetti Debian da
un repository Git, utilizzando
<span class="command"><strong>pbuilder</strong></span>/<span class="command"><strong>cowbuilder</strong></span>.</p>
</li>
</ul>
</div>
<p>
Questi comandi utilizzano 3 "branch" per tenere traccia dell'attività sulla
pacchettizzazione:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p> <code class="literal">main</code> per l'albero dei sorgenti dei pacchetti Debian.</p>
</li>
<li class="listitem">
<p> <code class="literal">upstream</code> per l'albero dei sorgenti originali.</p>
</li>
<li class="listitem">
<p> <code class="literal">pristine-tar</code> per i tarball dei sorgenti originali
generati dall'opzione <code class="literal">--pristine-tar</code>.<a href="#ftn.idm3040" class="footnote" id="idm3040"><sup class="footnote">[72]</sup></a> </p>
</li>
</ul>
</div>
<p>
È possibile configurare <code class="systemitem">git-buildpackage</code> utilizzando il file
<code class="filename">~/.gbp.conf</code>. Vedere <span class="citerefentry"><span class="refentrytitle">gbp.conf</span>(5)</span>. <a href="#ftn.idm3051" class="footnote" id="idm3051"><sup class="footnote">[73]</sup></a>
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="quickrebuild"/>6.6. Ricostruzione veloce</h2>
</div>
</div>
</div>
<p>
Con un pacchetto di grandi dimensioni, si potrebbe non voler ricostruire
tutto da zero, ogni volta che si modifica un dettaglio in
<code class="filename">debian/rules</code>. Per effettuare delle prove, si può
creare un file <code class="filename">.deb</code>, senza ricompilare i sorgenti
originali, come segue: <a href="#ftn.idm3071" class="footnote" id="idm3071"><sup class="footnote">[74]</sup></a>:
</p>
<pre class="screen">
$ fakeroot debian/rules binary
</pre>
<p>
Oppure, semplicemente controllando se si costruisce o no:
</p>
<pre class="screen">
$ fakeroot debian/rules build
</pre>
<p>
Una volta completati i vari aggiustamenti, bisogna ricordarsi di ricostruire
il pacchetto usando la giusta procedura. Si potrebbe non essere in grado di
caricare il pacchetto correttamente se si prova con dei file
<code class="filename">.deb</code> creati in questo modo.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="hierarchy"/>6.7. Struttura gerarchica del comando</h2>
</div>
</div>
</div>
<p>
Ecco un breve riassunto di come molti comandi per creare i pacchetti si
incastrano nella gerarchia di comando. Ci sono molti modi per fare la stessa
cosa.
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p><code class="filename">debian/rules</code> = script responsabile della costruzione
del pacchetto</p>
</li>
<li class="listitem">
<p><span class="command"><strong>dpkg-buildpackage</strong></span> = il cuore dello strumento di
costruzione del pacchetto</p>
</li>
<li class="listitem">
<p><span class="command"><strong>debuild</strong></span> = <span class="command"><strong>dpkg-buildpackage</strong></span> +
<span class="command"><strong>lintian</strong></span> (creare il pacchetto utilizzando un ambiente con
le variabili controllate)</p>
</li>
<li class="listitem">
<p><span class="command"><strong>pbuilder</strong></span> = il cuore dello strumento chroot dell'ambiente
Debian</p>
</li>
<li class="listitem">
<p><span class="command"><strong>pdebuild</strong></span> = <span class="command"><strong>pbuilder</strong></span> +
<span class="command"><strong>dpkg-buildpackage</strong></span> (costruito in chroot)</p>
</li>
<li class="listitem">
<p><span class="command"><strong>cowbuilder</strong></span> = velocizza l'esecuzione di
<span class="command"><strong>pbuilder</strong></span></p>
</li>
<li class="listitem">
<p><span class="command"><strong>git-pbuilder</strong></span> = una sintassi a linea di comando facilitata
per <span class="command"><strong>pdebuild</strong></span> (usato da <span class="command"><strong>gbp
buildpackage</strong></span>)</p>
</li>
<li class="listitem">
<p><span class="command"><strong>gbp</strong></span> = gestisce il sorgente Debian utilizzando un
repository git</p>
</li>
<li class="listitem">
<p><span class="command"><strong>gbp buildpackage</strong></span> = <span class="command"><strong>pbuilder</strong></span> +
<span class="command"><strong>dpkg-buildpackage</strong></span> + <span class="command"><strong>gbp</strong></span></p>
</li>
</ul>
</div>
<p>
Sebbene l'uso di comandi di alto livello come <span class="command"><strong>gbp
buildpackage</strong></span> e <span class="command"><strong>pbuilder</strong></span> assicura l'ambiente
ideale per la costruzione del pacchetto, è essenziale comprendere come i
comandi di basso livello <code class="filename">debian/rules</code> e
<span class="command"><strong>dpkg-buildpackage</strong></span> vengono richiamati da loro.
</p>
</div>
<div class="footnotes">
<br/>
<hr/>
<div id="ftn.idm2742" class="footnote">
<p><a href="#idm2742" class="para"><sup class="para">[62] </sup></a>
Questa chiave GPG deve essere firmata da uno sviluppatore Debian per
collegarsi alla rete di fiducia e bisogna essere registrati al <a class="ulink" href="http://keyring.debian.org">portachiavi Debian</a>. In questo modo i pacchetti
caricati potranno essere accettati ed inseriti negli archivi Debian. Vedere
<a class="ulink" href="http://keyring.debian.org/creating-key.html">Creare una nuova chiave GPG</a> e <a class="ulink" href="http://wiki.debian.org/Keysigning">Debian Wiki on Keysigning</a>.
</p>
</div>
<div id="ftn.idm2773" class="footnote">
<p><a href="#idm2773" class="para"><sup class="para">[63] </sup></a> È possibile evitare di applicare la patch <span class="command"><strong>quilt</strong></span>, nel
formato sorgente <code class="literal">3.0 (quilt)</code>, aggiungendo il parametro
<code class="literal">--skip-patches</code> al comando di estrazione. In alternativa,
è possibile eseguire <code class="literal">dquilt pop -a</code> dopo le normali
operazioni. </p>
</div>
<div id="ftn.idm2816" class="footnote">
<p><a href="#idm2816" class="para"><sup class="para">[64] </sup></a> L'attuale sistema di auto-costruzione è molto più complicato di come è qui
documentato. Tali dettagli esulano dallo scopo del documento. </p>
</div>
<div id="ftn.idm2854" class="footnote">
<p><a href="#idm2854" class="para"><sup class="para">[65] </sup></a> Diversamente dal pacchetto <code class="systemitem">pbuilder</code>,
l'ambiente <span class="command"><strong>chroot</strong></span> sotto il pacchetto <code class="systemitem">sbuild</code>, usato dal sistema di auto-costruzione,
non forza la creazione di un sistema minimale, e potrebbe lasciare
installati molti pacchetti. </p>
</div>
<div id="ftn.idm2888" class="footnote">
<p><a href="#idm2888" class="para"><sup class="para">[66] </sup></a> <code class="systemitem">pbuilder</code> è ancora in evoluzione, si
dovrebbe controllare l'attuale configurazione consultando la documentazione
ufficiale più recente.</p>
</div>
<div id="ftn.idm2892" class="footnote">
<p><a href="#idm2892" class="para"><sup class="para">[67] </sup></a>Vedere <a class="ulink" href="http://buildd.debian.org/">http://buildd.debian.org/</a> per maggiori informazioni
sull'auto-costruzione dei pacchetti Debian.</p>
</div>
<div id="ftn.idm2945" class="footnote">
<p><a href="#idm2945" class="para"><sup class="para">[68] </sup></a> Ciò presuppone il settaggio
<code class="literal">HOOKDIR=/var/cache/pbuilder/hooks</code>. È possibile trovare
numerosi esempi di script di hook, nella directory
<code class="filename">/usr/share/doc/pbuilder/examples</code>. </p>
</div>
<div id="ftn.idm2959" class="footnote">
<p><a href="#idm2959" class="para"><sup class="para">[69] </sup></a> Ci sono alcune restrizioni per tali aggiornamenti del pacchetto
<code class="literal">stable</code>.
</p>
</div>
<div id="ftn.idm2979" class="footnote">
<p><a href="#idm2979" class="para"><sup class="para">[70] </sup></a>Vedere <a class="ulink" href="http://www.debian.org/doc/manuals/debian-reference/ch10#_version_control_systems">Version control systems</a> per più
informazioni.</p>
</div>
<div id="ftn.idm2995" class="footnote">
<p><a href="#idm2995" class="para"><sup class="para">[71] </sup></a><a class="ulink" href="http://wiki.debian.org/Alioth">Debian wiki Alioth</a> spiega come
usare il servizio <a class="ulink" href="http://alioth.debian.org/">alioth.debian.org</a>.</p>
</div>
<div id="ftn.idm3040" class="footnote">
<p><a href="#idm3040" class="para"><sup class="para">[72] </sup></a>L'opzione <code class="literal">--pristine-tar</code> esegue il comando
<span class="command"><strong>pristine-tar</strong></span> che può rigenerare un copia esatta del
tarball dei sorgenti originali, utilizzando solo un piccolo file binario
delta e i contenuti del tarball, che normalmente sono conservati nel branch
<code class="literal">upstream</code> del VCS. </p>
</div>
<div id="ftn.idm3051" class="footnote">
<p><a href="#idm3051" class="para"><sup class="para">[73] </sup></a> Ecco alcune risorse web, per gli utenti esperti. </p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p> Creare pacchetti Debian Packages con git-buildpackage
(<code class="filename">/usr/share/doc/git-buildpackage/manual-html/gbp.html</code>)</p>
</li>
<li class="listitem">
<p> <a class="ulink" href="https://honk.sigxcpu.org/piki/development/debian_packages_in_git/">debian packages in git</a> </p>
</li>
<li class="listitem">
<p> <a class="ulink" href="http://www.eyrie.org/~eagle/notes/debian/git.html">Using Git for Debian Packaging</a> </p>
</li>
<li class="listitem">
<p> <a class="ulink" href="http://git-dpm.alioth.debian.org/">git-dpm: Debian packages in Git manager</a> </p>
</li>
</ul>
</div>
</div>
<div id="ftn.idm3071" class="footnote">
<p><a href="#idm3071" class="para"><sup class="para">[74] </sup></a> Le variabili d'ambiente, che sono normalmente impostate con dei valori
corretti, non sono utilizzati in questa modalità. Mai creare dei pacchetti,
che poi andranno caricati, utilizzando il metodo <span class="strong"><strong>veloce</strong></span>. </p>
</div>
</div>
</div>
<div class="navfooter">
<hr/>
<table width="100%" summary="Navigation footer">
<tr>
<td align="left"><a accesskey="p" href="dother.it.html"><img src="images/prev.png" alt="Indietro"/></a> </td>
<td align="center"> </td>
<td align="right"> <a accesskey="n" href="checkit.it.html"><img src="images/next.png" alt="Avanti"/></a></td>
</tr>
<tr>
<td align="left" valign="top">Capitolo 5. Altri file nella directory <code class="filename">debian</code> </td>
<td align="center">
<a accesskey="h" href="index.it.html">
<img src="images/home.png" alt="Partenza"/>
</a>
</td>
<td align="right" valign="top"> Capitolo 7. Controllare il pacchetto per errori</td>
</tr>
</table>
</div>
</body>
</html>