| Current Path : /proc/thread-self/root/proc/358557/root/usr/share/doc/maint-guide-it/html/ |
| Current File : //proc/thread-self/root/proc/358557/root/usr/share/doc/maint-guide-it/html/first.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 2. Primi passi</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="start.it.html" title="Capitolo 1. Partire nel modo giusto"/>
<link rel="next" href="modify.it.html" title="Capitolo 3. Modificare i sorgenti"/>
</head>
<body>
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Capitolo 2. Primi passi</th>
</tr>
<tr>
<td align="left"><a accesskey="p" href="start.it.html"><img src="images/prev.png" alt="Indietro"/></a> </td>
<th width="60%" align="center"> </th>
<td align="right"> <a accesskey="n" href="modify.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="first"/>Capitolo 2. Primi passi</h1>
</div>
</div>
</div>
<div class="toc">
<p>
<strong>Indice</strong>
</p>
<dl class="toc">
<dt>
<span class="section">
<a href="first.it.html#workflow">2.1. Flusso di lavoro per la costruzione dei pacchetti Debian</a>
</span>
</dt>
<dt>
<span class="section">
<a href="first.it.html#choose">2.2. Scegliamo il programma</a>
</span>
</dt>
<dt>
<span class="section">
<a href="first.it.html#getit">2.3. Prendere il programma e provarlo</a>
</span>
</dt>
<dt>
<span class="section">
<a href="first.it.html#simplemake">2.4. Sistemi di compilazione semplici</a>
</span>
</dt>
<dt>
<span class="section">
<a href="first.it.html#portable">2.5. Sistemi di compilazione portabili più utilizzati</a>
</span>
</dt>
<dt>
<span class="section">
<a href="first.it.html#namever">2.6. Nome e versione del pacchetto</a>
</span>
</dt>
<dt>
<span class="section">
<a href="first.it.html#dh-make">2.7. Configurare <span class="command"><strong>dh_make</strong></span></a>
</span>
</dt>
<dt>
<span class="section">
<a href="first.it.html#non-native-dh-make">2.8. Il primo pacchetto non nativo per Debian</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>
Iniziamo a creare un pacchetto (o, meglio ancora, adottiamone uno già
esistente).
</p>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="workflow"/>2.1. Flusso di lavoro per la costruzione dei pacchetti Debian</h2>
</div>
</div>
</div>
<p>
Se si sta facendo un pacchetto Debian con un programma, il flusso di lavoro
tipico per la costruzione di pacchetti Debian comporta la generazione di
diversi file indicati in modo specifico per ogni passo come segue:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>Procuriamoci una copia del programma, di solito in formato tar compresso.</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal"><em class="replaceable"><code>pacchetto</code></em>-<em class="replaceable"><code>versione</code></em>.tar.gz</code>
</li>
</ul>
</div>
</li>
<li class="listitem">
<p>
Aggiungiamo le modifiche specifiche per il pacchetto Debian del programma,
nella directory <code class="filename">debian</code>, e creiamo un archivio sorgente
non nativo (ovvero con l'insieme di file di input utilizzati per la
creazione del pacchetto) in formato <code class="literal">3.0 (quilt)</code>.
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal"><em class="replaceable"><code>pacchetto</code></em>_<em class="replaceable"><code>versione</code></em>.orig.tar.gz</code>
</li>
<li class="listitem">
<code class="literal"><em class="replaceable"><code>pacchetto</code></em>_<em class="replaceable"><code>versione</code></em>-<em class="replaceable"><code>revisione</code></em>.debian.tar.gz</code>
<a href="#ftn.idm429" class="footnote" id="idm429">
<sup class="footnote">[4]</sup>
</a>
</li>
<li class="listitem">
<code class="literal"><em class="replaceable"><code>pacchetto</code></em>_<em class="replaceable"><code>versione</code></em>-<em class="replaceable"><code>revisione</code></em>.dsc</code>
</li>
</ul>
</div>
</li>
<li class="listitem">
<p>
Costruiamo i pacchetti binari Debian, che sono normali pacchetti
installabili nel formato <code class="literal">.deb</code> (o nel formato
<code class="literal">.udeb</code>, usato dall'installer Debian) dal sorgente del
pacchetto Debian.
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal"><em class="replaceable"><code>pacchetto</code></em>_<em class="replaceable"><code>versione</code></em>-<em class="replaceable"><code>revisione</code></em>_<em class="replaceable"><code>arch</code></em>.deb</code>
</li>
</ul>
</div>
</li>
</ul>
</div>
<p>
Si prega di notare che il carattere di separazione tra
<code class="literal"><em class="replaceable"><code>pacchetto</code></em></code> e
<code class="literal"><em class="replaceable"><code>versione</code></em></code> è stato modificato da
<code class="literal">-</code> (trattino) nel nome dell'archivio, a
<code class="literal">_</code> (trattino basso) nel nome del pacchetto Debian.
</p>
<p>
Nel file di nomi di cui sopra, sostituire la parte relativa al
<code class="literal"><em class="replaceable"><code>pacchetto</code></em></code> con il <span class="strong"><strong>nome del pacchetto</strong></span>, la
<code class="literal"><em class="replaceable"><code>versione</code></em></code> con la <span class="strong"><strong>versione originale</strong></span>, la
<code class="literal"><em class="replaceable"><code>revisione</code></em></code> con la <span class="strong"><strong>revisione Debian</strong></span>, e l'<code class="literal"><em class="replaceable"><code>
architettura</code></em></code> con l'<span class="strong"><strong>architettura del pacchetto</strong></span>, come definito nel
manuale delle Policy di Debian. <a href="#ftn.idm472" class="footnote" id="idm472"><sup class="footnote">[5]</sup></a>
</p>
<p>
Ogni passo di questo schema è spiegato con esempi dettagliati nelle sezioni
successive.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="choose"/>2.2. Scegliamo il programma</h2>
</div>
</div>
</div>
<p>
Probabilmente avete già scelto il pacchetto da creare. La prima cosa da fare
è controllare se il pacchetto è già presente negli archivi della
distribuzione, utilizzando i seguenti strumenti:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>il comando <span class="command"><strong>aptitude</strong></span></p>
</li>
<li class="listitem">
<p>la pagina web <a class="ulink" href="http://www.debian.org/distrib/packages">Pacchetti Debian</a></p>
</li>
<li class="listitem">
<p>the <a class="ulink" href="https://tracker.debian.org/">Debian Package Tracker</a> web page</p>
</li>
</ul>
</div>
<p>
Se il pacchetto esiste già, bene, basta installarlo! :-) Se dovesse essere
<span class="strong"><strong>orfano</strong></span> (cioè, se il maintainer è <a class="ulink" href="http://qa.debian.org/">Debian QA Group</a>), lo si può prendere in carico se è
ancora disponibile. Si può adottare anche un pacchetto per il quale il suo
manutentore ha presentato una richiesta di adozione (<span class="strong"><strong>RFA</strong></span>).<a href="#ftn.idm497" class="footnote" id="idm497"><sup class="footnote">[6]</sup></a>
</p>
<p>
Ci sono diverse risorse per controllare lo stato di appartenenza dei
pacchetti:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>Il comando <span class="command"><strong>wnpp-alert</strong></span> dal pacchetto <code class="systemitem">devscripts</code></p>
</li>
<li class="listitem">
<p> <a class="ulink" href="http://www.debian.org/devel/wnpp/">Work-Needing and Prospective Packages</a> </p>
</li>
<li class="listitem">
<p> <a class="ulink" href="http://bugs.debian.org/wnpp">Registri di Debian delle segnalazioni dei bug: bug
nello pseudo-pacchetto <code class="systemitem">wnpp</code> in
<code class="literal">unstable</code></a> </p>
</li>
<li class="listitem">
<p> <a class="ulink" href="http://wnpp.debian.net/">Pacchetti Debian che hanno bisogno d'amore</a> </p>
</li>
<li class="listitem">
<p> <a class="ulink" href="http://wnpp-by-tags.debian.net/">Sfogliare i bug di <code class="systemitem">wnpp</code> basati su debtags</a> </p>
</li>
</ul>
</div>
<p>
Come nota a margine, è importante sottolineare che Debian ha già i pacchetti
per la maggior parte dei programmi e che il numero di pacchetti presenti
nell'archivio Debian è molto più grande di quello dei contribuenti con
permessi di caricamento. Pertanto, i contributi sui pacchetti già presenti
in archivio sono molto più apprezzati dagli altri sviluppatori (ed è molto
più probabile che si ottenga una sponsorizzazione). <a href="#ftn.idm522" class="footnote" id="idm522"><sup class="footnote">[7]</sup></a>. Si può contribuire in diversi modi:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
adottando dei pacchetti orfani, ma ancora attivamente utilizzati
</p>
</li>
<li class="listitem">
<p>
entrando a far parte dei <a class="ulink" href="http://wiki.debian.org/Teams">team di
pacchettizzazione</a>
</p>
</li>
<li class="listitem">
<p>
aiutando nella risoluzione dei bug di pacchetti molto popolari
</p>
</li>
<li class="listitem">
<p>
preparando <a class="ulink" href="http://www.debian.org/doc/developers-reference/pkgs.html#nmu-qa-upload">QA o caricando NMU</a>
</p>
</li>
</ul>
</div>
<p>
Appena ci si sente in grado di adottare un pacchetto, bisogna scaricare i
sorgenti (con qualcosa tipo <code class="literal">apt-get source
<em class="replaceable"><code>pacchetto</code></em></code>) ed esaminarli. Questo
documento purtroppo non include tutte le informazioni che riguardano
l'adozione dei pacchetti. Fortunatamente non sarà difficile capire come
funziona il pacchetto dal momento che qualcuno avrà già effettuato la
configurazione iniziale. Continua comunque a leggere, molti dei
suggerimenti qui di seguito saranno utili per il nostro scopo.
</p>
<p>
Se il pacchetto è nuovo, e si pensa che sarebbe bello entrare a far parte di
Debian, ecco come procedere:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
Prima di tutto bisogna capire se il programma funziona in modo corretto, e
averlo provato per almeno un po' di tempo e dimostrarne l'utilità.
</p>
</li>
<li class="listitem">
<p>
Bisogna controllare nella <a class="ulink" href="http://www.debian.org/devel/wnpp/being_packaged">lista dei
pacchetti sui quali si lavora</a> che nessun altro stia lavorando sullo
stesso pacchetto. Se nessuno ci sta lavorando, si può segnalare un bug di
tipo ITP (Intent To Package) allo pseudo-pacchetto <code class="systemitem">wnpp</code> usando il programma
<span class="command"><strong>reportbug</strong></span>. Se qualcuno ci sta lavorando e si ritiene
necessario si potrebbe contattare il maintainer. Altrimenti — si
potrebbe trovare un altro programma interessante che è non manutenuto.
</p>
</li>
<li class="listitem">
<p>
Il programma <span class="strong"><strong>deve avere una licenza</strong></span>.
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
I programmi nella sezione <code class="literal">main</code>, <span class="strong"><strong>devono essere completamente compatibili con le Linee Guida per
il Software Libero Debian (DFSG, Debian Free Software Guidelines)</strong></span>
(vedere <a class="ulink" href="http://www.debian.org/social_contract#guidelines">DSFG</a>) e <span class="strong"><strong>non
devono richiede nessun pacchetto che non sia presente nella sezione
<code class="literal">main</code></strong></span>, per la compilazione o l'esecuzione.
Questo è il caso preferito.
</p>
</li>
<li class="listitem">
<p>
I programmi nella sezione <code class="literal">contrib</code>, devono essere conformi
alle DFSG, ma potrebbero richiedere, per la compilazione o l'esecuzione, un
pacchetto che non è presente nella sezione <code class="literal">main</code>.
</p>
</li>
<li class="listitem">
<p>
I programmi nella sezione <code class="literal">non-free</code>, possono non essere
conformi alle DFSG, ma <span class="strong"><strong>devono poter essere
distribuibili</strong></span>.
</p>
</li>
<li class="listitem">
<p>
Se non si è sicuri su quale sezione il pacchetto dovrebbe essere incluso, si
può mandare il testo della licenza alla mailing list <a class="ulink" href="http://lists.debian.org/debian-legal/">debian-legal@lists.debian.org</a> e chiedere
consigli.
</p>
</li>
</ul>
</div>
</li>
<li class="listitem">
<p>
Il programma <span class="strong"><strong>non</strong></span> dovrebbe introdurre
problemi si sicurezza e di manutenzione al il sistema Debian.
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
Il programma dovrebbe essere ben documentato e il suo codice facilmente
comprensibile (ad es. non offuscato).
</p>
</li>
<li class="listitem">
<p>
Si dovrebbe contattare l'autore o gli autori del programma per verificare
che siano d'accordo con la sua pacchettizzazione. È importante essere in
grado di consultarsi con l'autore/i sul programma nel caso di problemi
specifici del programma, per questo è meglio non provare a pacchettizzare
programmi non più manutenuti.
</p>
</li>
<li class="listitem">
<p>
Il programma <span class="strong"><strong>non</strong></span> dovrebbe certamente
girare come setuid root, o meglio, non dovrebbe per niente richiedere di
essere setuid o setgid.
</p>
</li>
<li class="listitem">
<p>
Il programma non dovrebbe essere un daemon, o essere installato nelle
directory <code class="filename">*/sbin</code>, o aprire una porta come root.
</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<p>
Ovviamente queste sono solo misure di sicurezza, fatte per salvarti dall'ira
degli utenti se si commette qualche errore in qualche daemon setuid…
Una volta acquisita esperienza nella pacchettizzazione, sarai in grado di
creare pure quel tipo di pacchetti.
</p>
<p>
Visto che si è alle prime armi come maintainer, si consiglia di acquisire un
po' d'esperienza creando dei pacchetti semplici cercando di evitare quelli
più complicati.
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>Pacchetti semplici</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>pacchetto binario singolo, arch = all (collezione di dati, come le immagini
di sfondo)</p>
</li>
<li class="listitem">
<p>pacchetto binario singolo, arch = all (eseguibili scritti in un linguaggio
interpretato come lo shell POSIX)</p>
</li>
</ul>
</div>
</li>
<li class="listitem">
<p>Pacchetti di media difficoltà</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>pacchetto binario singolo, arch = any (binari ELF eseguibili compilati da
linguaggi come C e C++)</p>
</li>
<li class="listitem">
<p>pacchetti binari multipli, arch = any + all (pacchetti per binari ELF
eseguibili + documentazione)</p>
</li>
<li class="listitem">
<p>sorgente originale in un formato diverso da <code class="filename">tar.gz</code> o
<code class="filename">tar.bz2</code></p>
</li>
<li class="listitem">
<p>l'archivio dei sorgenti originale ha contenuti non distribuibili</p>
</li>
</ul>
</div>
</li>
<li class="listitem">
<p>Pacchetti complessi</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>pacchetto di un modulo di un interprete utilizzato da altri pacchetti</p>
</li>
<li class="listitem">
<p>libreria ELF generica utilizzata da altri pacchetti</p>
</li>
<li class="listitem">
<p>pacchetti binari multipli che includono un pacchetto di una libreria ELF</p>
</li>
<li class="listitem">
<p>pacchetto con molteplici sorgenti originali</p>
</li>
<li class="listitem">
<p>pacchetti di moduli del kernel</p>
</li>
<li class="listitem">
<p>pacchetti di patch del kernel</p>
</li>
<li class="listitem">
<p>ogni pacchetto con degli script di manutenzione non banali</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<p>
Creare pacchetti complessi non è troppo difficile, ma richiede un po' più di
conoscenza. Si dovrebbe cercare una guida specifica per ogni caratteristica
complessa. Ad esempio, alcuni linguaggi hanno dei loro documenti con le loro
linee guida:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
<a class="ulink" href="http://www.debian.org/doc/packaging-manuals/perl-policy/">Perl policy</a>
</p>
</li>
<li class="listitem">
<p>
<a class="ulink" href="http://www.debian.org/doc/packaging-manuals/python-policy/">Python policy</a>
</p>
</li>
<li class="listitem">
<p>
<a class="ulink" href="http://www.debian.org/doc/packaging-manuals/java-policy/">Java policy</a>
</p>
</li>
</ul>
</div>
<p>
C'è un altro vecchio detto latino che dice: <span class="emphasis"><em>fabricando fit
faber</em></span> (la pratica rende perfetti). Si tratta di una pratica
<span class="emphasis"><em>vivamente</em></span> consigliata, sperimentate tutte le fasi di
pacchettizzazione Debian con un pacchetto semplice durante la lettura di
questo tutorial. Un archivio compresso banale come
<code class="filename">hello-sh-1.0.tar.gz</code> creato come segue, può offrire un
buon punto di partenza:<a href="#ftn.idm638" class="footnote" id="idm638"><sup class="footnote">[8]</sup></a>
</p>
<pre class="screen">
$ mkdir -p hello-sh/hello-sh-1.0; cd hello-sh/hello-sh-1.0
$ cat > hello <<EOF
#!/bin/sh
# (C) 2011 Foo Bar, GPL2+
echo "Hello!"
EOF
$ chmod 755 hello
$ cd ..
$ tar -cvzf hello-sh-1.0.tar.gz hello-sh-1.0
</pre>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="getit"/>2.3. Prendere il programma e provarlo</h2>
</div>
</div>
</div>
<p>
La prima cosa da fare è trovare e scaricare il codice sorgente originale del
programma. Supponendo che si è recuperato il file dal sito web
dell'autore. Generalmente il codice sorgente dei programmi liberi per Unix
e derivati sono in formato <span class="command"><strong>tar</strong></span>+<span class="command"><strong>gzip</strong></span>
con estensione <code class="filename">.tar.gz</code>, oppure in formato
<span class="command"><strong>tar</strong></span>+<span class="command"><strong>bzip2</strong></span> con estensione
<code class="filename">.tar.bz2</code>. Di solito, questi file, contengono la
sottodirectory dal nome
<code class="filename"><em class="replaceable"><code>pacchetto</code></em>-<em class="replaceable"><code>versione</code></em></code>
con tutti i sorgenti.
</p>
<p>
Se è presente un sistema di controllo di versione (VCS) come Git, Subversion
o CVS, è possibile scaricare l'ultima versione del codice sorgente con
<code class="literal">git clone</code>, <code class="literal">svn co</code>, o <code class="literal">cvs
co</code> e comprimerlo in formato
<span class="command"><strong>tar</strong></span>+<span class="command"><strong>gzip</strong></span> utilizzando l'opzione
<code class="literal">--exclude-vcs</code>.
</p>
<p>
Se il codice sorgente è in qualche altro formato di archiviazione (per
esempio, con estensione <code class="filename">.Z</code> o
<code class="filename">.zip</code><a href="#ftn.idm670" class="footnote" id="idm670"><sup class="footnote">[9]</sup></a>),
scompattarlo con i programmi appropriati, e ricomprimerlo.
</p>
<p>
Se il sorgente del programma viene fornito con alcuni contenuti che non sono
conformi con il DFSG, si dovrebbe scompattarlo, rimuovere questi contenuti e
ricomprimerlo con una versione modificata dei sorgenti originali contenenti
<code class="literal">dfsg</code> .
</p>
<p>
A titolo di esempio, verrà utilizzato il programma
<span class="command"><strong>gentoo</strong></span>, un gestore file grafico basato su
GTK+.<a href="#ftn.idm677" class="footnote" id="idm677"><sup class="footnote">[10]</sup></a>
</p>
<p>
È buona regola creare una sottodirectory nella directory home e nominarla
<code class="filename">debian</code> o <code class="filename">deb</code> o qualsiasi altro
nome appropriato (ad es. in questo caso <code class="filename">~/gentoo</code>
andrebbe più che bene). Scaricare l'archivio e scompattarlo (con il comando
<code class="literal">tar xzf gentoo-0.9.12.tar.gz</code>). Bisogna assicurarsi che
non ci siano errori, per quanto in apparenza
<span class="emphasis"><em>irrilevanti</em></span>, perché potrebbero causare problemi
nell'estrazione dell'archivio sul sistema di altre persone, alcuni strumenti
di estrazione a volte ignorano queste anomalie. Nella console dovrebbe
esserci quanto segue:
</p>
<pre class="screen">
$ mkdir ~/gentoo ; cd ~/gentoo
$ wget http://<em class="replaceable"><code>www.example.org</code></em>/gentoo-0.9.12.tar.gz
$ tar xvzf gentoo-0.9.12.tar.gz
$ ls -F
gentoo-0.9.12/
gentoo-0.9.12.tar.gz
</pre>
<p>
A questo punto si avrà un'altra sottodirectory, dal nome
<code class="filename">gentoo-0.9.12</code>. Spostarsi in questa directory e leggere
<span class="emphasis"><em>attentamente</em></span> la documentazione fornita. Di solito si
avranno dei file come <code class="filename">README*</code>,
<code class="filename">INSTALL*</code>, <code class="filename">*.lsm</code> o
<code class="filename">*.html</code>. È necessario trovare istruzioni su come
compilare e installare correttamente il programma (si potrebbe supporre di
installare il programma nella directory <code class="filename">/usr/local/bin</code>,
ma questo non è il comportamento corretto, tratteremo l'argomento più avanti
<a class="xref" href="modify.it.html#destdir" title="3.3. Installazione dei file nei loro percorsi">Sezione 3.3, «Installazione dei file nei loro percorsi»</a>).
</p>
<p>
Si dovrebbe iniziare la pacchettizzazione con la directory dei sorgenti
completamente ripulita, o semplicemente partendo da una nuova estrazione
dall'archivio dei sorgenti.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="simplemake"/>2.4. Sistemi di compilazione semplici</h2>
</div>
</div>
</div>
<p>
I programmi più semplici sono dotati di un file
<code class="filename">Makefile</code>, e possono essere compilati semplicemente con
il comando <code class="literal">make</code>.<a href="#ftn.idm703" class="footnote" id="idm703"><sup class="footnote">[11]</sup></a>
Alcuni supportano <code class="literal">make check</code>, che esegue dei controlli
automatici. Per installare il programma nella directory di destinazione, di
solito basta eseguire <code class="literal">make install</code>.
</p>
<p>
Adesso si provi a compilare ed eseguire il programma, assicurandosi che
funzioni correttamente e che niente sia andato storto durante
l'installazione o l'esecuzione.
</p>
<p>
Di solito, per ripulire la directory di compilazione, si usa il comando
<code class="literal">make clean</code> (o meglio ancora <code class="literal">make
distclean</code>). Talvolta c'è anche il comando <code class="literal">make
uninstall</code> che serve a rimuovere tutti i file installati.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="portable"/>2.5. Sistemi di compilazione portabili più utilizzati</h2>
</div>
</div>
</div>
<p>
Molti programmi liberi sono scritti utilizzando i linguaggi di
programmazione <a class="ulink" href="http://en.wikipedia.org/wiki/C_(programming_language)">C</a> e <a class="ulink" href="http://en.wikipedia.org/wiki/C++">C++</a>. Molti di questi utilizzano Autotools o CMake per
essere portabili su diverse piattaforme. Questi strumenti vengono
utilizzati per generare il <code class="filename">Makefile</code> e altri file
sorgenti necessari. Dopo di questo, i programmi vengono compilati
utilizzando il solito <code class="literal">make; make install</code>.
</p>
<p>
<a class="ulink" href="http://en.wikipedia.org/wiki/GNU_build_system">Autotools</a> è il sistema di
compilazione della GNU, che comprendere <a class="ulink" href="http://en.wikipedia.org/wiki/Autoconf">Autoconf</a>, <a class="ulink" href="http://en.wikipedia.org/wiki/Automake">Automake</a>,
<a class="ulink" href="http://en.wikipedia.org/wiki/GNU_Libtool">Libtool</a>, e <a class="ulink" href="http://en.wikipedia.org/wiki/GNU_gettext">gettext</a>. Per capire meglio ciò che avviene, si
possono leggere i seguenti file sorgenti: <code class="filename">configure.ac</code>,
<code class="filename">Makefile.am</code>, e <code class="filename">Makefile.in</code>.
<a href="#ftn.idm730" class="footnote" id="idm730"><sup class="footnote">[12]</sup></a>
</p>
<p>
Il primo passo del flusso di lavoro degli Autotools consiste solitamente
nell'esecuzione del comando <code class="literal">autoreconf -i -f</code> per i
sorgenti che verranno successivamente distribuiti insieme ai file generati.
</p>
<pre class="screen">
configure.ac-----+-> autoreconf -+-> configure
Makefile.am -----+ | +-> Makefile.in
src/Makefile.am -+ | +-> src/Makefile.in
| +-> config.h.in
automake
aclocal
aclocal.m4
autoheader
</pre>
<p>
La modifica dei file <code class="filename">configure.ac</code> e
<code class="filename">Makefile.am</code> richiede una minima conoscenza di
<span class="command"><strong>autoconf</strong></span> e <span class="command"><strong>automake</strong></span>.
Vedere<code class="literal">info autoconf</code> e <code class="literal">info automake</code>.
</p>
<p>
Il passo successivo da compiere con Autotools, di solito, consiste nel
procurarsi il sorgente del programma e nel compilarlo nella directory
<span class="command"><strong><em class="replaceable"><code>binary</code></em></strong></span> tramite l'esecuzione
dei comandi <code class="literal">./configure && make</code> all'interno della
directory dei sorgenti stessi.
</p>
<pre class="screen">
Makefile.in -----+ +-> Makefile -----+-> make -> <em class="replaceable"><code>binary</code></em>
src/Makefile.in -+-> ./configure -+-> src/Makefile -+
config.h.in -----+ +-> config.h -----+
|
config.status -+
config.guess --+
</pre>
<p>
Si possono modificare molte cose nel file <code class="filename">Makefile</code>,
come la posizione predefinita di installazione dei file utilizzando
l'opzione <span class="command"><strong>./configure --prefix=/usr</strong></span>.
</p>
<p>
Nonostante non sia richiesto, l'aggiornamento di
<code class="filename">configure</code> e degli altri file con <code class="literal">autoreconf -i
-f</code> può migliorare la compatibilità del sorgente. <a href="#ftn.idm756" class="footnote" id="idm756"><sup class="footnote">[13]</sup></a>
</p>
<p>
<a class="ulink" href="http://en.wikipedia.org/wiki/CMake">CMake</a> è un alternativo sistema di
compilazione. Per conoscerlo meglio si può leggere il file
<code class="filename">CMakeLists.txt</code>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="namever"/>2.6. Nome e versione del pacchetto</h2>
</div>
</div>
</div>
<p>
Se il sorgente del programma originale è nominato
<code class="filename">gentoo-0.9.12.tar.gz</code>, si può usare
<code class="literal">gentoo</code> come <span class="strong"><strong>nome
pacchetto</strong></span> e <code class="literal">0.9.12</code> come <span class="strong"><strong>versione del programma originale</strong></span>. Queste stringhe
saranno utilizzate nel file <code class="filename">debian/changelog</code> come
vedremo più avanti nel <a class="xref" href="dreq.it.html#changelog" title="4.3. changelog">Sezione 4.3, «<code class="filename">changelog</code>»</a>.
</p>
<p>
Sebbene questo semplice approccio il più delle volte funzioni, può essere
necessario modificare il <span class="strong"><strong>nome pacchetto</strong></span> e
la <span class="strong"><strong>versione del programma originale</strong></span>
rinominando il sorgente originale in qualcosa conforme alla policy di Debian
ed alle convenzioni esistenti.
</p>
<p>
È necessario scegliere il <span class="strong"><strong>nome del
pacchetto</strong></span> utilizzando solo lettere minuscole
(<code class="literal">a-z</code>), cifre (<code class="literal">0-9</code>), il segno più
(<code class="literal">+</code>) e il segno meno (<code class="literal">-</code>), e il punto (
<code class="literal">.</code> ). Il nome deve essere di almeno due caratteri, deve
iniziare con un carattere alfanumerico, e non deve essere la stesso di
quelli già esistenti. È consigliabile mantenere la lunghezza intorno ai 30
caratteri. <a href="#ftn.idm783" class="footnote" id="idm783"><sup class="footnote">[14]</sup></a>
</p>
<p>
Se il sorgente originale usa un nome troppo generico come
<code class="literal">test-suite</code> è consigliabile rinominarlo, in modo da
identificare meglio il suo contenuto e per non rischiare di sporcare il
namespace. <a href="#ftn.idm788" class="footnote" id="idm788"><sup class="footnote">[15]</sup></a>
</p>
<p>
Si consiglia di scegliere un nome della <span class="strong"><strong>versione del
programma originale</strong></span> contenente solo caratteri alfanumerici
(<code class="literal">0-9A-Za-z</code>), il segno più (<code class="literal">+</code>), il
simbolo tilde (<code class="literal">~</code>), e il punto (<code class="literal">.</code>). Il
nome deve iniziare con una cifra (<code class="literal">0-9</code>). <a href="#ftn.idm798" class="footnote" id="idm798"><sup class="footnote">[16]</sup></a> È consigliabile, se possibile, mantenere una
lunghezza entro gli 8 caratteri. <a href="#ftn.idm800" class="footnote" id="idm800"><sup class="footnote">[17]</sup></a>
</p>
<p>
Se il programma originale non utilizza un normale sistema di versioning,
come ad esempio <code class="literal">2.30.32</code>, ma utilizza qualche tipo di
data, come <code class="literal">11Apr29</code>, un stringa con un codice casuale, o
un valoro di hash di un VCS, bisogna assicurarsi di rimuoverli dalla
<span class="strong"><strong>versione originale</strong></span>. Queste informazioni
possono essere registrate nel file <code class="filename">debian/changelog</code>.
Se si ha bisogno di inventare una stringa di versione, bisogna utilizzare il
formato <code class="literal">YYYYMMDD</code>, ad esempio <code class="literal">20110429</code>
come versione originale. Questo fa in modo che <span class="command"><strong>dpkg</strong></span>
interpreti in modo corretto le versioni successive del programma, per gli
aggiornamenti. Se ci si vuole assicurare, in futuro, una transazione
indolore ad un normale sistema di versioning, come <code class="literal">0.1</code>,
si utilizzi il formato <code class="literal">0~YYMMDD</code>, ed esempio
<code class="literal">0~110429</code>, anzichè la versione originale.
</p>
<p>
Le stringhe di versione <a href="#ftn.idm815" class="footnote" id="idm815"><sup class="footnote">[18]</sup></a> possono essere
confrontate usando <span class="citerefentry"><span class="refentrytitle">dpkg</span>(1)</span> come segue:
</p>
<pre class="screen">
$ dpkg --compare-versions <em class="replaceable"><code>ver1</code></em> <em class="replaceable"><code>op</code></em> <em class="replaceable"><code>ver2</code></em>
</pre>
<p>
Le regole per il confronto delle versioni possono essere riassunte in questo
modo:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>Le stringhe sono confrontate dall'inizio alla fine (da sinistra verso
destra).</p>
</li>
<li class="listitem">
<p>Le lettere hanno più priorità delle cifre.</p>
</li>
<li class="listitem">
<p>I numeri sono confrontati come interi.</p>
</li>
<li class="listitem">
<p>Le lettere sono confrontate in ordine di codice ASCII.</p>
</li>
<li class="listitem">
<p>Ci sono regole speciali per il punto (<code class="literal">.</code>), il segno più
(<code class="literal">+</code>), e il carattere tilde (<code class="literal">~</code>), eccole
descritte:</p>
<p>
<code class="literal">0.0</code> < <code class="literal">0.5</code> <
<code class="literal">0.10</code> < <code class="literal">0.99</code> <
<code class="literal">1</code> < <code class="literal">1.0~rc1</code> <
<code class="literal">1.0</code> < <code class="literal">1.0+b1</code> <
<code class="literal">1.0+nmu1</code> < <code class="literal">1.1</code> <
<code class="literal">2.0</code>
</p>
</li>
</ul>
</div>
<p>
Un esempio di caso intricato si ha, ad esempio, quando una è presente una
pre-release RC come
<code class="filename">gentoo-0.9.12-ReleaseCandidate-99.tar.gz</code> per il
programma <code class="filename">gentoo-0.9.12.tar.gz</code>. In questo caso è
necessario assicurarsi che l'aggiornamento funzioni correttamente,
rinominando il sorgente originale
<code class="filename">gentoo-0.9.12~rc99.tar.gz</code>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="dh-make"/>2.7. Configurare <span class="command"><strong>dh_make</strong></span></h2>
</div>
</div>
</div>
<p>
Una delle prime cose da fare è impostare le variabili d'ambiente della shell
<code class="literal">$DEBEMAIL</code> e <code class="literal">$DEBFULLNAME</code> visto che
molti strumenti di gestione di Debian usano queste variabili per recuperare
il nome e l'email da utilizzare nei pacchetti. <a href="#ftn.idm873" class="footnote" id="idm873"><sup class="footnote">[19]</sup></a>
</p>
<pre class="screen">
$ cat >>~/.bashrc <<EOF
DEBEMAIL="your.email.address@example.org"
DEBFULLNAME="Firstname Lastname"
export DEBEMAIL DEBFULLNAME
EOF
$ . ~/.bashrc
</pre>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title"><a id="non-native-dh-make"/>2.8. Il primo pacchetto non nativo per Debian</h2>
</div>
</div>
</div>
<p>
I pacchetti classici per Debian sono pacchetti non-nativi, ovvero non
specificamente pensati per debian, come ad esempio qualche programma di
manutenzione per Debian. Se si desidera creare un pacchetto Debian
non-nativo del programma con il sorgente
<code class="filename">gentoo-0.9.12.tar.gz</code> si può utilizzare il programma
<span class="command"><strong>dh_make</strong></span> come segue:
</p>
<pre class="screen">
$ cd ~/gentoo
$ wget http://example.org/gentoo-0.9.12.tar.gz
$ tar -xvzf gentoo-0.9.12.tar.gz
$ cd gentoo-0.9.12
$ dh_make -f ../gentoo-0.9.12.tar.gz
</pre>
<p>
Ovviamente, si deve sostituire il nome del file con il nome dell'archivio
dei sorgenti originali. <a href="#ftn.idm884" class="footnote" id="idm884"><sup class="footnote">[20]</sup></a> Vedere
<span class="citerefentry"><span class="refentrytitle">dh_make</span>(8)</span> per i dettagli.
</p>
<p>
Verranno visualizzate alcune informazioni e verrà chiesto che tipo di
pacchetto creare. Gentoo è un pacchetto binario singolo — crea un
solo binario, e quindi un solo file <code class="filename">.deb</code> — per
cui si dovrà selezionare la prima opzione (con il tasto
<code class="literal">s</code>), controllare le informazioni sullo schermo e
confermare la scelta con
<code class="literal"><em class="replaceable"><code>ENTER</code></em></code>. <a href="#ftn.idm898" class="footnote" id="idm898"><sup class="footnote">[21]</sup></a>
</p>
<p>
L'esecuzione di <span class="command"><strong>dh_make</strong></span>, creerà una copia dell'archivio
originale del programma, come nome
<code class="filename">gentoo_0.9.12.orig.tar.gz</code>, nella directory superiore,
per consentire, più avanti, la creazione di un pacchetto Debian sorgente
non-nativo con nome <code class="filename">debian.tar.gz</code>:
</p>
<pre class="screen">
$ cd ~/gentoo ; ls -F
gentoo-0.9.12/
gentoo-0.9.12.tar.gz
gentoo_0.9.12.orig.tar.gz
</pre>
<p>
Si presti attenzione a due caratteristiche chiave presenti nel nome del file
<code class="filename">gentoo_0.9.12.orig.tar.gz</code>:
</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
Il nome del pacchetto e la versione sono separati da <code class="literal">_</code>
(trattino basso).
</p>
</li>
<li class="listitem">
<p>
La stringa <code class="filename">.orig</code> è inserita prima di
<code class="filename">.tar.gz</code>.
</p>
</li>
</ul>
</div>
<p>
Si dovrebbe aver notato che nella sottodirectory dei sorgenti
<code class="filename">debian</code> sono stati creati molti modelli di file. Questo
verrà trattato in <a class="xref" href="dreq.it.html" title="Capitolo 4. File richiesti nella directory debian">Capitolo 4, <em>File richiesti nella directory <code class="filename">debian</code></em></a> e <a class="xref" href="dother.it.html" title="Capitolo 5. Altri file nella directory debian">Capitolo 5, <em>Altri file nella directory <code class="filename">debian</code></em></a>.
Dovreste aver capito che la pacchettizzazione non è un processo automatico.
È necessario modificare il sorgente originale per Debian (come descritto in
<a class="xref" href="modify.it.html" title="Capitolo 3. Modificare i sorgenti">Capitolo 3, <em>Modificare i sorgenti</em></a>). Dopo di questo, è necessario creare i pacchetti
Debian in maniera appropriata (<a class="xref" href="build.it.html" title="Capitolo 6. Costruzione del pacchetto">Capitolo 6, <em>Costruzione del pacchetto</em></a>), provarli <a class="xref" href="checkit.it.html" title="Capitolo 7. Controllare il pacchetto per errori">Capitolo 7, <em>Controllare il pacchetto per errori</em></a>, e caricarli (<a class="xref" href="upload.it.html" title="Capitolo 9. Caricamento del pacchetto">Capitolo 9, <em>Caricamento del pacchetto</em></a>). Tutti i
passaggi verranno approfonditi in seguito.
</p>
<p>
Se accidentalmente viene cancellato qualche modello di file mentre ci si
lavora, è possibile recuperarlo eseguendo <span class="command"><strong>dh_make</strong></span> con
l'opzione <code class="literal">--addmissing</code> nella directory dei sorgenti del
pacchetto Debian.
</p>
<p>
L'aggiornamento di un pacchetto già esistente può diventare complicato,
perché è possibile che si siano usate vecchie tecniche di
pacchettizzazione. Per adesso, è consigliabile, concentrarsi sulla
creazione di nuovi pacchetti per imparare le basi. Si tornerà ad
approfondire l'argomento più avanti su <a class="xref" href="update.it.html" title="Capitolo 8. Aggiornamento del pacchetto">Capitolo 8, <em>Aggiornamento del pacchetto</em></a>.
</p>
<p>
Si tenga presente che non è necessario che il file dei sorgenti contenga
qualsiasi sistema di creazione, discusso in <a class="xref" href="first.it.html#simplemake" title="2.4. Sistemi di compilazione semplici">Sezione 2.4, «Sistemi di compilazione semplici»</a> and
<a class="xref" href="first.it.html#portable" title="2.5. Sistemi di compilazione portabili più utilizzati">Sezione 2.5, «Sistemi di compilazione portabili più utilizzati»</a>. Potrebbe essere solo una collezione di file
grafici, ecc. L'installazione di questi file può essere effettuata
utilizzando solamente i file di configurazione di <code class="systemitem">debhelper</code>, come
<code class="filename">debian/install</code> (vedere <a class="xref" href="dother.it.html#install" title="5.11. install">Sezione 5.11, «<code class="filename">install</code>»</a>).
</p>
</div>
<div class="footnotes">
<br/>
<hr/>
<div id="ftn.idm429" class="footnote">
<p><a href="#idm429" class="para"><sup class="para">[4] </sup></a>Per gli archivi non nativi nel vecchio formato <code class="literal">1.0</code>, viene
utilizzato il nome
<code class="literal"><em class="replaceable"><code>pacchetto</code></em>_<em class="replaceable"><code>versione</code></em>-<em class="replaceable"><code>revisione</code></em>.diff.gz</code>. </p>
</div>
<div id="ftn.idm472" class="footnote">
<p><a href="#idm472" class="para"><sup class="para">[5] </sup></a> Vedere <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source">5.6.1 "Sorgente"</a>, <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Package">5.6.7 "Pacchetto"</a>, e <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version">5.6.12 "Versione"</a>. L'<span class="strong"><strong>architettura del pacchetto</strong></span> è conforme al manuale
delle Policy di Debian: <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Architecture">5.6.8
"Architettura"</a> ed è assegnata automaticamente al processo di
creazione del pacchetto.</p>
</div>
<div id="ftn.idm497" class="footnote">
<p><a href="#idm497" class="para"><sup class="para">[6] </sup></a>Per maggiori informazioni, consulta la <a class="ulink" href="http://www.debian.org/doc/devel-manuals#devref">Guida di riferimento per lo sviluppatore Debian
5.9.5. "Adottare un pacchetto"</a>.</p>
</div>
<div id="ftn.idm522" class="footnote">
<p><a href="#idm522" class="para"><sup class="para">[7] </sup></a> Detto questo, ovviamente ci sarà sempre qualche nuovo programma che vale la
pena pacchettizzare. </p>
</div>
<div id="ftn.idm638" class="footnote">
<p><a href="#idm638" class="para"><sup class="para">[8] </sup></a>Non ci si preoccupi della mancanza dei <code class="filename">Makefile</code>. È
possibile installare il programma <span class="command"><strong>hello</strong></span> semplicemente
usando il comando <span class="command"><strong>debhelper</strong></span> come in <a class="xref" href="dother.it.html#install" title="5.11. install">Sezione 5.11, «<code class="filename">install</code>»</a>, oppure modificando il sorgente originale aggiungendo un
nuovo <code class="filename">Makefile</code> con la destinazione dell'
<code class="literal">install</code> come in <a class="xref" href="modify.it.html" title="Capitolo 3. Modificare i sorgenti">Capitolo 3, <em>Modificare i sorgenti</em></a> .</p>
</div>
<div id="ftn.idm670" class="footnote">
<p><a href="#idm670" class="para"><sup class="para">[9] </sup></a> Si può utilizzare il comando <span class="command"><strong>file</strong></span> per scoprire il formato
di archiviazione. </p>
</div>
<div id="ftn.idm677" class="footnote">
<p><a href="#idm677" class="para"><sup class="para">[10] </sup></a> Il programma in questione è già stato pacchettizzato. La <a class="ulink" href="http://packages.qa.debian.org/g/gentoo.html">versione corrente</a> usa gli Autotools e la sua
costruzione e struttura è molto sostanzialmente differente dagli esempi
seguenti, che sono basati sulla versione 0.9.12.</p>
</div>
<div id="ftn.idm703" class="footnote">
<p><a href="#idm703" class="para"><sup class="para">[11] </sup></a>
Molti programmi moderni sono dotati di uno script
<code class="filename">configure</code> che, una volta eseguito, crea un
<code class="filename">Makefile</code> personalizzato per il proprio sistema.</p>
</div>
<div id="ftn.idm730" class="footnote">
<p><a href="#idm730" class="para"><sup class="para">[12] </sup></a>Autotools è troppo vasto per essere approfondito in questo piccolo
tutorial. Questa sezione ha lo scopo di fornire solo i concetti base ed i
riferimenti. Assicurarsi di leggere il <a class="ulink" href="http://www.lrde.epita.fr/~adl/autotools.html">tutorial Autotools</a> e la copia locale di
<code class="filename">/usr/share/doc/autotools-dev/README.Debian.gz</code>, se si intende usarlo.</p>
</div>
<div id="ftn.idm756" class="footnote">
<p><a href="#idm756" class="para"><sup class="para">[13] </sup></a>Si possono automatizzare queste operazioni utilizzando il pacchetto
<code class="systemitem">dh-autoreconf</code>. Vedere <a class="xref" href="dreq.it.html#customrules" title="4.4.3. Personalizzazione del file rules">Sezione 4.4.3, «Personalizzazione del file <code class="filename">rules</code>»</a>.</p>
</div>
<div id="ftn.idm783" class="footnote">
<p><a href="#idm783" class="para"><sup class="para">[14] </sup></a>Il campo di default di <span class="command"><strong>aptitude</strong></span> del nome del pacchetto è
di 30 caratteri. Oltre il 90% dei pacchetti ha un nome più piccolo di 24
caratteri.</p>
</div>
<div id="ftn.idm788" class="footnote">
<p><a href="#idm788" class="para"><sup class="para">[15] </sup></a>Se si segue la <a class="ulink" href="http://www.debian.org/doc/developers-reference/pkgs.html#newpackage">guida dello sviluppatore
Debian 5.1. "New packages"</a>, il processo di ITP di solito dovrebbe
risolvere questo tipo di problemi.</p>
</div>
<div id="ftn.idm798" class="footnote">
<p><a href="#idm798" class="para"><sup class="para">[16] </sup></a>Questa regola dovrebbe aiutare ad evitare confusione con i nome dei file.</p>
</div>
<div id="ftn.idm800" class="footnote">
<p><a href="#idm800" class="para"><sup class="para">[17] </sup></a>La lunghezza predefinita del campo "versione" di <span class="command"><strong>aptitude</strong></span>
è di 10 caratteri. Di solito le revisioni Debian precedute da un trattino
ne utilizzano 2. Per più dell'80% dei pacchetti, la lunghezza della
versione dei sorgenti originali è più piccola di 10 caratteri e la revisione
Debian è inferiore a 3 caratteri.</p>
</div>
<div id="ftn.idm815" class="footnote">
<p><a href="#idm815" class="para"><sup class="para">[18] </sup></a>La stringa della versione può essere costituita da <span class="strong"><strong>versione del programma originale</strong></span>
(<code class="literal"><em class="replaceable"><code>versione</code></em></code>), <span class="strong"><strong>revisione Debian</strong></span>
(<code class="literal"><em class="replaceable"><code>revisione</code></em></code>), oppure da
<span class="strong"><strong>versione</strong></span>
(<code class="literal"><em class="replaceable"><code>versione</code></em>-<em class="replaceable"><code>revisione</code></em></code>).
Vedere <a class="xref" href="update.it.html#newrevision" title="8.1. Nuova revisione Debian">Sezione 8.1, «Nuova revisione Debian»</a> per conoscere come incrementare il
numero della <span class="strong"><strong>revisione Debian</strong></span>.
</p>
</div>
<div id="ftn.idm873" class="footnote">
<p><a href="#idm873" class="para"><sup class="para">[19] </sup></a> Il seguente testo assume che stiate utilizzando Bash come shell di login.
Se si utilizza un'altra shell di login, come la Z shell, bisognerà usare i
suoi file di configurazione al posto di <code class="filename">~/.bashrc</code>. </p>
</div>
<div id="ftn.idm884" class="footnote">
<p><a href="#idm884" class="para"><sup class="para">[20] </sup></a> Se i sorgenti originali contengono già la directory
<code class="filename">debian</code> e il suo contenuto, si deve eseguire il comando
<span class="command"><strong>dh_make</strong></span> con l'opzione <code class="literal">--addmissing</code>.
Il nuovo formato dei sorgenti <code class="literal">3.0 (quilt)</code> è abbastanza
maturo da non danneggiare questi pacchetti. Potrebbe essere necessario
aggiornare i contenuti forniti nei sorgenti originali per il pacchetto
Debian. </p>
</div>
<div id="ftn.idm898" class="footnote">
<p><a href="#idm898" class="para"><sup class="para">[21] </sup></a> Ecco le varie opzioni: <code class="literal">s</code> che sta per binario Singolo,
<code class="literal">i</code> per Indipendente dall'architettura,
<code class="literal">m</code> per binario Multiplo, <code class="literal">l</code> per
Libreria, <code class="literal">k</code> per modulo del Kernel, <code class="literal">n</code>
per patch del kernel e <code class="literal">b</code> per <code class="systemitem">cdbs</code>. Questo documento si basa sull'uso del
comando <span class="command"><strong>dh</strong></span> (contenuto nel pacchetto <code class="systemitem">debhelper</code>) per la creazione di un pacchetto
contenente un singolo binario, verrà trattato anche il funzionamento dei
pacchetti indipendenti dall'architettura e i pacchetti con binari multipli.
Il pacchetto <code class="systemitem">cdbs</code> offre
un'infrastruttura di script alternativa al comando <span class="command"><strong>dh</strong></span> e
non rientra nell'ambito di questo documento. </p>
</div>
</div>
</div>
<div class="navfooter">
<hr/>
<table width="100%" summary="Navigation footer">
<tr>
<td align="left"><a accesskey="p" href="start.it.html"><img src="images/prev.png" alt="Indietro"/></a> </td>
<td align="center"> </td>
<td align="right"> <a accesskey="n" href="modify.it.html"><img src="images/next.png" alt="Avanti"/></a></td>
</tr>
<tr>
<td align="left" valign="top">Capitolo 1. Partire nel modo giusto </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 3. Modificare i sorgenti</td>
</tr>
</table>
</div>
</body>
</html>