Your IP : 216.73.216.81


Current Path : /proc/283367/root/usr/share/doc/maint-guide-it/html/
Upload File :
Current File : //proc/283367/root/usr/share/doc/maint-guide-it/html/advanced.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>Appendice A. Pacchettizzazione avanzata</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="upload.it.html" title="Capitolo 9. Caricamento del pacchetto"/>
  </head>
  <body>
    <div class="navheader">
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">Appendice A. Pacchettizzazione avanzata</th>
        </tr>
        <tr>
          <td align="left"><a accesskey="p" href="upload.it.html"><img src="images/prev.png" alt="Indietro"/></a> </td>
          <th width="60%" align="center"> </th>
          <td align="right"> </td>
        </tr>
      </table>
      <hr/>
    </div>
    <div class="appendix">
      <div class="titlepage">
        <div>
          <div>
            <h1 class="title"><a id="advanced"/>Appendice A. Pacchettizzazione avanzata</h1>
          </div>
        </div>
      </div>
      <div class="toc">
        <p>
          <strong>Indice</strong>
        </p>
        <dl class="toc">
          <dt>
            <span class="section">
              <a href="advanced.it.html#library">A.1. Librerie condivise</a>
            </span>
          </dt>
          <dt>
            <span class="section">
              <a href="advanced.it.html#librarysymbols">A.2. Gestire
<code class="filename">debian/<em class="replaceable"><code>package</code></em>.symbols</code></a>
            </span>
          </dt>
          <dt>
            <span class="section">
              <a href="advanced.it.html#multiarch">A.3. Multiarch</a>
            </span>
          </dt>
          <dt>
            <span class="section">
              <a href="advanced.it.html#librarypackage">A.4. Costruzione del pacchetto della libreria condivisa</a>
            </span>
          </dt>
          <dt>
            <span class="section">
              <a href="advanced.it.html#native-dh-make">A.5. Pacchetto nativo 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>
Sono qui riportati alcuni suggerimenti e riferimenti sulle cose più comuni
riguardanti la pacchettizzazione avanzata.  Si consiglia vivamente di
leggere tutti i riferimenti qui riportati.
</p>
      <p>
Può essere necessario modificare manualmente il file del template del
pacchetto generato dal comando <span class="command"><strong>dh_make</strong></span> per affrontare gli
argomenti trattati in questo capitolo. Il nuovo comando
<span class="command"><strong>debmake</strong></span> potrebbe trattare questi temi in modo migliore.
</p>
      <div class="section">
        <div class="titlepage">
          <div>
            <div>
              <h2 class="title"><a id="library"/>A.1. Librerie condivise</h2>
            </div>
          </div>
        </div>
        <p>
Prima di pacchettizzare una <a class="ulink" href="http://en.wikipedia.org/wiki/Library_(computing)">libreria</a>
condivisa, si dovrebbero leggere attentamente i seguenti riferimenti
principali:
</p>
        <div class="itemizedlist">
          <ul class="itemizedlist">
            <li class="listitem">
              <p>
<a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-sharedlibs.html">Manuale delle policy di Debian, 8
"Shared libraries"</a>
</p>
            </li>
            <li class="listitem">
              <p>
<a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-opersys.html#s-fhs">Manuale delle policy di Debian, 9.1.1 "File System
Structure"</a>
</p>
            </li>
            <li class="listitem">
              <p>
<a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-files.html#s-libraries">Manuale delle policy di Debian, 10.2
"Libraries"</a>
</p>
            </li>
          </ul>
        </div>
        <p>
Di seguito alcuni semplici suggerimenti per iniziare:
</p>
        <div class="itemizedlist">
          <ul class="itemizedlist">
            <li class="listitem">
              <p>
Le librerie condivise sono file oggetto <a class="ulink" href="http://en.wikipedia.org/wiki/Executable_and_Linkable_Format">ELF</a> che
contengono del codice compilato.
</p>
            </li>
            <li class="listitem">
              <p>
Le librerie condivise sono distribuite come file
<code class="filename">*.so</code>. (Né come file <code class="filename">*.a</code> né come
file <code class="filename">*.la</code>)
</p>
            </li>
            <li class="listitem">
              <p>
Le librerie condivise sono utilizzate principalmente per condividere codice
tra più eseguibili, utilizzando il sistema <span class="command"><strong>ld</strong></span>.
</p>
            </li>
            <li class="listitem">
              <p>
Le librerie condivise sono a volte utilizzate per fornire plugin a più di un
file eseguibile con il sistema <span class="command"><strong>dlopen</strong></span>.
</p>
            </li>
            <li class="listitem">
              <p>
Le librerie condivise esportano i <a class="ulink" href="http://en.wikipedia.org/wiki/Symbol_(programming)">symbols</a> che
rappresentano gli oggetti compilati, come le variabili, le funzioni e le
classi; e consentono l'accesso ad essi dagli eseguibili collegati. 
</p>
            </li>
            <li class="listitem">
              <p>
Il <a class="ulink" href="http://en.wikipedia.org/wiki/Soname">SONAME</a> di una libreria condivisa
<code class="filename">lib<em class="replaceable"><code>foo</code></em>.so</code>.<em class="replaceable"><code>1</code></em>:
<code class="literal">objdump -p
lib<em class="replaceable"><code>foo</code></em>.so.<em class="replaceable"><code>1</code></em> | grep
SONAME</code> <a href="#ftn.idm3840" class="footnote" id="idm3840"><sup class="footnote">[87]</sup></a>
</p>
            </li>
            <li class="listitem">
              <p>
Il SONAME di una libreria condivisa di solito corrisponde al nome del file
della libreria (ma non sempre).
</p>
            </li>
            <li class="listitem">
              <p>
Il SONAME delle librerie condivise collegate a
<code class="filename"><em class="replaceable"><code>/usr/bin/foo</code></em></code>:
<code class="literal">objdump -p <em class="replaceable"><code>/usr/bin/foo</code></em> | grep
NEEDED</code> <a href="#ftn.idm3853" class="footnote" id="idm3853"><sup class="footnote">[88]</sup></a>
</p>
            </li>
            <li class="listitem">
              <p>
<code class="systemitem">lib<em class="replaceable"><code>foo</code></em><em class="replaceable"><code>1</code></em></code>:
il pacchetto libreria per la libreria condivisa
<code class="filename">lib<em class="replaceable"><code>foo</code></em>.so.<em class="replaceable"><code>1</code></em></code>
con la versione SONAME ABI <em class="replaceable"><code>1</code></em>.<a href="#ftn.idm3867" class="footnote" id="idm3867"><sup class="footnote">[89]</sup></a>
</p>
            </li>
            <li class="listitem">
              <p>
Gli script dei maintainer riguardanti i pacchetti libreria devono richiamare
<span class="command"><strong>ldconfig</strong></span> in circostanze specifiche per creare i necessari
collegamenti simbolici per SONAME.<a href="#ftn.idm3873" class="footnote" id="idm3873"><sup class="footnote">[90]</sup></a>
</p>
            </li>
            <li class="listitem">
              <p>
<code class="systemitem">lib<em class="replaceable"><code>foo</code></em><em class="replaceable"><code>1</code></em>-dbg</code>:
i pacchetti di simboli di debugging che contengono i simboli di debugging
per il pacchetto della libreria condivisa <code class="systemitem">lib<em class="replaceable"><code>foo</code></em><em class="replaceable"><code>1</code></em></code>.
</p>
            </li>
            <li class="listitem">
              <p>
<code class="systemitem">lib<em class="replaceable"><code>foo</code></em>-dev</code>: il
pacchetto di sviluppo che contiene i file header etc, per la libreria
condivisa
<code class="filename">lib<em class="replaceable"><code>foo</code></em>.so.<em class="replaceable"><code>1</code></em></code>.<a href="#ftn.idm3891" class="footnote" id="idm3891"><sup class="footnote">[91]</sup></a>
</p>
            </li>
            <li class="listitem">
              <p>
Un pacchetto Debian, di norma, non deve contenere file di archivi Libtool
<code class="filename">*.la</code>.<a href="#ftn.idm3898" class="footnote" id="idm3898"><sup class="footnote">[92]</sup></a>
</p>
            </li>
            <li class="listitem">
              <p>
Un pacchetto Debian, di norma, non deve usare RPATH.<a href="#ftn.idm3903" class="footnote" id="idm3903"><sup class="footnote">[93]</sup></a>
</p>
            </li>
            <li class="listitem">
              <p>
Anche se un po' datato, ed è solo un riferimento secondario, <a class="ulink" href="http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html">Debian Library Packaging Guide</a>
può ancora essere utile.
</p>
            </li>
          </ul>
        </div>
      </div>
      <div class="section">
        <div class="titlepage">
          <div>
            <div>
              <h2 class="title"><a id="librarysymbols"/>A.2. Gestire
<code class="filename">debian/<em class="replaceable"><code>package</code></em>.symbols</code></h2>
            </div>
          </div>
        </div>
        <p>
Quando si pacchettizza una libreria condivisa, si deve creare il file
<code class="filename">debian/<em class="replaceable"><code>package</code></em>.symbols</code> per
gestire la versione minima associata ad ogni simbolo per le modifiche ABI
compatibili con le versioni precedenti, utilizzando lo stesso SONAME della
libreria per lo stesso nome del pacchetto della libreria
condivisa.<a href="#ftn.idm3916" class="footnote" id="idm3916"><sup class="footnote">[94]</sup></a> Si dovrebbero leggere, con
attenzione, i seguenti riferimenti:
</p>
        <div class="itemizedlist">
          <ul class="itemizedlist">
            <li class="listitem">
              <p>
<a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-symbols">Manuale delle policy di Debian, 8.6.3
"The symbols system"</a><a href="#ftn.idm3922" class="footnote" id="idm3922"><sup class="footnote">[95]</sup></a>
</p>
            </li>
            <li class="listitem">
              <p>
<span class="citerefentry"><span class="refentrytitle">dh_makeshlibs</span>(1)</span>
</p>
            </li>
            <li class="listitem">
              <p>
<span class="citerefentry"><span class="refentrytitle">dpkg-gensymbols</span>(1)</span>
</p>
            </li>
            <li class="listitem">
              <p>
<span class="citerefentry"><span class="refentrytitle">dpkg-shlibdeps</span>(1)</span>
</p>
            </li>
            <li class="listitem">
              <p>
<span class="citerefentry"><span class="refentrytitle">deb-symbols</span>(5)</span>
</p>
            </li>
          </ul>
        </div>
        <p>
Di seguito un esempio di massima, per creare il pacchetto <code class="systemitem">libfoo1</code> alla versione originale (upstream)
<code class="literal">1.3</code> con il file
<code class="filename">debian/libfoo1.symbols</code> corretto:
</p>
        <div class="itemizedlist">
          <ul class="itemizedlist">
            <li class="listitem">
              <p>
Preparare lo scheletro dell'albero del sorgente debianizzato utilizzando il
file originale <code class="filename">libfoo-1.3.tar.gz</code>.
</p>
              <div class="itemizedlist">
                <ul class="itemizedlist">
                  <li class="listitem">
                    <p>
Se è il primo pacchetto per <code class="systemitem">libfoo1</code>,
bisogna creare il file vuoto <code class="filename">debian/libfoo1.symbols</code>.
</p>
                  </li>
                  <li class="listitem">
                    <p>
Se la versione originale (upstream) precedente <code class="literal">1.2</code> è
stata pacchettizzata come <code class="systemitem">libfoo1</code>
con il file <code class="filename">debian/libfoo1.symbols</code> nei propri sorgenti
del pacchetto, lo si utilizzi.
</p>
                  </li>
                  <li class="listitem">
                    <p>
Se la versione originale (upstream) precedente <code class="literal">1.2</code> non è
stata pacchettizzata con il file
<code class="filename">debian/libfoo1.symbols</code>, è necessario creare il file
<code class="filename">symbols</code> per tutti i pacchetti binari disponibili con lo
stesso nome del pacchetto della libreria condivisa che contiene lo stesso
SONAME della libreria, ad esempio, le versioni <code class="literal">1.1-1</code> e
<code class="literal">1.2-1</code>.  <a href="#ftn.idm3970" class="footnote" id="idm3970"><sup class="footnote">[96]</sup></a>
</p>
                    <pre class="screen">
$ dpkg-deb -x libfoo1_1.1-1.deb libfoo1_1.1-1
$ dpkg-deb -x libfoo1_1.2-1.deb libfoo1_1.2-1
$ : &gt; symbols
$ dpkg-gensymbols -v1.1 -plibfoo1 -Plibfoo1_1.1-1 -Osymbols
$ dpkg-gensymbols -v1.2 -plibfoo1 -Plibfoo1_1.2-1 -Osymbols
</pre>
                  </li>
                </ul>
              </div>
            </li>
            <li class="listitem">
              <p>
È possibile provare a costruire l'albero dei sorgenti utilizzando dei
programmi come <span class="command"><strong>debuild</strong></span> e <span class="command"><strong>pdebuild</strong></span>.
(Se questo non riesce a causa della mancanza di simboli, ecc, ci sono stati
dei cambiamenti ABI incompatibili con le versioni precedenti, che richiedono
di cambiare il nome del pacchetto della libreria condivisa a qualcosa di
simile <code class="systemitem">libfoo1a</code> e si dovrebbe
ricominciare di nuovo da capo.)
</p>
              <pre class="screen">
$ cd libfoo-1.3
$ debuild
...
dpkg-gensymbols: warning: some new symbols appeared in the symbols file: ...
 see diff output below
--- debian/libfoo1.symbols (libfoo1_1.3-1_amd64)
+++ dpkg-gensymbolsFE5gzx        2012-11-11 02:24:53.609667389 +0900
@@ -127,6 +127,7 @@
  foo_get_name@Base 1.1
  foo_get_longname@Base 1.2
  foo_get_type@Base 1.1
+ foo_get_longtype@Base 1.3-1
  foo_get_symbol@Base 1.1
  foo_get_rank@Base 1.1
  foo_new@Base 1.1
...
</pre>
            </li>
            <li class="listitem">
              <p>
Se si vede il diff stampato da <span class="command"><strong>dpkg-gensymbols</strong></span> qui sopra,
bisogna estrarre i file <code class="filename">symbols</code> aggiornati
correttamente dal pacchetto binario generato dalla libreria condivisa.
<a href="#ftn.idm3990" class="footnote" id="idm3990"><sup class="footnote">[97]</sup></a>
</p>
              <pre class="screen">
$ cd ..
$ dpkg-deb -R  libfoo1_1.3_amd64.deb libfoo1-tmp
$ sed -e 's/1\.3-1/1\.3/' libfoo1-tmp/DEBIAN/symbols \
        &gt;libfoo-1.3/debian/libfoo1.symbols
</pre>
            </li>
            <li class="listitem">
              <p>
Costruire la release dei pacchetti con programmi come
<span class="command"><strong>debuild</strong></span> e <span class="command"><strong>pdebuild</strong></span>.
</p>
              <pre class="screen">
$ cd libfoo-1.3
$ debuild -- clean
$ debuild
...
</pre>
            </li>
          </ul>
        </div>
        <p>
In aggiunta agli esempi sopra riportati, è necessario controllare
ulteriormente la compatibilità ABI e cambiare le versioni di qualche simbolo
manualmente come richiesto.  <a href="#ftn.idm4002" class="footnote" id="idm4002"><sup class="footnote">[98]</sup></a>
</p>
        <p>
Anche se è solo un riferimento secondario,, <a class="ulink" href="http://wiki.debian.org/UsingSymbolsFiles">Debian wiki UsingSymbolsFiles</a> e i suoi
collegamenti possono essere utili.
</p>
      </div>
      <div class="section">
        <div class="titlepage">
          <div>
            <div>
              <h2 class="title"><a id="multiarch"/>A.3. Multiarch</h2>
            </div>
          </div>
        </div>
        <p>
La funzionalità multiarch introdotta in Debian wheezy integra il supporto
per l'installazione dei pacchetti binari cross-architettura (in particolare
<code class="literal">i386</code>&lt;-&gt;<code class="literal">amd64</code>, ma anche altre
combinazioni) in <code class="systemitem">dpkg</code> e <code class="systemitem">apt</code>. Si consiglia di leggere attentamente i
seguenti riferimenti:</p>
        <div class="itemizedlist">
          <ul class="itemizedlist">
            <li class="listitem">
              <p>
<a class="ulink" href="https://wiki.ubuntu.com/MultiarchSpec">Ubuntu wiki MultiarchSpec</a> (upstream)
</p>
            </li>
            <li class="listitem">
              <p>
<a class="ulink" href="http://wiki.debian.org/Multiarch/Implementation">Debian wiki
Multiarch/Implementation</a> (Debian situation)
</p>
            </li>
          </ul>
        </div>
        <p>
Esso utilizza la tripletta come <code class="literal">i386-linux-gnu</code> e
<code class="literal">x86_64-linux-gnu</code> per il percorso d'installazione delle
librerie condivise. La tripletta del percorso reale è impostata con il
valore dinamico <code class="literal">$(DEB_HOST_MULTIARCH)</code> da <span class="citerefentry"><span class="refentrytitle">dpkg-architecture</span>(1)</span> per ogni costruzione.  Ad esempio, il percorso per
installare le librerie multiarch viene modificato come segue.<a href="#ftn.idm4028" class="footnote" id="idm4028"><sup class="footnote">[99]</sup></a>
</p>
        <div class="informaltable">
          <a id="tripletpaths"/>
          <table class="informaltable" border="1">
            <colgroup>
              <col style="text-align: left"/>
              <col style="text-align: left"/>
              <col style="text-align: left"/>
            </colgroup>
            <thead>
              <tr>
                <th style="text-align: left">Vecchio percorso</th>
                <th style="text-align: left">percorso i386 multiarch</th>
                <th style="text-align: left">percorso amd64 multiarch</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td style="text-align: left">
                  <code class="filename">/lib/</code>
                </td>
                <td style="text-align: left">
                  <code class="filename">/lib/i386-linux-gnu/</code>
                </td>
                <td style="text-align: left">
                  <code class="filename">/lib/x86_64-linux-gnu/</code>
                </td>
              </tr>
              <tr>
                <td style="text-align: left">
                  <code class="filename">/usr/lib/</code>
                </td>
                <td style="text-align: left">
                  <code class="filename">/usr/lib/i386-linux-gnu/</code>
                </td>
                <td style="text-align: left">
                  <code class="filename">/usr/lib/x86_64-linux-gnu/</code>
                </td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>
Qui di seguito alcuni esempi tipici di pacchetti multiarch divisi per
scenario:
</p>
        <div class="itemizedlist">
          <ul class="itemizedlist">
            <li class="listitem">
              <p>
sorgente di libreria
<code class="filename">lib<em class="replaceable"><code>foo</code></em>-1.tar.gz</code>
</p>
            </li>
            <li class="listitem">
              <p>
sorgente di programma
<code class="filename"><em class="replaceable"><code>bar</code></em>-1.tar.gz</code> scritto con un
linguaggio compilato
</p>
            </li>
            <li class="listitem">
              <p>
sorgente di programma
<code class="filename"><em class="replaceable"><code>baz</code></em>-1.tar.gz</code> scritto con un
linguaggio interpretato
</p>
            </li>
          </ul>
        </div>
        <div class="informaltable">
          <a id="multiarchtable"/>
          <table class="informaltable" border="1">
            <colgroup>
              <col style="text-align: left"/>
              <col style="text-align: left"/>
              <col style="text-align: left"/>
              <col style="text-align: left"/>
            </colgroup>
            <thead>
              <tr>
                <th style="text-align: left">Pacchetto</th>
                <th style="text-align: left">Architettura:</th>
                <th style="text-align: left">Multi-Arch:</th>
                <th style="text-align: left">Contenuto del pacchetto</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td style="text-align: left">
                  <code class="systemitem">lib<em class="replaceable"><code>foo</code></em><em class="replaceable"><code>1</code></em></code>
                </td>
                <td style="text-align: left">qualsiasi</td>
                <td style="text-align: left">uguale</td>
                <td style="text-align: left">
la libreria condivisa, co-installabile
</td>
              </tr>
              <tr>
                <td style="text-align: left">
                  <code class="systemitem">lib<em class="replaceable"><code>foo</code></em><em class="replaceable"><code>1</code></em>-dbg</code>
                </td>
                <td style="text-align: left">qualsiasi</td>
                <td style="text-align: left">uguale</td>
                <td style="text-align: left">
i simboli di debug della libreira condivisa, co-installabile
</td>
              </tr>
              <tr>
                <td style="text-align: left">
                  <code class="systemitem">lib<em class="replaceable"><code>foo</code></em>-dev</code>
                </td>
                <td style="text-align: left">qualsiasi</td>
                <td style="text-align: left">uguale</td>
                <td style="text-align: left">
i file di header, ecc, della libreira condivisa, co-installabile
</td>
              </tr>
              <tr>
                <td style="text-align: left">
                  <code class="systemitem">lib<em class="replaceable"><code>foo</code></em>-tools</code>
                </td>
                <td style="text-align: left">qualsiasi</td>
                <td style="text-align: left">straniero</td>
                <td style="text-align: left">
il programma di supporto run-time, non co-installabile
</td>
              </tr>
              <tr>
                <td style="text-align: left">
                  <code class="systemitem">lib<em class="replaceable"><code>foo</code></em>-doc</code>
                </td>
                <td style="text-align: left">tutti</td>
                <td style="text-align: left">straniero</td>
                <td style="text-align: left">
i file di documentazione della libreria condivisa
</td>
              </tr>
              <tr>
                <td style="text-align: left">
                  <code class="systemitem">
                    <em class="replaceable">
                      <code>bar</code>
                    </em>
                  </code>
                </td>
                <td style="text-align: left">qualsiasi</td>
                <td style="text-align: left">straniero</td>
                <td style="text-align: left">
i file del programma compilato, non co-installabile
</td>
              </tr>
              <tr>
                <td style="text-align: left">
                  <code class="systemitem"><em class="replaceable"><code>bar</code></em>-doc</code>
                </td>
                <td style="text-align: left">tutti</td>
                <td style="text-align: left">straniero</td>
                <td style="text-align: left">
i file di documentazione del programma
</td>
              </tr>
              <tr>
                <td style="text-align: left">
                  <code class="systemitem">
                    <em class="replaceable">
                      <code>baz</code>
                    </em>
                  </code>
                </td>
                <td style="text-align: left">tutti</td>
                <td style="text-align: left">straniero</td>
                <td style="text-align: left">
i file del programma interpretato
</td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>
Si prega di notare che il pacchetto di sviluppo dovrebbe contenere un link
simbolico per la libreria condivisa associata <span class="strong"><strong>senza
un numero di versione</strong></span>.  Ad es.:
<code class="filename">/usr/lib/x86_64-linux-gnu/libfoo.so</code> -&gt;
<code class="filename">libfoo.so.1</code>
</p>
      </div>
      <div class="section">
        <div class="titlepage">
          <div>
            <div>
              <h2 class="title"><a id="librarypackage"/>A.4. Costruzione del pacchetto della libreria condivisa</h2>
            </div>
          </div>
        </div>
        <p>
Si può costruire il pacchetto Debian delle libreria, abilitando il supporto
multiarch utilizzando <span class="citerefentry"><span class="refentrytitle">dh</span>(1)</span> come di seguito: 
</p>
        <div class="itemizedlist">
          <ul class="itemizedlist">
            <li class="listitem">
              <p>
Aggiornare <code class="filename">debian/control</code>.
</p>
              <div class="itemizedlist">
                <ul class="itemizedlist">
                  <li class="listitem">
                    <p>
Aggiungere <code class="literal">Build-Depends: debhelper (&gt;=10)</code> per la sezione
del sorgente del pacchetto.
</p>
                  </li>
                  <li class="listitem">
                    <p>
Aggiungere <code class="literal">Pre-Depends: ${misc:Pre-Depends}</code> per ogni
pacchetto binario di una libreria condivisa.
</p>
                  </li>
                  <li class="listitem">
                    <p>
Aggiungere <code class="literal">Multi-Arch:</code> per ogni sezione del pacchetto
binario.
</p>
                  </li>
                </ul>
              </div>
            </li>
            <li class="listitem">
              <p>
Impostare <code class="filename">debian/compat</code> a "10".
</p>
            </li>
            <li class="listitem">
              <p>
Regolare il percorso dal normale <code class="literal">/usr/lib/</code> a quello
multiarch <code class="literal">/usr/lib/$(DEB_HOST_MULTIARCH)/</code> per tutti gli
script di pacchettizzazione.
</p>
              <div class="itemizedlist">
                <ul class="itemizedlist">
                  <li class="listitem">
                    <p>
Invocare <code class="literal">DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture
-qDEB_HOST_MULTIARCH)</code> nel file <code class="filename">debian/rules</code>
per impostare la variabile <code class="literal">DEB_HOST_MULTIARCH</code>.
</p>
                  </li>
                  <li class="listitem">
                    <p>
Sostituire <code class="literal">/usr/lib/</code> con
<code class="literal">/usr/lib/$(DEB_HOST_MULTIARCH)/</code> nel file
<code class="filename">debian/rules</code>.
</p>
                  </li>
                  <li class="listitem">
                    <p>
Se <code class="literal">./configure</code> viene utilizzato nella parte target di
<code class="literal">override_dh_auto_configure</code> in
<code class="filename">debian/rules</code>, ci si assicuri di sostituirlo con
<code class="literal">dh_auto_configure -- </code>.  <a href="#ftn.idm4190" class="footnote" id="idm4190"><sup class="footnote">[100]</sup></a>
</p>
                  </li>
                  <li class="listitem">
                    <p>
Sostituire tutte le occorrenze di <code class="literal">/usr/lib/</code> con
<code class="literal">/usr/lib/*/</code> nei file
<code class="filename">debian/<em class="replaceable"><code>foo</code></em>.install</code>.
</p>
                  </li>
                  <li class="listitem">
                    <p>
Genera dinamicamente dei file come
<code class="filename">debian/<em class="replaceable"><code>foo</code></em>.links</code> da
<code class="filename">debian/<em class="replaceable"><code>foo</code></em>.links.in</code>
aggiungendo un script al target di
<code class="literal">override_dh_auto_configure</code> in
<code class="filename">debian/rules</code>.
</p>
                    <pre class="screen">
override_dh_auto_configure:
        dh_auto_configure
        sed 's/@DEB_HOST_MULTIARCH@/$(DEB_HOST_MULTIARCH)/g' \
                debian/<em class="replaceable"><code>foo</code></em>.links.in &gt; debian/<em class="replaceable"><code>foo</code></em>.links
</pre>
                  </li>
                </ul>
              </div>
            </li>
          </ul>
        </div>
        <p>
Ci si assicuri di verificare che il pacchetto di libreria condivisa contenga
solo i file attesi, e che il pacchetto -dev continui a funzionare.
</p>
        <p>
Tutti i file installati contemporaneamente come pacchetto multiarch con lo
stesso percorso del file devono avere esattamente lo stesso contenuto. È
necessario prestare attenzione alle differenze generate dall'ordine dei byte
nei dati e dall'algoritmo di compressione.
</p>
      </div>
      <div class="section">
        <div class="titlepage">
          <div>
            <div>
              <h2 class="title"><a id="native-dh-make"/>A.5. Pacchetto nativo Debian</h2>
            </div>
          </div>
        </div>
        <p>
Se il pacchetto è mantenuto solo per Debian o per uso locale, il suo
sorgente potrebbe contenere tutti i file in <code class="filename">debian/*</code>.
In questo caso, ci sono 2 modi per pacchettizzarlo.
</p>
        <p>
È possibile creare l'archivio originale escludendo i file in
<code class="filename">debian/*</code> e pacchettizandolo come pacchetto Debian non
nativo, come descritto in <a class="xref" href="first.it.html#workflow" title="2.1. Flusso di lavoro per la costruzione dei pacchetti Debian">Sezione 2.1, «Flusso di lavoro per la costruzione dei pacchetti Debian»</a>.  Questo è il metodo
normale che alcune persone incoraggiano ad utilizzare.
</p>
        <p>
L'alternativa è utilizzare lo stesso metodo usato dai pacchetti Debian
nativi.
</p>
        <div class="itemizedlist">
          <ul class="itemizedlist">
            <li class="listitem">
              <p>
Creare un pacchetto sorgente nativo di Debian nel formato <code class="literal">3.0
(native)</code> usando un singolo file tar compresso che include tutti i
file.
</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>
                  <li class="listitem">
                    <code class="literal"><em class="replaceable"><code>pacchetto</code></em>_<em class="replaceable"><code>versione</code></em>.dsc</code>
                  </li>
                </ul>
              </div>
            </li>
            <li class="listitem">
              <p>
Costruire pacchetti binari Debian dal pacchetto sorgente nativo di 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>arch</code></em>.deb</code>
                  </li>
                </ul>
              </div>
            </li>
          </ul>
        </div>
        <p>
Per esempio, se si hanno i file sorgenti in
<code class="filename">~/mypackage-1.0</code> senza i file
<code class="filename">debian/*</code>, si può creare un pacchetto nativo Debian,
utilizzando il comando <span class="command"><strong>dh_make</strong></span> come segue:
</p>
        <pre class="screen">
$ cd ~/mypackage-1.0
$ dh_make --native
</pre>
        <p>
La directory <code class="filename">debian</code> e il suo contenuto, sono creati
proprio come <a class="xref" href="first.it.html#non-native-dh-make" title="2.8. Il primo pacchetto non nativo per Debian">Sezione 2.8, «Il primo pacchetto non nativo per Debian»</a>.  Questo non crea un
archivio poiché si tratta di un pacchetto Debian nativo.  Questa è l'unica
differenza.  Il resto delle attività di pacchettizzazione sono praticamente
le stesse.
</p>
        <p>
Dopo l'esecuzione del comando <span class="command"><strong>dpkg-buildpackage</strong></span>, si
possono vedere i seguenti file nella directory principale:
</p>
        <div class="itemizedlist">
          <ul class="itemizedlist">
            <li class="listitem">
              <p>
<code class="filename">mypackage_1.0.tar.gz</code>
</p>
              <p>
Questo è l'archivio del codice sorgente creato dalla directory
<code class="filename">mypackage-1.0</code> dal comando
<span class="command"><strong>dpkg-source</strong></span>. (Il suffisso non è
<code class="filename">orig.tar.gz</code>.)
</p>
            </li>
            <li class="listitem">
              <p>
<code class="filename">mypackage_1.0.dsc</code>
</p>
              <p>
Questo è un sommario del contenuto del codice sorgente, come per i pacchetti
non-nativi Debian. (non c'è revisione Debian.)
</p>
            </li>
            <li class="listitem">
              <p>
<code class="filename">mypackage_1.0_i386.deb</code>
</p>
              <p>
Questo è il pacchetto binario completo, come per i pacchetti non-nativi
Debian. (non c'è revisione Debian.)
</p>
            </li>
            <li class="listitem">
              <p>
<code class="filename">mypackage_1.0_i386.changes</code>
</p>
              <p>
Questo file descrive tutte le modifiche apportate nella versione attuale del
pacchetto, come per i pacchetti Debian non-nativi. (non c'è revisione
Debian.)
</p>
            </li>
          </ul>
        </div>
      </div>
      <div class="footnotes">
        <br/>
        <hr/>
        <div id="ftn.idm3840" class="footnote">
          <p><a href="#idm3840" class="para"><sup class="para">[87] </sup></a>
In alternativa: <code class="literal">readelf -d
lib<em class="replaceable"><code>foo</code></em>.so.<em class="replaceable"><code>1</code></em> | grep
SONAME</code>
</p>
        </div>
        <div id="ftn.idm3853" class="footnote">
          <p><a href="#idm3853" class="para"><sup class="para">[88] </sup></a>
In alternativa: <code class="literal">readelf -d
lib<em class="replaceable"><code>foo</code></em>.so.<em class="replaceable"><code>1</code></em> | grep
NEEDED</code>
</p>
        </div>
        <div id="ftn.idm3867" class="footnote">
          <p><a href="#idm3867" class="para"><sup class="para">[89] </sup></a>See <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-runtime">Manuale delle policy di Debian, 8.1
"Run-time shared libraries"</a>.</p>
        </div>
        <div id="ftn.idm3873" class="footnote">
          <p><a href="#idm3873" class="para"><sup class="para">[90] </sup></a>See <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-ldconfig">Manuale delle policy di Debian, 8.1.1
"ldconfig"</a>.</p>
        </div>
        <div id="ftn.idm3891" class="footnote">
          <p><a href="#idm3891" class="para"><sup class="para">[91] </sup></a>See <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-static">Manuale delle policy di Debian, 8.3 "Static
libraries"</a> e <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-dev">Manuale delle policy di
Debian, 8.4 "Development files"</a>.</p>
        </div>
        <div id="ftn.idm3898" class="footnote">
          <p><a href="#idm3898" class="para"><sup class="para">[92] </sup></a>Si veda <a class="ulink" href="http://wiki.debian.org/ReleaseGoals/LAFileRemoval">Debian wiki
ReleaseGoals/LAFileRemoval</a>.</p>
        </div>
        <div id="ftn.idm3903" class="footnote">
          <p><a href="#idm3903" class="para"><sup class="para">[93] </sup></a>Si veda <a class="ulink" href="http://wiki.debian.org/RpathIssue">Debian wiki RpathIssue</a>.</p>
        </div>
        <div id="ftn.idm3916" class="footnote">
          <p><a href="#idm3916" class="para"><sup class="para">[94] </sup></a>Le modifiche ABI incompatibili con le versioni precedenti, normalmente
rendono necessario aggiornare il SONAME della libreria e il nome del
pacchetto della libreria condivisa a quelli nuovi.</p>
        </div>
        <div id="ftn.idm3922" class="footnote">
          <p><a href="#idm3922" class="para"><sup class="para">[95] </sup></a>Per le librerie C++ e per gli altri casi in cui il tracciamento dei singoli
simboli è troppo difficile, si consulti invece <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-shlibdeps">Manuale delle policy di Debian, 8.6.4 "The
shlibs system"</a>, instead.</p>
        </div>
        <div id="ftn.idm3970" class="footnote">
          <p><a href="#idm3970" class="para"><sup class="para">[96] </sup></a>
Tutte la versioni precedenti del pacchetto Debian packages sono disponibili
su <a class="ulink" href="http://snapshot.debian.org/">http://snapshot.debian.org/</a>.  La
revisione Debian viene eliminata dalla versione per rendere più facile il
backport del pacchetto: <code class="literal">1.1</code> &lt;&lt;
<code class="literal">1.1-1~bpo70+1</code> &lt;&lt; <code class="literal">1.1-1</code> and
<code class="literal">1.2</code> &lt;&lt; <code class="literal">1.2-1~bpo70+1</code> &lt;&lt;
<code class="literal">1.2-1</code>
</p>
        </div>
        <div id="ftn.idm3990" class="footnote">
          <p><a href="#idm3990" class="para"><sup class="para">[97] </sup></a>
La revisione Debian viene eliminata dalla versione per rendere più facile il
backport del pacchetto: <code class="literal">1.3</code> &lt;&lt;
<code class="literal">1.3-1~bpo70+1</code> &lt;&lt; <code class="literal">1.3-1</code>
</p>
        </div>
        <div id="ftn.idm4002" class="footnote">
          <p><a href="#idm4002" class="para"><sup class="para">[98] </sup></a>
Si veda <a class="ulink" href="http://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-updates">Manuale delle policy di Debian,
8.6.2 "Shared library ABI changes"</a>.
</p>
        </div>
        <div id="ftn.idm4028" class="footnote">
          <p><a href="#idm4028" class="para"><sup class="para">[99] </sup></a>Vecchi percorsi di libreria, per scopi speciali, come
<code class="filename">/lib32/</code> and <code class="filename">/lib64/</code> non sono più
utilizzati.</p>
        </div>
        <div id="ftn.idm4190" class="footnote">
          <p><a href="#idm4190" class="para"><sup class="para">[100] </sup></a>
In alternativa, si possono aggiungere gli argomenti
<code class="literal">--libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH)</code> e
<code class="literal">--libexecdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH)</code> a
<code class="literal">./configure</code>.  Si noti che <code class="literal">--libexecdir</code>
indica il percorso predefinito d'installazione dei programmi eseguibili
gestiti da altri programmi e non dagli utenti.  Il percorso predefinito di
Autotools è <code class="filename">/usr/libexec/</code> mentre quello di Debian è
<code class="filename">/usr/lib/</code>.
</p>
        </div>
      </div>
    </div>
    <div class="navfooter">
      <hr/>
      <table width="100%" summary="Navigation footer">
        <tr>
          <td align="left"><a accesskey="p" href="upload.it.html"><img src="images/prev.png" alt="Indietro"/></a> </td>
          <td align="center"> </td>
          <td align="right"> </td>
        </tr>
        <tr>
          <td align="left" valign="top">Capitolo 9. Caricamento del pacchetto </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"> </td>
        </tr>
      </table>
    </div>
  </body>
</html>