<?xml version="1.0" encoding="ISO-8859-15"?>
<!DOCTYPE article PUBLIC '-//OASIS//DTD DocBook XML V4.2//EN' 
"http://docbook.org/xml/4.2/docbookx.dtd" []>
<article id="index" lang="it">
  <articleinfo>
    <title>Debian Binary Package Building HOWTO</title>
    <author>
      <firstname>Chr. Clemens</firstname>
      <surname>Lee</surname>
      <affiliation><address><email>clemens@kclee.de</email></address></affiliation>
    </author>
    <pubdate>2002-11-30, $Date: 2005/08/10 14:03:35 $</pubdate>
    <revhistory>
      <revision>
        <revnumber>4.0</revnumber>
        <date>2005-08-09</date>
        <authorinitials>ccl</authorinitials>
        <revremark>aggiornati indirizzi email e aggiunto un link alla 
traduzione Turca da Oguz Yarimtepe</revremark>
      </revision>
      <revision>
        <revnumber>2.0</revnumber>
        <date>2003-12-13</date>
        <authorinitials>ccl</authorinitials>
        <revremark>applicati i consigli di Frank Lichtenheld</revremark>
      </revision>
      <revision>
        <revnumber>1.0</revnumber>
        <date>2003-11-08</date>
        <authorinitials>ccl</authorinitials>
        <revremark>prima versione</revremark>
      </revision>
    </revhistory>
    <abstract>
      <para>
<emphasis>Questo mini-HOWTO mostra come costruire un pacchetto Debian .deb
minimale. Traduzione a cura di Hugh Hartmann (hhartmann@libero.it) e
revisione a cura di Claudio Cattazzo.</emphasis>
</para>
    </abstract>
  </articleinfo>

<sect1><title>Introduzione</title>
<para>
L'intento voluto è quello di installare il pacchetto appena creato solo
sul proprio sistema e non quello di farlo entrare nella distribuzione
ufficiale Debian. Per seguire il processo di creazione 'ufficiale', si è
pregati di studiare la <ulink
url="http://www.debian.org/doc/maint-guide/">Debian New Maintainers'
Guide</ulink>.
</para><para>
I comuni pacchetti Debian hanno un proprio pacchetto sorgente che include
il file debian/rules che automatizza i passaggi necessari alla creazione di
un pacchetto binario. Qui mostriamo solo come pacchettare un semplice script
di shell od un eseguibile dentro un piccolo pacchetto binario Debian.
</para><para>
Tra l'altro, assumo che si conosca l'uso di 'tar', 'man', cos'è un un file
'.tar.gz' e cos'è <ulink url="http://www.debian.org/">Debian</ulink>
;-), ma assumo che non si siano mai toccati programmi come 'ar' o 'dpkg'.
</para>
<sect2><title>Risorse sul web</title>
<para>
La <ulink
url="http://www.debian.org/doc/manuals/reference/reference.en.html">Debian
Reference (La guida Debian)</ulink> [NdT: <ulink
url="http://www.debian.org/doc/manuals/reference/reference.it.html">in
italiano</ulink>] fornisce un'eccellente panoramica così come informazioni
dettagliate per ogni argomento specifico di Debian.
</para><para>
Il documento ufficiale per la creazione dei propri pacchetti Debian è la
<ulink url="http://www.debian.org/doc/maint-guide/">Debian New Maintainers'
Guide</ulink>.</para></sect2></sect1>

<sect1><title>Iniziare</title>
<para>
Dalla Debian Reference 2.2.2 2002-11-30: "Il formato interno di questo
pacchetto binario Debian è descritto nella pagina di manuale deb(5). Dato
che questo formato interno è soggetto a cambiamenti (tra release maggiori di
Debian), si usi sempre dpkg-deb(8) per la manipolazione dei file .deb."
</para><para>
Dalla pagina di manuale di dpkg-deb: "dpkg-deb pacchetta, spacchetta e
fornisce informazioni riguardo gli archivi Debian. I file .deb possono
essere manipolati anche solo con <literal>ar</literal> e
<literal>tar</literal> se necessario. Si usi dpkg per installare e rimuovere
i pacchetti dal proprio sistema."
</para><para>
Diversi esempi di file .deb si possono trovare nella directory
'<literal>/var/cache/apt/archives/</literal>'. Con '<literal>dpkg-deb -I
nomepacchetto.deb</literal>' si può ottenere una panoramica generale di cosa
offre questo pacchetto in particolare. '<literal>dpkg-deb -c
nomepacchetto.deb</literal>' elenca tutti i file che verranno installati.
</para><para>

Si ottenga l'elenco del contenuto del file .deb con '<literal>ar tv
nomepacchetto.deb</literal>'. Si usi l'opzione 'x' per estrarre i file.
</para></sect1>

<sect1><title>Struttura dei pacchetti</title>
<para>
Esaminiamo un esempio di pacchetto un po' più da vicino. Per esempio il file
'<literal>parted_1.4.24-4_i386.deb</literal>' contiene questi tre file:
</para><screen>
$ ar tv parted_1.4.24-4_i386.deb
rw-r--r-- 0/0      4 Mar 28 13:46 2002 debian-binary
rw-r--r-- 0/0   1386 Mar 28 13:46 2002 control.tar.gz
rw-r--r-- 0/0  39772 Mar 28 13:46 2002 data.tar.gz
</screen><para>
Ora possiamo iniziare ad estrarre tutti i file incluso il contenuto dei file
tar.
</para>
<sect2><title>debian-binary</title>
<para>
Il contenuto di questo file è "2.0\n". Questo stabilisce la versione del
formato del file .deb. Per il formato 2.0 tutte le altre righe vengono
ignorate.
</para></sect2>
<sect2><title>data.tar.gz</title>
<para>
Il file 'data.tar.gz' contiene tutti i file che saranno installati con i
loro percorsi di destinazione: 
</para><screen>
drwxr-xr-x root/root         0 2002-03-28 13:44:57 ./
drwxr-xr-x root/root         0 2002-03-28 13:44:49 ./sbin/
-rwxr-xr-x root/root     31656 2002-03-28 13:44:49 ./sbin/parted
drwxr-xr-x root/root         0 2002-03-28 13:44:38 ./usr/
drwxr-xr-x root/root         0 2002-03-28 13:44:41 ./usr/share/
drwxr-xr-x root/root         0 2002-03-28 13:44:38 ./usr/share/man/
drwxr-xr-x root/root         0 2002-03-28 13:44:52 ./usr/share/man/man8/
-rw-r--r-- root/root      1608 2002-03-28 13:44:37 ./usr/share/man/man8/parted.8.gz
drwxr-xr-x root/root         0 2002-03-28 13:44:41 ./usr/share/doc/
drwxr-xr-x root/root         0 2002-03-28 13:44:52 ./usr/share/doc/parted/
-rw-r--r-- root/root      1880 2002-03-07 14:20:08 ./usr/share/doc/parted/README.Debian
-rw-r--r-- root/root      1347 2002-02-27 01:40:50 ./usr/share/doc/parted/copyright
-rw-r--r-- root/root      6444 2002-03-28 13:37:33 ./usr/share/doc/parted/changelog.Debian.gz
-rw-r--r-- root/root     15523 2002-03-28 02:36:43 ./usr/share/doc/parted/changelog.gz
</screen><para>
Deve essere l'ultimo file nell'archivio deb.
</para></sect2>
<sect2><title>control.tar.gz</title>
<para>
Nel nostro esempio questo file ha il seguente contenuto:
</para><screen>
-rw-r--r--    1 root     root         1336 Mar 28  2002 control
-rw-r--r--    1 root     root          388 Mar 28  2002 md5sums
-rwxr-xr-x    1 root     root          253 Mar 28  2002 postinst
-rwxr-xr-x    1 root     root          194 Mar 28  2002 prerm
</screen><para>
'md5sums' contiene, per ogni file in data.tar.gz, l'md5sum. Nel nostro
esempio il contenuto appare come questo:
</para><screen>
1d15dcfb6bb23751f76a2b7b844d3c57  sbin/parted
4eb9cc2e192f1b997cf13ff0b921af74  usr/share/man/man8/parted.8.gz
2f356768104a09092e26a6abb012c95e  usr/share/doc/parted/README.Debian
a6259bd193f8f150c171c88df2158e3e  usr/share/doc/parted/copyright
7f8078127a689d647586420184fc3953  usr/share/doc/parted/changelog.Debian.gz
98f217a3bf8a7407d66fd6ac8c5589b7  usr/share/doc/parted/changelog.gz
</screen><para>
Non bisogna preoccuparsi, il file 'md5sum' così come i file 'postinst' e
'prerm' non sono necessari per il proprio primo pacchetto. Ma è meglio
ricordarsi della loro esistenza, ogni pacchetto che appartiene alla Debian
ufficiale ha questi file per delle buone ragioni.
</para><para>
I file 'prerm' e 'postinst' sembra che si prendano cura della rimozione dei
file della vecchia documentazione e aggiungano un link da doc a share/doc. 
</para><screen><anchor id="postinst"/>$ cat postinst
#!/bin/sh
set -e
# Aggiunto automaticamente da dh_installdocs
if [ "$1" = "configure" ]; then
  if [ -d /usr/doc -a ! -e /usr/doc/parted -a -d /usr/share/doc/parted ]; then
    ln -sf ../share/doc/parted /usr/doc/parted
  fi
fi
# Fine della sezione aggiunta automaticamente

$ cat prerm
#!/bin/sh
set -e
# Aggiunto automaticamente da dh_installdocs
if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/parted ]; then
  rm -f /usr/doc/parted
fi
# Fine della sezione aggiunta automaticamente
</screen><para>
Ed infine il file più interessante:
</para><screen>
$ cat control
Package: parted
Version: 1.4.24-4
Section: admin
Priority: optional
Architecture: i386
Depends: e2fsprogs (&gt;= 1.27-2), libc6 (&gt;= 2.2.4-4), libncurses5 (&gt;= \
5.2.20020112a-1), libparted1.4 (&gt;= 1.4.13+14pre1), libreadline4 (&gt;= \
4.2a-4), libuuid1
Suggests: parted-doc
Conflicts: fsresize
Replaces: fsresize
Installed-Size: 76
Maintainer: Timshel Knoll &lt;timshel@debian.org&gt;
Description: Il programma per il ridimensionamento delle partizioni del disco GNU Parted
 Parted è un programma che permette di creare, eliminare, ridimensionare,
 muovere e copiare partizioni del disco rigido. È utile per creare dello
 spazio per nuovi sistemi operativi, riorganizzare l'uso del disco, e per
 copiare i dati in nuovi dischi rigidi. 
 .
 Questo pacchetto contiene il binario di Parted e la pagina di manuale.
 .
 Parted attualmente supporta etichette/tavole delle partizioni di DOS, Mac,
 Sun, BSD, GPT e PC98, così come un tipo di 'loop' (raw disk) che ne
 permette l'utilizzo su RAID/LVM. I filesystem supportati sono: ext2, ext3,
 FAT (FAT16 e FAT32) e linux-swap. Parted può anche identificare filesystem
 HFS (Mac OS), JFS, NTFS, ReiserFS, UFS e XFS ma non può ancora
 creare/rimuovere/ridimensionare/verificare questi filesystem.
 .

 La natura di questo software è tale che ogni baco potrebbe causare una
 massiccia perdita di dati. Nonostante non ci siano bachi conosciuti al
 momento, potrebbero esisterne, quindi si è pregati di fare un back up di
 tutti i file importanti prima di eseguire questo programma, sapendo di
 agire a proprio rischio.
</screen><para>
Ulteriori informazioni riguardo il file control possono essere ottenute con
'<literal>man 5 deb-control</literal>'.
</para></sect2></sect1>

<sect1><title>Fare pratica</title>
<para>
Ora è il momento di fare pratica da soli. Ho un semplice script
di shell chiamato 'linuxstatus' che desidero installare come
'/usr/bin/linuxstatus'. Quindi si crei in primo luogo una directory chiamata
'debian' e si copi, all'interno di questa, il file 'linuxstatus'.
</para><screen>
$ mkdir -p ./debian/usr/bin
$ cp linuxstatus ./debian/usr/bin
</screen>
<sect2><title>control</title>
<para>
Iniziamo con il file control. Il numero di versione deve avere un trattino
seguito da un numero che descrive la versione del pacchetto Debian, per
esempio '1.1-1'. Se il proprio programma consiste solo di uno script shell
portabile, si usi 'all' come sua 'Architecture'.
</para><para>
Per il campo 'Depends' è necessario scoprire a quale pacchetto appartiene un
determinato file o programma dal quale il proprio nuovo pacchetto dipende.

Per scoprire questo si può usare 'dpkg -S &lt;file&gt;', p.e..:
</para><screen>
$ dkpg -S /bin/cat
coreutils: /bin/cat
</screen><para>
Quindi per scoprire di più circa il pacchetto 'coreutils' si può usare il
comando 'apt-cache showpkg coreutils' che dirà, tra le altre cose, il
numero di versione attualmente installato sul sistema.</para><para>

Come nota a margine, ci sono altri due maniere per trovare le stesse
informazioni. C'è una pagina web dove si possono cercare file Debian:
<ulink url="http://www.debian.org/distrib/packages">http://www.debian.org/distrib/packages</ulink>.
Si vada in fondo alla pagina e si riempia il form.</para><para>

Ultima ma non per importanza, c'è una graziosa applicazione GUI chiamata
'kpackage', che fornisce comode opzioni di navigazione tra i pacchetti e
permette anche di ricercare pacchetti, dati i nomi dei singoli file.
</para><para>
I campi 'Suggests', 'Conflicts', 'Replaces', ecc. possono essere omessi se
non necessari.
</para><para>
Ecco quindi il risultato del nostro primo file 'control':
</para><programlisting>Package: linuxstatus
Version: 1.1-1
Section: base
Priority: optional
Architecture: all
Depends: bash (&gt;= 2.05a-11), textutils (&gt;= 2.0-12), awk, procps (&gt;= \
1:2.0.7-8), sed (&gt;= 3.02-8), grep (&gt;= 2.4.2-3), coreutils (&gt;= 5.0-5)
Maintainer: Chr. Clemens Lee &lt;clemens@kclee.de&gt;
Description: Informazioni sul sistema Linux
 Questo script fornisce una vasta descrizione
 dei differenti aspetti del sistema.</programlisting><para>
Il file 'control' viene copiato in una directory chiamata 'DEBIAN'
all'interno dell'altra directory 'debian'.
</para><screen>
$ mkdir -p debian/DEBIAN
$ find ./debian -type d | xargs chmod 755   # questo è necessario su Debian Woody, non chiedetemi perché
$ cp control debian/DEBIAN
</screen><para>
Se ci si aspetta che il proprio pacchetto abbia in futuro un'utenza
maggiore, può essere d'aiuto la lettura di questo articolo:
<ulink url="http://people.debian.org/~walters/descriptions.html">Writing Debian package descriptions</ulink>.
</para></sect2><sect2><title>dpkg-deb</title><para>
Ora è quasi pronto. Si dia:
</para><screen>
$ dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.1-1_all.deb
</screen><para>
È stato più facile di quanto previsto. Ora è sufficiente installare questo
pacchetto sul proprio sistema ed è tutto fatto:
</para><screen>
root# dpkg -i ./linuxstatus_1.1-1_all.deb
</screen>
<para>
Si scriva '<literal>linuxstatus</literal>' o '<literal>ls -l
/usr/bin/linuxstatus</literal>' per vedere se ha funzionato.
Se non si gradisce più il proprio pacchetto, si scriva solo
'<literal>dpkg -r linuxstatus</literal>' e si controlli nuovamente se il
pacchetto è stato disinstallato. Comunque, se si installa una nuova
versione del pacchetto non si deve rimuovere prima il pacchetto precedente.
</para><para>
Se si è curiosi riguardo allo schema del numero della versione e le
convenzioni usate per nominare un pacchetto Debian, si legga
<ulink url="http://www.debian.org/doc/manuals/reference/ch-system.en.html#s-pkgname">this section</ulink> in <ulink url="http://www.debian.org/doc/manuals/reference/reference.en.html">The Debian Reference</ulink>
[NdT: <ulink url="http://www.debian.org/doc/manuals/reference/ch-system.it.html#s-pkgname">in
italiano</ulink>].
</para></sect2></sect1>

<sect1>
<title>Doppia Verifica</title>
<para>
Ora che si è ottenuta una prima impressione e si è costruito il proprio
pacchetto binario, è tempo di diventare un pò più "seri" e dare uno sguardo
alla qualità del pacchetto che abbiamo prodotto.
</para>
<sect2><title>lintian</title>
<para>
Fortunatamente per noi il progetto Debian fornisce uno strumento per
verificare i pacchetti Debian. Questo strumento si chiama 'lintian'. Se non
è ancora stato installato sul proprio sistema questo è il momento buono per
farlo (<literal>apt-get install lintian</literal>).
</para><para>
Ora useremo questo piccolo prezioso strumento sul nostro nuovo pacchetto:
</para>
<screen>$ lintian linuxstatus_1.1-1_all.deb
E: linuxstatus: binary-without-manpage linuxstatus
E: linuxstatus: no-copyright-file
W: linuxstatus: prerm-does-not-remove-usr-doc-link
W: linuxstatus: postinst-does-not-set-usr-doc-link</screen>
<para>
Il pacchetto non sembra così perfetto. Mancano la pagina di manuale, il
file di copyright e anche gli script 'prerm' e 'postinst'.
</para></sect2>
<sect2><title>Documentazione Minima</title>
<para>
Questo non è il luogo adatto per dire molto riguardo la scrittura e la
creazione delle pagine di manuale, ci sono molti libri che hanno uno o più
capitoli relativi a questo argomento e c'è anche online <ulink
url="http://tldp.org/HOWTO/Man-Page/index.html">The Linux MAN-PAGE-HOWTO</ulink>
[NdT: <ulink url="http://it.tldp.org/HOWTO/Man-Page.html">in
italiano</ulink>]. Quindi ora si assume che ci sia una pagina di manuale
perfetta per il proprio script alla locazione
<literal>./man/man1/linuxstatus.1</literal>.
</para><para>
Lo stesso per il file 'copyright'. Si possono trovare diversi esempi nella
directory <literal>/usr/share/doc</literal> con questo comando:
<literal>find /usr/share/doc -name "copyright"</literal>.
</para><para>
Ecco quindi il nostro esempio di un file 'copyright': 
</para><programlisting>linuxstatus

Copyright: Chr. Clemens Lee &lt;clemens@kclee.de&gt;

2002-12-07

La pagina principale di linuxstatus è su: 
http://www.kclee.de/clemens/unix/index.html#linuxstatus

L'intero codice base può essere distribuito sotto i termini della GNU
General Public License (GPL), che appare immediatamente sotto. In
alternativa, tutto il codice sorgente come ogni codice derivato da questo
codice può essere distribuito invece sotto la GNU Lesser General Public
License (LGPL), a scelta del distributore. Il testo completo della LGPL
appare di seguito in questo file.

Si veda /usr/share/common-licenses/(GPL|LGPL)</programlisting><para>
Per gli script 'prerm' e 'postinst' si copino uno ad uno gli <ulink
url="#postint">esempi</ulink> dal pacchetto 'parted' precedente al posto dei
file aventi lo stesso nome nella propria directory del progetto. Questi file
dovrebbero funzionare bene.
</para><para>
Si crei ora il pacchetto debian nuovamente. Nel file 'control' si aumenti il
numero della versione da 1.1-1 a 1.2-1 (quando si scriverà una nuova pagina
di manuale si aumenterà il proprio numero di release interno). È anche
necessario copiare i nuovi file nelle loro destinazioni appropriate:
</para><screen>$ mkdir -p ./debian/usr/share/man/man1
$ mkdir -p ./debian/usr/share/doc/linuxstatus
$ find ./debian -type d | xargs chmod 755
$ cp ./man/man1/linuxstatus.1 ./debian/usr/share/man/man1
$ cp ./copyright ./debian/usr/share/doc/linuxstatus
$ cp ./prerm ./postinst ./debian/DEBIAN
$ gzip --best ./debian/usr/share/man/man1/linuxstatus.1
$
$ dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb</screen><para>
Gzip è necessario perché lintian si aspetta che i file delle pagine di
manuale siano compressi il più possibile.
</para></sect2>
<sect2><title>fakeroot</title>
<para>
Ora vediamo se il pacchetto è diventato un buon "cittadino" di Debian:
</para><screen>$ lintian linuxstatus_1.2-1_all.deb
E: linuxstatus: control-file-has-bad-owner prerm clemens/clemens != root/root
E: linuxstatus: control-file-has-bad-owner postinst clemens/clemens != root/root
E: linuxstatus: bad-owner-for-doc-file usr/share/doc/linuxstatus/ clemens/clemens != root/root
E: linuxstatus: bad-owner-for-doc-file usr/share/doc/linuxstatus/copyright clemens/clemens != root/root
E: linuxstatus: debian-changelog-file-missing</screen><para>
Uff, ancora reclami. Ok, non rinunceremo. Attualmente la maggior parte degli
errori sembra in realtà essere lo stesso problema. I nostri file sono tutti
pacchettati per l'utente e il gruppo 'clemens', mentre si assume che la
maggior parte della gente preferisca averli installati come 'root/root'. Ma
questo problema è facilmente superato usando lo strumento '<emphasis
role="bold">fakeroot</emphasis>'. Quindi correggiamo e verifichiamolo
velocemente (mentre si ignora il risultato del file changelog):
</para><screen>$ <emphasis role="bold">fakeroot</emphasis> dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb
$ lintian linuxstatus_1.2-1_all.deb
E: linuxstatus: debian-changelog-file-missing</screen><para>
Bene, ma si deve ancora aggiungere un altro file al pacchetto.
</para></sect2>
<sect2><title>Ulteriore Documentazione</title>
<para>
Lasciatemi già dire che accanto al file 'changelog' nella directory
'doc/linuxstatus' è necessario un file 'changelog.Debian'. Entrambi
dovrebbero essere compressi con gzip.
</para><para>
Di seguito ci sono due file di esempio, 'changelog':
</para><programlisting>linuxstatus (1.2-1)

  * Made Debian package lintian clean.

 -- Chr. Clemens Lee &lt;clemens@kclee.de&gt;  2002-12-13</programlisting><para>
e 'changelog.Debian':
</para><programlisting>Il manutentore di linuxstatus di Debian e
l'autore sono identici. Si veda quindi anche un file normale di changelog
per i cambiamenti in Debian.</programlisting><para>
La Debian Policy fornisce più dettagli riguardo <ulink
url="http://www.debian.org/doc/debian-policy/ch-miscellaneous.html#s-dpkgchangelog">il
formato del file changelog</ulink>.
</para><para>
Ora si spera che l'ultimo passo sia:
</para><screen>$ cp ./changelog ./changelog.Debian ./debian/usr/share/doc/linuxstatus
$ gzip --best ./debian/usr/share/doc/linuxstatus/changelog 
$ gzip --best ./debian/usr/share/doc/linuxstatus/changelog.Debian
$ fakeroot dpkg-deb --build ./debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb
$ lintian linuxstatus_1.2-1_all.deb</screen><para>
Ah, non si ottengono più reclami :-). Ora, come root si può installare
questo pacchetto sopra a quello precedente, ancora con il solito comando
'<literal>dpkg -i</literal>'.
</para><screen>root# dpkg -i ./linuxstatus_1.2-1_all.deb
(Reading database ... 97124 files and directories currently installed.)
Preparing to replace linuxstatus 1.1-1 (using linuxstatus_1.2-1_all.deb) ...
Unpacking replacement linuxstatus ...
Setting up linuxstatus (1.2-1) ...</screen>
</sect2></sect1>

<sect1><title>Sommario</title>
<para>
Per non creare confusione vengono riassunti tutti i passaggi che sono stati
fatti per costruire il proprio pacchetto binario Debian.
</para><para>
File indispensabili:
</para><orderedlist>
  <listitem><simpara>uno o più file binari eseguibili o script di shell</simpara></listitem>
  <listitem><simpara>una pagina di manuale per ogni file eseguibile</simpara></listitem>
  <listitem><simpara>un file 'control'</simpara></listitem>
  <listitem><simpara>un file 'copyright'</simpara></listitem>
  <listitem><simpara>un file 'changelog' ed uno 'changelog.Debian'</simpara></listitem>
</orderedlist><para>
Si impostino le sottodirectory temporanee di 'debian':
</para><orderedlist>
  <listitem><simpara>si crei la directory '<literal>debian/usr/bin</literal>' (o ovunque si pensi di mettere i propri file eseguibili)</simpara></listitem>
  <listitem><simpara>si crei '<literal>debian/usr/share/man/man1</literal>' (o dentro qualsiasi sezione a cui la propria man page appartenga)</simpara></listitem>
  <listitem><simpara>si crei la directory '<literal>debian/DEBIAN</literal>'</simpara></listitem>
  <listitem><simpara>si crei '<literal>debian/usr/share/doc/&lt;nome_pacchetto&gt;</literal>'</simpara></listitem>
  <listitem><simpara>ci si assicuri che tutte le sottodirectory di '<literal>debian</literal>' abbiano i permessi dei file a 0755</simpara></listitem>
</orderedlist><para>
Si copino i file dentro l'albero delle directory temporaneo di 'debian':
</para><orderedlist>
  <listitem><simpara>si copi il file eseguibile nella directory '<literal>debian/usr/bin</literal>' (o ovunque si pensi di mettere i propri file eseguibili)</simpara></listitem>
  <listitem><simpara>si copi il file della pagina di manuale dentro la directory '<literal>debian/usr/share/man/man1</literal>'</simpara></listitem>
  <listitem><simpara>si copi il file 'control' dentro la directory '<literal>debian/DEBIAN</literal>'</simpara></listitem>
  <listitem><simpara>si copino i file 'copyright', 'changelog' e 'changelog.Debian' dentro la directory '<literal>debian/usr/share/doc/&lt;nome_pacchetto&gt;</literal>'</simpara></listitem>
  <listitem><simpara>si comprimano con gzip la pagina di manuale, i file 'copyright', 'changelog' e 'changelog.Debian' con l'opzione '--best' all'interno dell'albero delle directory temporaneo '<literal>debian</literal>'</simpara></listitem>
</orderedlist><para>
Si costruisca e si verifichi il pacchetto binario Debian:
</para><orderedlist>
  <listitem><simpara>si invochi '<literal>dpkg-deb --build</literal>' usando '<literal>fakeroot</literal>' sulla directory '<literal>debian</literal>'</simpara></listitem>
  <listitem><simpara>si rinomini il file risultante '<literal>debian.deb</literal>' con il suo nome finale includendo le informazioni della versione e dell'architettura</simpara></listitem>
  <listitem><simpara>si verifichi il pacchetto .deb risultante in conformità con la Debian policy usando '<literal>lintian</literal>'</simpara></listitem>
</orderedlist></sect1>

<sect1><title>Quello che rimane</title>
<para>
Ci sono molti dettagli che non sono stati affrontati in questo testo, ad
esempio come distribuire demoni di Unix, file di configurazione e molto
altro.
</para><para>
Ma la cosa più importante che voglio ancora mettere in evidenza è che per i
manutentori Debian i pacchetti sono pacchetti sorgente, non pacchetti
binari. Non interagiscono mai direttamente con l'interno dei pacchetti
binari. Infatti, solo gli sviluppatori di '<literal>dpkg-deb</literal>' e
'<literal>dpkg</literal>' hanno la necessità di sapere cosa sono. Infatti
non è consigliato fare così.
</para><para>
Se uno sviluppatore dovesse spiegare a qualcuno come costruire un pacchetto
Debian, spiegherebbe certamente come realizzare un pacchetto sorgente e come
compilarlo.
</para><para>
D'altra parte, non tutti gli sviluppatori vogliono inviare il proprio
software a Debian (per il momento), ma vogliono comunque approfittare dei
vantaggi che un sistema di gestione dei pacchetti come 'dpkg' offre senza
rilasciare il pacchetto sorgente. Personalmente rilascerò i miei progetti
ancora come file tar.gz con il codice sorgente per tutti i generi di
piattaforma, mentre progetto di offrire molti pacchetti '.deb' per la
convenienza degli utenti di Debian che vogliono installare ed usare il mio
software.
</para><para>
Se qualcuno vuole fare il passo successivo per sottoporre un pacchetto
software a Debian deve mettersi prima a studiare la "Debian New
Maintainers' Guide" così come il <ulink
url="http://www.debian.org/doc/debian-policy/">Debian Policy Manual</ulink>.
Nella propria impresa di creare un pacchetto sorgente Debian, bisognerebbe
dare uno sguardo anche alla mailing list <ulink
url="http://lists.debian.org/debian-mentors/">debian-mentors</ulink> per
vedere sviluppatori Debian principianti ed esperti interagire tra loro e
affrontare problemi simili che si potrebbero incontrare.
</para></sect1>

<sect1><title>Ringraziamenti</title>
<para>
Si ringraziano
</para><itemizedlist>
  <listitem><simpara>Colin Watson per aver contribuito ad una frase
  nell'abstract ed aver fornito consigli riguardanti la struttura, gli
  obiettivi ed il titolo di questo HowTo,</simpara></listitem>
  <listitem><simpara>Bill Allombert per aver contribuito ad una frase nella
  sezione 'Quello che rimane' ed aver fornito consigli che rafforzano quello
  che Colin aveva già detto,</simpara></listitem>
  <listitem><simpara>Santiago Vila per la puntualizzazione che 'md' è un
  alias locale e che il mondo (Unix) si è standardizzato su
  'mkdir',</simpara></listitem>
  <listitem><simpara>Tabatha Marshall dal progetto <ulink
  url="http://www.tldp.org/">TLDP</ulink> per il supporto
  generale,</simpara></listitem>
  <listitem><simpara>Joey Hess, Carlo Perassi e Joe Riel per correzioni
  minori,</simpara></listitem>
  <listitem><simpara>Claudio Cattazzo per la conversione del mio documento
  xml privato in un formato standard docbook assieme a vari minori
  miglioramenti e correzioni [2003-10-04].</simpara></listitem>
  <listitem><simpara>Frank Lichtenheld per aver trovato errori introdotti
  quando le pagine HTML vengono generate e per avere suggerito di usare
  'dpkg -S &lt;file&gt;' quando si cerca un pacchetto contenente un certo
  file [2003-12-13].</simpara></listitem>
  <listitem><simpara>Hugh Hartmann per aver tradotto <ulink
  url="http://it.tldp.org/HOWTO/Debian-Binary-Package-Building-HOWTO/index.html">questo
  HOWTO in italiano</ulink> e Claudio Cattazzo per aver revisionato la
  traduzione [2003-12-13].</simpara></listitem>
  <listitem><simpara>Oguz Yarimtepe per la traduzione <ulink 
  url="http://www.belgeler.org/howto/dpkg-deb-nasil.html">questo HOWTO 
  in Turco</ulink> [2005-08-09].</simpara></listitem>
</itemizedlist>
</sect1>

<sect1><title>Link</title>
<para>
      <informaltable frame="none">
        <tgroup cols="2">
          <tbody>
            <row>
              <entry>Debian New Maintainers' Guide:</entry>
              <entry>
                <ulink url="http://www.debian.org/doc/maint-guide/">http://www.debian.org/doc/maint-guide/</ulink>
              </entry>
            </row>
            <row>
              <entry>Debian:</entry>
              <entry>
                <ulink url="http://www.debian.org/">http://www.debian.org/</ulink>
              </entry>
            </row>
            <row> 
              <entry>[NdT: in italiano:</entry>
              <entry>
                <ulink url="http://it.tldp.org/HOWTO/Debian-Binary-Package-Building-HOWTO/index.html">http://it.tldp.org/HOWTO/Debian-Binary-Package-Building-HOWTO/index.html</ulink>]
              </entry>
            </row>
            <row>
              <entry>The Debian Reference:</entry>
              <entry>
                <ulink url="http://www.debian.org/doc/manuals/reference/reference.en.html">http://www.debian.org/doc/manuals/reference/reference.en.html</ulink>
              </entry>
            </row>
            <row> 
              <entry>[NdT: in italiano:</entry>
              <entry>
                <ulink url="http://www.debian.org/doc/manuals/reference/reference.it.html">http://www.debian.org/doc/manuals/reference/reference.it.html</ulink>]
              </entry>
            </row>
            <row>
              <entry>Pacchetti Debian:</entry>
              <entry>
                <ulink url="http://www.debian.org/distrib/packages">http://www.debian.org/distrib/packages</ulink>
              </entry>
            </row>
            <row>
              <entry>Writing Debian package descriptions:</entry>
              <entry>
                <ulink url="http://people.debian.org/~walters/descriptions.html">http://people.debian.org/~walters/descriptions.html</ulink>
              </entry>
            </row>
            <row>
              <entry>The Linux MAN-PAGE-HOWTO:</entry>
              <entry>
                <ulink url="http://www.tldp.org/HOWTO/mini/Man-Page.html">http://www.tldp.org/HOWTO/mini/Man-Page.html</ulink>
              </entry>
            </row>
            <row> 
              <entry>[NdT: in italiano:</entry>
              <entry>
                <ulink url="http://it.tldp.org/HOWTO/Man-Page/index.html">http://it.tldp.org/HOWTO/Man-Page/index.html</ulink>]
              </entry>
            </row>
            <row>
              <entry>Debian Policy Manual:</entry>
              <entry>
                <ulink url="http://www.debian.org/doc/debian-policy/">http://www.debian.org/doc/debian-policy/</ulink>
              </entry>
            </row>
            <row>
              <entry>Debian Mentors:</entry>
              <entry>
                <ulink url="http://lists.debian.org/debian-mentors/">http://lists.debian.org/debian-mentors/</ulink>
              </entry>
            </row>
            <row>
              <entry>The Linux Documentation Project:</entry>
              <entry>
                <ulink url="http://www.tldp.org/">http://www.tldp.org/</ulink>
              </entry>
            </row>
            <row>
              <entry>Plug: la mia piccola pagina su Unix:</entry>
              <entry>
                <ulink url="http://www.kclee.de/clemens/unix/">http://www.kclee.de/clemens/unix/</ulink>
              </entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
    </para>
  </sect1>
</article>
