| 1 |
<!doctype debiandoc system>
|
| 2 |
|
| 3 |
<debiandoc>
|
| 4 |
|
| 5 |
<book>
|
| 6 |
|
| 7 |
<titlepag>
|
| 8 |
|
| 9 |
<title>Guida per il nuovo Maintainer</title>
|
| 10 |
|
| 11 |
<author>Josip Rodin <email/jrodin@jagor.srce.hr/
|
| 12 |
</author>
|
| 13 |
<author>Traduzione: Francesco P. Lovergine <email/frankie@debian.org/
|
| 14 |
</author>
|
| 15 |
|
| 16 |
<version>versione 1.2, 6 Aprile 2002.</version>
|
| 17 |
|
| 18 |
<copyright>
|
| 19 |
<copyrightsummary>Copyright © 1998-2002 Josip Rodin.</copyrightsummary>
|
| 20 |
|
| 21 |
<p>Questa guida può essere utilizzata nei termini della GNU General Public License
|
| 22 |
versione 2 o successive.
|
| 23 |
|
| 24 |
<p>Questo documento è stato realizzato utilizzando come modello i documenti seguenti:
|
| 25 |
|
| 26 |
<p>Making a Debian Package (noto come Manuale di Debmake), copyright ©
|
| 27 |
1997 Jaldhar Vyas.
|
| 28 |
|
| 29 |
<p>The New-Maintainer's Debian Packaging Howto, copyright © 1997
|
| 30 |
Will Lowe.
|
| 31 |
</copyright>
|
| 32 |
|
| 33 |
</titlepag>
|
| 34 |
|
| 35 |
<toc sect>
|
| 36 |
|
| 37 |
<chapt id="start">Partire "nel modo giusto"
|
| 38 |
|
| 39 |
<p>Questo documento proverà a descrivere la costruzione di un pacchetto
|
| 40 |
Debian GNU/Linux per un comune utente Debian (e aspirante sviluppatore),
|
| 41 |
utilizzando un linguaggio immediato e con l'ausilio di esempi concreti.
|
| 42 |
C'è un detto latino che dice <em> Longum iter est per preaecepta, breve
|
| 43 |
et efficax per exempla!</em> (La via è lunga usando la teoria,
|
| 44 |
ma breve ed efficiente con gli esempi!).
|
| 45 |
|
| 46 |
<p>Una cosa che rende Debian una distribuzione Linux di prima scelta,
|
| 47 |
è il suo sistema di pacchettizzazione. Sebbene ci sia una vasta quantità
|
| 48 |
di software già in formato Debian, qualche volta è necessario installare
|
| 49 |
del software che non lo è.
|
| 50 |
Potresti chiederti come creare personalmente i tuoi pacchetti e forse
|
| 51 |
pensare che sia un compito molto difficile. In effetti, se sei un
|
| 52 |
novizio di Linux è dura, ma se sei un un utente stagionato non puoi
|
| 53 |
non leggere questo documento subito :-) Avrai bisogno di conoscere
|
| 54 |
dei rudimenti di programmazione Unix, ma certamente non occorrerà che
|
| 55 |
tu sia un mago della programmazione.
|
| 56 |
|
| 57 |
<p>Una cosa è certa, però: per creare propriamente e manutenere
|
| 58 |
pacchetti Debian ti occorrono ore-uomo di lavoro. Non commettere errori, per
|
| 59 |
far funzionare il nostro sistema, i maintainer necessitano di essere
|
| 60 |
insieme tecnicamente competenti e diligenti.
|
| 61 |
|
| 62 |
<p>Questo documento spiegherà ogni piccolo (e in apparenza irrilevante)
|
| 63 |
passo, e ti aiuterà a creare il tuo primo pacchetto, e conseguire
|
| 64 |
qualche esperienza nel costruire i successivi rilasci di questo e forse
|
| 65 |
altri pacchetti più in là.
|
| 66 |
|
| 67 |
<p>Versioni aggiornate di questo documento dovrebbero sempre essere
|
| 68 |
disponibili all'indirizzo
|
| 69 |
<url name="http://www.debian.org/doc/maint-guide/" id="http://www.debian.org/doc/maint-guide/">
|
| 70 |
e nel pacchetto `<package/maint-guide/'.
|
| 71 |
La traduzione in italiano è anche disponibile nel pacchetto `<package/maint-guide-it/'.
|
| 72 |
|
| 73 |
<sect id="needprogs">Programmi necessari per lo sviluppo
|
| 74 |
|
| 75 |
<p>Prima di iniziare, dovresti assicurarti di avere correttamente
|
| 76 |
installati alcuni pacchetti addizionali, necessari per lo sviluppo
|
| 77 |
del software. Osserva che la lista non contiene alcun pacchetto
|
| 78 |
etichettato `essential' o `required' - ci aspettiamo che tu li abbia
|
| 79 |
già installati.
|
| 80 |
|
| 81 |
<p>Questa revisione del documento è stata aggiornata per i
|
| 82 |
pacchetti in Debian 2.2 (`potato') and 3.0 (`woody').
|
| 83 |
|
| 84 |
<p>I pacchetti seguenti fanno parte della installazione standard della
|
| 85 |
Debian, per cui probabilmente li hai già installati (insieme ai
|
| 86 |
pacchetti addizionali dai quali dipendono). Comunque dovresti
|
| 87 |
controllare con `dpkg -s <package>'.
|
| 88 |
|
| 89 |
<list>
|
| 90 |
<item><package/dpkg-dev/ - questo pacchetto contiene gli
|
| 91 |
strumenti necessari per spacchettare, creare e caricare i pacchetti
|
| 92 |
sorgenti Debian. (vedi
|
| 93 |
<manref name="dpkg-source" section="1">)
|
| 94 |
|
| 95 |
<item><package/file/ - questo comodo programma può stabilire la
|
| 96 |
tipologia di un file.
|
| 97 |
(vedi <manref name="file" section="1">)
|
| 98 |
|
| 99 |
<item><package/gcc/ - il compilatore GNU C, necessario se il tuo programma
|
| 100 |
come molti altri è scritto nel linguaggio di programmazione C.
|
| 101 |
(vedi <manref name="gcc" section="1">,
|
| 102 |
Questo pacchetto caricherà anche un gruppo di altri pacchetti come
|
| 103 |
<package/binutils/ che include programmi usati per assemblare e
|
| 104 |
linkare file oggetto (vedi `info binutils` nel pacchetto
|
| 105 |
<package/binutils-doc/)
|
| 106 |
e <package/cpp/, il preprocessore C.
|
| 107 |
(vedi <manref name="cpp" section="1">)
|
| 108 |
|
| 109 |
<item><package/g++/ - il compilatore GNU C++, necessario se il tuo
|
| 110 |
programma è scritto in C++. (vedi <manref name="g++" section="1">).
|
| 111 |
|
| 112 |
<item><package/libc6-dev/ - le librerie e i file header che il gcc
|
| 113 |
richiede per la compilazione e il link dei file oggetto.
|
| 114 |
(vedi `info libc' nel pacchetto <package/glibc-doc/)
|
| 115 |
|
| 116 |
<item><package/make/ - generalmente la creazione di programmi richiede
|
| 117 |
una serie di passi. Piuttosto di riscrivere continuamente gli stessi
|
| 118 |
comandi, puoi utilizzare questo programma per automatizzare il
|
| 119 |
processo, creando dei `Makefile'. (vedi `info make`)
|
| 120 |
|
| 121 |
<item><package/patch/ - questo programma di utilità molto utile
|
| 122 |
impiega un file
|
| 123 |
contenente una lista di differenze (prodotta dal programma diff) e
|
| 124 |
la applica al file originale, per produrre una versione modificata.
|
| 125 |
(vedi <manref name="patch" section="1">)
|
| 126 |
|
| 127 |
<item><package/perl/ - Perl è uno dei linguaggi per script
|
| 128 |
interpretati più utilizzati sui moderni sistemi simil-Unix, spesso definito
|
| 129 |
come "il coltellino svizzero di Unix".
|
| 130 |
(vedi <manref name="perl" section="1">)
|
| 131 |
</list>
|
| 132 |
|
| 133 |
<p>Probabilmente vorrai installare i pacchetti seguenti, anche:
|
| 134 |
|
| 135 |
<list>
|
| 136 |
|
| 137 |
<item><package/autoconf/ e <package/automake/ - molti programmi
|
| 138 |
nuovi usano script di configurazione e Makefile preprocessati
|
| 139 |
con l'aiuto di programmi come questi. (vedi `info autoconf`, `info automake`)
|
| 140 |
|
| 141 |
<item><package/dh-make/ e <package/debhelper/- dh-make è necessario per
|
| 142 |
creare lo skeleton del nostro pacchetto di esempio, e utilizzerà alcuni
|
| 143 |
strumenti di debhelper per creare i pacchetti. Non sono essenziali per la
|
| 144 |
creazione di pacchetti, ma sono <strong>altamente</strong> raccomandati
|
| 145 |
per i nuovi maintainer. Questo rende l'intero processo molto più
|
| 146 |
semplice da iniziare e controllare successivamente. (vedi
|
| 147 |
<manref name="dh_make" section="1">,
|
| 148 |
<manref name="debhelper" section="1">, /usr/share/doc/debhelper/README)
|
| 149 |
|
| 150 |
<item><package/devscripts/ - questo pacchetto contiene alcuni utili
|
| 151 |
script che possono essere di aiuto per il maintainer, ma anche questi
|
| 152 |
non sono strettamente necessari per la creazione di pacchetti. (vedi
|
| 153 |
/usr/share/doc/devscripts/README.gz)
|
| 154 |
|
| 155 |
<item><package/fakeroot/ - questa programma di utilità permette di emulare i
|
| 156 |
privilegi di root necessari per alcune parti del processo di creazione.
|
| 157 |
(vedi <manref name="fakeroot" section="1">)
|
| 158 |
|
| 159 |
<item><package/gnupg/ - un programma che ti consente di <em>firmare</em>
|
| 160 |
elettronicamente i pacchetti. Questo è soprattutto importante se vuoi
|
| 161 |
distribuirli ad altre persone, e certamente lo farai quando il tuo
|
| 162 |
lavoro verrà incluso nella distribuzione Debian.
|
| 163 |
(vedi <manref name="gpg" section="1">)
|
| 164 |
|
| 165 |
<item><package/g77/ - il compilatore GNU Fortran 77, necessario se il
|
| 166 |
tuo programma è scritto in Fortran. (vedi <manref name="g77" section="1">)
|
| 167 |
|
| 168 |
<item><package/gpc/ - il compilatore GNU Pascal, necessario se il tuo
|
| 169 |
programma è scritto in Pascal. Degno di nota qui è <package/fp-compiler/,
|
| 170 |
il Compilatore Free Pascal, che è anche adatto a questo compito.
|
| 171 |
(vedi <manref name="gpc" section="1">, <manref name="ppc386" section="1">)
|
| 172 |
|
| 173 |
<item><package/imake/ e <package/xmkmf/ - alcuni programmi, generalmente
|
| 174 |
quelli fatti per X11, usano anche questi programmi per generare i Makefile
|
| 175 |
da insiemi di macro funzioni. (vedi <manref name="imake" section="1">,
|
| 176 |
<manref name="xmkmf" section="1">)
|
| 177 |
|
| 178 |
<item><package/lintian/ - questo è il verificatore dei pacchetti Debian,
|
| 179 |
che permette di scoprire errori comuni dopo la costruzione del
|
| 180 |
pacchetto e spiega gli errori trovati. (vedi
|
| 181 |
<manref name="lintian" section="1">,
|
| 182 |
/usr/share/doc/lintian/lintian.html/index.html)
|
| 183 |
</list>
|
| 184 |
|
| 185 |
<p>Quanto segue è la documentazione <em>molto importante</em>
|
| 186 |
che dovresti leggere insieme a questo documento:
|
| 187 |
|
| 188 |
<list>
|
| 189 |
<item><package/debian-policy/ - la Policy include la struttura e i contenuti
|
| 190 |
dell'archivio, una serie di indicazioni sul disegno del sistema operativo,
|
| 191 |
lo Standard della Gerarchia del Filesystem (che dice dove ogni file
|
| 192 |
e directory dovrebbe stare), ecc.
|
| 193 |
La cosa che per te è più importante è
|
| 194 |
che descrive gli obblighi che ogni pacchetto deve soddisfare per
|
| 195 |
essere incluso nella distribuzione. (vedi
|
| 196 |
/usr/share/doc/debian-policy/policy.html/index.html)
|
| 197 |
|
| 198 |
<item><package/developers-reference/ - contiene tutto il materiale non
|
| 199 |
specificatamente relativo ai dettagli tecnici della pacchettizzazione,
|
| 200 |
come la struttura dell'archivio, come rinominare, rendere orfano o
|
| 201 |
prendere in carico un pacchetto, come fare gli NMU, come gestire
|
| 202 |
i bug, quando e dove fare i caricamenti, ecc.
|
| 203 |
(vedi /usr/share/doc/developers-reference/developers-reference.html/index.html)
|
| 204 |
</list>
|
| 205 |
|
| 206 |
<p>Le brevi note date sino a questo punto servono solo come
|
| 207 |
introduzione a cosa ciascun pacchetto fa. Prima di continuare, leggi
|
| 208 |
approfonditamente la documentazione di ogni programma, almeno per
|
| 209 |
un uso standard. Potrà sembrarti molto pesante farlo adesso, ma
|
| 210 |
più avanti sarai <em>lietissimo</em> di averlo fatto.
|
| 211 |
|
| 212 |
Nota: <package/debmake/ è un pacchetto che contiene alcuni programmi
|
| 213 |
con funzioni simile a dh-make, ma il suo specifico uso
|
| 214 |
<strong>non</strong> è illustrato in questo documento, perchè il suo
|
| 215 |
uso è <em>sconsigliato</em>.
|
| 216 |
Si rimanda al <url name="manuale di Debmake"
|
| 217 |
id="http://www.debian.org/~jaldhar/"> per maggiori informazioni.
|
| 218 |
|
| 219 |
<sect id="otherinfo">Altre informazioni
|
| 220 |
|
| 221 |
<p>Ci sono due tipi di pacchetti che puoi creare, sorgente e binario.
|
| 222 |
Un pacchetto sorgente contiene codice che puoi compilare in un
|
| 223 |
programma. Un pacchetto binario contiene il solo programma finito.
|
| 224 |
Non confondere il sorgente di un programma con i sorgenti del pacchetto
|
| 225 |
del programma! Leggi gli altri manuali se hai necessità di avere
|
| 226 |
maggiori dettagli sulla terminologia.
|
| 227 |
|
| 228 |
<p>In Debian, il termine `maintainer' è utilizzato per la persona che
|
| 229 |
crea pacchetti, `upstream author' per chi ha realizzato il programma,
|
| 230 |
e `upstream maintainer' per la persona che correntemente manutiene
|
| 231 |
quel programma, al di fuori di Debian. Generalmente author e upstream
|
| 232 |
maintainer sono la stessa persona - e talvolta anche il maintainer
|
| 233 |
è la stessa persona. Se hai realizzato un programma, e vuoi che faccia
|
| 234 |
parte di Debian, sentiti libero di sottomettere la richiesta per
|
| 235 |
diventare un maintainer.
|
| 236 |
|
| 237 |
<p>Una volta creato il pacchetto (o mentre lo fai), dovrai diventare
|
| 238 |
un maintainer Debian ufficiale, se vuoi che il tuo programma vada a
|
| 239 |
far parte della prossima distribuzione (se il programma è utile
|
| 240 |
perché no?). La procedura è spiegata nella Guida di Riferimento
|
| 241 |
per lo Sviluppatore. Sei pregato di leggerla.
|
| 242 |
|
| 243 |
<chapt id="first">Primi passi
|
| 244 |
|
| 245 |
<sect id="choose">Scegli il tuo programma
|
| 246 |
|
| 247 |
<p>Devi probabilmente scegliere il pacchetto che vuoi creare. La prima
|
| 248 |
cosa da fare è controllare se il pacchetto è già nella distribuzione.
|
| 249 |
Se usi la distribuzione `stabile', forse è meglio che tu
|
| 250 |
vada all'indirizzo
|
| 251 |
<url name="pagina di ricerca dei pacchetti" id="http://www.debian.org/distrib/packages">.
|
| 252 |
Se usi la <strong>corrente</strong> distribuzione `instabile', verificalo
|
| 253 |
con i comandi:
|
| 254 |
<example>
|
| 255 |
dpkg -s program
|
| 256 |
dpkg -l '*program*'
|
| 257 |
</example>
|
| 258 |
|
| 259 |
<p>Se il pacchetto già esiste, bene, installalo! :-) Se fosse stato
|
| 260 |
reso orfano -- se il suo maintainer è configurato come "Debian QA Group",
|
| 261 |
dovresti essere in grado di prenderlo in carico. Consulta
|
| 262 |
<url name="lista dei pacchetti orfani" id="http://www.debian.org/devel/wnpp/orphaned">
|
| 263 |
e
|
| 264 |
<url name="la lista dei pacchetti in adozione" id="http://www.debian.org/devel/wnpp/rfa_bypackage">
|
| 265 |
per verificare che il pacchetto sia effettivamente disponibile.
|
| 266 |
|
| 267 |
<p>Se sei in grado di adottare il pacchetto, prendi i sorgenti (con qualcosa
|
| 268 |
come <tt/apt-get source packagename/) ed esaminali. Questo documento
|
| 269 |
purtroppo non include informazioni esaustive sulla adozione
|
| 270 |
di pacchetti. Fortunatamente non dovrai fare un duro lavoro per capire
|
| 271 |
come il pacchetto funziona poichè qualcuno avrà già fatto la configurazione
|
| 272 |
iniziale al posto tuo. Continua a leggere comunque, molti dei suggerimenti
|
| 273 |
nel seguito saranno ancora applicabili nel tuo caso.
|
| 274 |
|
| 275 |
<p>Se il pacchetto è nuovo, e decidi che ti piacerebbe facesse parte
|
| 276 |
di Debian, procedi come segue:
|
| 277 |
|
| 278 |
<list>
|
| 279 |
<item>consulta la <url name="la lista dei pacchetti sui quali si lavora" id="http://www.debian.org/devel/wnpp/being_packaged">
|
| 280 |
per vedere se qualcun altro sta lavorando sullo stesso pacchetto.
|
| 281 |
Se così fosse, contatta il maintainer corrente se pensi che occorra.
|
| 282 |
Altrimenti - trova un altro programma interessante che nessuno
|
| 283 |
ha in mantenimento.
|
| 284 |
</item>
|
| 285 |
|
| 286 |
<item>il programma <strong>deve</strong> avere una licenza,
|
| 287 |
se possibile free, in accordo con le
|
| 288 |
<url name="Linee Guida per il Software Libero Debian" id="http://www.debian.org/social_contract.html#guidelines">.
|
| 289 |
Se non è conforme a qualcuna di tali regole, ma può comunque
|
| 290 |
essere distribuito, può ancora essere incluso nelle sezioni
|
| 291 |
`contrib' o `non-free'..
|
| 292 |
Se non sei sicuro di dove debba essere incluso chiedi un suggerimento
|
| 293 |
su <email/debian-legal@lists.debian.org/.
|
| 294 |
</item>
|
| 295 |
|
| 296 |
<item>il programma in questione certamente <strong>non</strong>
|
| 297 |
dovrebbe girare come setuid root, o anche meglio, non dovrebbe richiedere di essere
|
| 298 |
setuid o setgid a nessun utente.</item>
|
| 299 |
|
| 300 |
<item>il programma non dovrebbe essere un daemon, o qualcosa che
|
| 301 |
debba essere installato nelle directory */sbin, o aprire una porta
|
| 302 |
come root.
|
| 303 |
</item>
|
| 304 |
|
| 305 |
<item>il programma dovrebbe essere in forma di binario eseguibile,
|
| 306 |
le librerie sono più difficili da gestire.
|
| 307 |
</item>
|
| 308 |
|
| 309 |
<item>dovrebbe essere ben documentato, o almeno comprensibile (cioè
|
| 310 |
non confuso).
|
| 311 |
</item>
|
| 312 |
|
| 313 |
<item>dovresti contattare l'autore o gli autori del programma per
|
| 314 |
controllare che siano d'accordo con la sua pacchettizzazione.
|
| 315 |
È importante essere in grado di consultarsi con l'autore/i sul
|
| 316 |
programma nel caso di problemi specifici del programma, per cui
|
| 317 |
non provare a pacchettizzare prodotti software non in manutenzione.
|
| 318 |
</item>
|
| 319 |
|
| 320 |
<item>infine, cosa non meno importante, dovresti essere sicuro che
|
| 321 |
il programma funziona e averlo provato per un po'.
|
| 322 |
</item>
|
| 323 |
</list>
|
| 324 |
|
| 325 |
<p>
|
| 326 |
Ovviamente queste cose sono solo misure di sicurezza, intese per
|
| 327 |
salvarti dall'ira degli utenti se fai qualcosa di sbagliato in
|
| 328 |
qualche daemon setuid...
|
| 329 |
Una volta acquisita qualche esperienza nella pacchettizzazione, sarai
|
| 330 |
anche in grado di creare quel tipo di pacchetti, ma anche lo
|
| 331 |
sviluppatore più esperto consulta la mailing list debian-devel quando
|
| 332 |
ha qualche dubbio. E i partecipanti saranno lieti di darti una mano.
|
| 333 |
|
| 334 |
<p>Per maggiori informazioni su queste cose, consulta la Guida di
|
| 335 |
Riferimento per lo Sviluppatore.
|
| 336 |
|
| 337 |
<sect id="getit">Prendi il programma e provalo
|
| 338 |
|
| 339 |
<p>La prima cosa da fare è trovare e scaricare il pacchetto originale.
|
| 340 |
Sto supponendo che tu abbia già i file dei sorgenti recuperati dalla
|
| 341 |
homepage dell'autore. I sorgenti per programmi free Linux sono
|
| 342 |
generalmente in formato tar/gzip,
|
| 343 |
con estensione .tar.gz, contengono
|
| 344 |
una subdirectory dal nome programma-versione e tutti i sorgenti sotto
|
| 345 |
di essa. Se il sorgente è in qualche altro formato di archiviazione
|
| 346 |
(per esempio, il nome del file finisce in ".Z" o ".zip") scompattalo
|
| 347 |
con i programmi appropriati, o chiedi a un esperto Debian se non sei
|
| 348 |
sicuro su come scompattarlo correttamente (suggerimento: usa il comando
|
| 349 |
`file archivio.estensione').
|
| 350 |
|
| 351 |
<p>A titolo di esempio, utilizzerò un programma dal nome `gentoo',
|
| 352 |
un file manager per X basato su GTK+. Osserva che il programma in
|
| 353 |
questione è già pacchettizzato ed ha subito sostanziali modifiche
|
| 354 |
dal momento in cui questo testo è stato inizialmente scritto.
|
| 355 |
|
| 356 |
<p>Crea una sottodirectory nella tua home dal nome `debian' o `deb'
|
| 357 |
o un altro nome che ritieni appropriato (per es. anche ~/gentoo/
|
| 358 |
sarebbe adatto in questo caso). Sposta l'archivio scaricato in essa
|
| 359 |
e scompattalo (con `tar xzf gentoo-0.9.12.tar.gz'). Assicurati che
|
| 360 |
non ci siano errori, anche qualcuno "irrilevante," perché potrebbe
|
| 361 |
probabilmente dare problemi di spacchettamento sul sistema di altri,
|
| 362 |
i cui programmi di scompattazione potrebbero o meno ignorare tali
|
| 363 |
anomalie.
|
| 364 |
|
| 365 |
<p>A questo punto hai un'altra sottodirectory, dal nome
|
| 366 |
`gentoo-0.9.12'. Spostati sotto tale directory e leggi
|
| 367 |
<strong>approfonditamente</strong> la documentazione fornita.
|
| 368 |
Generalmente ci sono file come README*, INSTALL*, *.lsm o *.html.
|
| 369 |
Devi trovare le istruzioni su come compilare correttamente e
|
| 370 |
installare il programma (molto probabilmente, si assume che tu voglia
|
| 371 |
installare sotto /usr/local/bin; non lo farai, ma trovi altro su
|
| 372 |
questo argomento più in là in <ref id="destdir">).
|
| 373 |
|
| 374 |
<p>La procedura cambia da programma a programma, ma molti dei
|
| 375 |
programmi più recenti hanno uno script `configure' che configura
|
| 376 |
i sorgenti sotto il tuo sistema e ti assicura che il sistema sia
|
| 377 |
nella condizioni di compilarli. Dopo la configurazione (con
|
| 378 |
il comando `./configure'), i programmi sono generalmente compilati
|
| 379 |
con `make'. Alcuni supportano il comando `make check' per lanciare
|
| 380 |
dei controlli automatici inclusi. L'installazione nelle directory
|
| 381 |
destinazione viene generalmente fatta con `make install'.
|
| 382 |
|
| 383 |
<p>Adesso prova a compilare ed eseguire il programma, per essere sicuro
|
| 384 |
che lavori correttamente e niente sia andato male durante
|
| 385 |
l'installazione o l'esecuzione.
|
| 386 |
|
| 387 |
<p>Puoi anche lanciare generalmente `make clean' per rimuovere i
|
| 388 |
file installati (o meglio ancora `make distclean') per
|
| 389 |
ripulire la directory di compilazione. Talvolta c'e' anche un
|
| 390 |
`make uninstall` che può essere usato per rimuovere tutti
|
| 391 |
i file installati.
|
| 392 |
|
| 393 |
<sect id="namever">Nome del pacchetto e versione
|
| 394 |
|
| 395 |
<p>Dovresti iniziare la pacchettizzazione con una directory di
|
| 396 |
sorgenti completamente ripulita, o semplicemente partendo da una
|
| 397 |
nuova scompattazione dei sorgenti.
|
| 398 |
|
| 399 |
<p>Per costruire correttamente il pacchetto, dovresti modificare il nome
|
| 400 |
del programma originale in minuscolo (se già non lo fosse), e
|
| 401 |
rinominare la directory in <pacchetto>-<versione>.
|
| 402 |
|
| 403 |
<p>Se il nome del programma consiste di più di una parola, contrailo
|
| 404 |
in una sola parola, o fanne una abbreviazione. Per esempio, il
|
| 405 |
pacchetto del programma "John's little editor for X" potrebbe essere
|
| 406 |
chiamato johnledx o jle4x, o qualsiasi altra cosa tu decida in modo
|
| 407 |
da stare sotto un numero ragionevole di caratteri, per esempio 20.
|
| 408 |
|
| 409 |
<p>Controlla anche l'esatta versione del programma (che deve
|
| 410 |
essere inclusa nella versione del pacchetto). Se il programma non è
|
| 411 |
numerato con versioni quali X.Y.Z, ma con qualche tipo di data, sei
|
| 412 |
libero di utilizzare tale data come numero di versione, con un
|
| 413 |
prefisso "0.0." (giusto nel caso in cui un upstream, un giorno, decida
|
| 414 |
di rilasciare una versione più comoda come "1.0"). Così se la data
|
| 415 |
di rilascio fosse il 19 Dicembre 1998, potresti usare la stringa
|
| 416 |
di versione 0.0.19981219.
|
| 417 |
|
| 418 |
<p>Alcuni programmi non hanno affatto una
|
| 419 |
numerazione, nel qual caso dovresti contattare l'upstream maintainer,
|
| 420 |
per vedere se viene usato qualche altro metodo di revisione.
|
| 421 |
|
| 422 |
<sect id="dh_make">La "debianizzazione" iniziale
|
| 423 |
|
| 424 |
<p>Assicurati di trovarti nella directory dei sorgenti del programma
|
| 425 |
e lancia il comando seguente:
|
| 426 |
|
| 427 |
<p><example>
|
| 428 |
dh_make -e tuo.maintainer@indirizzo -f ../gentoo-0.9.12.tar.gz
|
| 429 |
</example>
|
| 430 |
|
| 431 |
<p>Ovviamente, sostituisci alla stringa "tuo.maintainer@indirizzo" il tuo
|
| 432 |
indirizzo e-mail da includere come voce del changelog e in altri
|
| 433 |
file, e al nome del file il nome originale dell'archivio dei sorgenti.
|
| 434 |
Vedi <manref name="dh_make" section="1"> per dettagli.
|
| 435 |
|
| 436 |
<p>Verranno visualizzate alcune informazioni. Ti verrà chiesto che
|
| 437 |
genere di pacchetto vuoi creare. Gentoo è un singolo pacchetto binario
|
| 438 |
- crea un solo binario, e perciò un solo file .deb - per cui
|
| 439 |
selezionerai la prima opzione con il tasto `s', e controllerai le
|
| 440 |
informazioni sullo schermo, confermando la scelta con <invio>.
|
| 441 |
|
| 442 |
<p>Ancora una volta, come nuovo maintainer non sei incoraggiato a
|
| 443 |
creare pacchetti con
|
| 444 |
binari multipli o librerie, come spiegato prima. Non è difficile,
|
| 445 |
ma richiede un po' di conoscenze ulteriori, per
|
| 446 |
cui non descriveremo tutto questo nel seguito.
|
| 447 |
|
| 448 |
<p>Osserva che dovresti lanciare dh_make <strong>una sola volta</strong>,
|
| 449 |
perché non avrebbe un comportamento corretto se lo eseguissi nuovamente
|
| 450 |
nella stessa directory già "debianizzata". Questo significa anche che
|
| 451 |
userai un metodo diverso per rilasciare una nuova revisione o una
|
| 452 |
nuova versione del tuo pacchetto, in futuro. Leggi altro in merito più
|
| 453 |
oltre in <ref id="update">
|
| 454 |
|
| 455 |
<chapt id="modify">Modificare i sorgenti
|
| 456 |
|
| 457 |
<p>Normalmente, i programmi si auto-installano in sottodirectory di /usr/local
|
| 458 |
I pacchetti Debian invece non usano quella directory, dal momento che
|
| 459 |
è riservata agli amministratori (o utenti) del sistema per uso
|
| 460 |
privato. Questo significa che dovrai dare una occhiata al sistema
|
| 461 |
di compilazione del programma, partendo generalmente dal Makefile.
|
| 462 |
Questo script sarà utilizzato da <manref name="make" section="1"> per
|
| 463 |
creare automaticamente il programma. Per maggiori dettagli sui
|
| 464 |
Makefile dai una occhiata a <ref id="rules">.
|
| 465 |
|
| 466 |
<p>Osserva che se il tuo programma utilizza l'utilità GNU
|
| 467 |
<manref name="automake" section="1">
|
| 468 |
e/o <manref name="autoconf" section="1">, questo significa che i
|
| 469 |
sorgenti includono un Makefile.am e/o Makefile.in rispettivamente, e
|
| 470 |
avrai bisogno di modificare questi ultimi file, poiché ogni esecuzione
|
| 471 |
di automake provoca la riscrittura di Makefile.in con informazioni
|
| 472 |
generate a partire dal suo file Makefile.am, e ogni esecuzione di
|
| 473 |
./configure farà lo stesso con il corrispondente Makefile, con i dati
|
| 474 |
ricavati dal file Makefile.in. Modificare i file Makefile.am richiede
|
| 475 |
qualche conoscenza di automake - del quale puoi leggere la relativa
|
| 476 |
documentazione in formato info - mentre modificare
|
| 477 |
Makefile.in è molto simile a
|
| 478 |
modificare i Makefile, in più ponendo attenzione alle
|
| 479 |
variabili, ovvero qualsiasi stringa di caratteri compresa fra `@',
|
| 480 |
come ad esempio @CFLAGS@ or @LN_S@, che viene sostituita con
|
| 481 |
l'effettivo valore ad ogni invocazione di ./configure.
|
| 482 |
|
| 483 |
<p>Nota anche che in questo documento, non c'è spazio sufficiente
|
| 484 |
per entrare in tutti i dettagli di come fare le modifiche, ma di
|
| 485 |
seguito ecco alcuni problemi che spesso si incontrano.
|
| 486 |
|
| 487 |
<sect id="destdir">Installazione in una sotto-directory
|
| 488 |
|
| 489 |
<p>
|
| 490 |
La maggior parte dei programmi ha una qualche maniera di installarsi
|
| 491 |
in una struttura di directory pre-esistente del tuo sistema,
|
| 492 |
in modo che i binari vengano inclusi nel $PATH, e si possano trovare
|
| 493 |
le pagine di manuale e i programmi in locazioni comuni.
|
| 494 |
Tuttavia, se facessi questo, il programma sarebbe installato tra
|
| 495 |
ogni altra cosa già presente sul tuo sistema. Questo renderebbe
|
| 496 |
difficile per i programmi di pacchettizzazione capire quali file
|
| 497 |
appartengono al tuo pacchetto e quali no.
|
| 498 |
|
| 499 |
<p>Perciò dovrai fare qualcosa di diverso:
|
| 500 |
installa il programma in una sotto-directory temporanea
|
| 501 |
dalla quale dli strumenti di manutenzione costruiranno un pacchetto .deb
|
| 502 |
operativo. Ogni file contenuto in tale directory sarà installato
|
| 503 |
sul sistema dell'utente, quando questi installa il tuo pacchetto, la
|
| 504 |
sola differenza è che dpkg installerà i file a partire dalla radice.
|
| 505 |
|
| 506 |
<p>Questa directory temporanea è generalmente creata sotto la tua
|
| 507 |
directory debian/ nell'albero dei sorgenti spacchettato. Si chiama
|
| 508 |
generalmente <file>debian/tmp</file> oppure
|
| 509 |
<file>debian/nomepacchetto</file>.
|
| 510 |
|
| 511 |
<p>
|
| 512 |
Tieni a mente che anche se avrai bisogno che il programma venga installato
|
| 513 |
in debian/nomepacchetto, deve funzionare correttamente quando piazzato
|
| 514 |
nella radice, cioè quando viene installato a partire dal pacchetto .deb.
|
| 515 |
Così, non dovrai consentire che il sistema di compilazione inserisca
|
| 516 |
stringhe come
|
| 517 |
<tt>/home/me/deb/gentoo-0.9.12/usr/share/gentoo</tt> nei file
|
| 518 |
del pacchetto.
|
| 519 |
|
| 520 |
Con programmi che
|
| 521 |
usano GNU autoconf, questo è piuttosto semplice,
|
| 522 |
La maggior parte di questi programmi hanno makefile che sono creati
|
| 523 |
per default per consentire installazioni in directory casuali,
|
| 524 |
sebbene mantengano /usr (ad esempio) come prefisso canonico.
|
| 525 |
Quando si accorgerà che il programma usa autoconf, dh_make
|
| 526 |
fornirà i comandi per fare tutto questo automaticamente, per cui
|
| 527 |
potresti saltare la lettura di questa sezione. Invece con altri
|
| 528 |
programmi, dovrai probabilmente esaminare e modificare i Makefile.
|
| 529 |
|
| 530 |
<p>Questa è la parte rilevante del Makefile di gentoo:
|
| 531 |
|
| 532 |
<p><example>
|
| 533 |
# Where to put binary on 'make install'?
|
| 534 |
BIN = /usr/local/bin
|
| 535 |
|
| 536 |
# Where to put icons on 'make install'?
|
| 537 |
ICONS = /usr/local/share/gentoo/
|
| 538 |
</example>
|
| 539 |
|
| 540 |
<p>Osserva che il file sono configurati per installare sotto
|
| 541 |
<file>/usr/local</file>. Modifica questi percorsi in:
|
| 542 |
|
| 543 |
<p><example>
|
| 544 |
# Where to put binary on 'make install'?
|
| 545 |
BIN = $(DESTDIR)/usr/bin
|
| 546 |
|
| 547 |
# Where to put icons on 'make install'?
|
| 548 |
ICONS = $(DESTDIR)/usr/share/gentoo
|
| 549 |
</example>
|
| 550 |
|
| 551 |
<p>Ma perchè in quella directory, e non altrove? Perchè i pacchetti
|
| 552 |
Debian non installano mai file sotto <file>/usr/local</file> -- quella
|
| 553 |
gerarchia è riservata all'uso dell'amministratore di sistema.
|
| 554 |
Tali file in sistemi Debian vanno invece posti sotto <file>/usr</file>.
|
| 555 |
|
| 556 |
<p>Le locazioni più corrette per binari, icone, documentazione ecc. sono
|
| 557 |
specificate nello Standard per la Gerarchia del Filesystem
|
| 558 |
(vedi /usr/share/doc/debian-policy/fhs/). Ti raccomando di visionarlo
|
| 559 |
e leggere le sezioni che possono riguardare il tuo pacchetto.
|
| 560 |
|
| 561 |
<p>Così, dobbiamo installare i binari in /usr/bin invece di /usr/local/bin,
|
| 562 |
la pagina di manuale in /usr/share/man/man1 invece di /usr/local/man/man1, ecc.
|
| 563 |
Nota come non ci sia una pagina di manuale menzionata nel makefile
|
| 564 |
di gentoo, ma dal momento che la Policy Debian richiede che ogni programma
|
| 565 |
ne abbia una, ne faremo una più in là e la installeremo in /usr/share/man/man1.
|
| 566 |
|
| 567 |
|
| 568 |
|
| 569 |
|
| 570 |
<p>Ma perché in quella directory e non in qualche altra? Perchè Debian
|
| 571 |
ha definito alcune regole su dove i programmi devono essere
|
| 572 |
installati. Questo è specificato nello Standard della Gerarchia del
|
| 573 |
Filesystem (vedi /usr/share/doc/debian-policy/fhs/).
|
| 574 |
Così dovremmo installare il binario in /usr/X11R6/bin invece che
|
| 575 |
in /usr/local/bin e le pagine di manuale (non esistono in questo
|
| 576 |
caso, ma quasi ogni programma ne ha una, per cui ne faremo una dopo)
|
| 577 |
in /usr/share/man/man1 invece che in /usr/local/man/man1.
|
| 578 |
|
| 579 |
<p>Alcuni programmi non usano variabili di makefile per definire
|
| 580 |
percorsi come questi. Questo significa che potrai dover editare
|
| 581 |
alcuni sorgenti C allo scopo di correggerli per usare le locazioni
|
| 582 |
giuste. Ma dove e come cercarle? Puoi trovarle eseguendo:
|
| 583 |
|
| 584 |
<p><example>
|
| 585 |
grep -rn usr/local/lib *.[ch]
|
| 586 |
</example>
|
| 587 |
|
| 588 |
<p>Grep eseguirà ricorsivamente sull'albero dei sorgenti e ti dirà
|
| 589 |
il nome di un file e la riga in esso quando trova una occorrenza.
|
| 590 |
|
| 591 |
<p>Edita questi file e in quelle righe sostituisci /usr/local/* con
|
| 592 |
usr/* -- e questo e tutto. Fa attenzione a non sconvolgere il resto
|
| 593 |
del codice! :-)
|
| 594 |
|
| 595 |
<p>Dopo di questo, dovresti trovare il target install (cerca la riga
|
| 596 |
che inizia con `install:') e rinomina tutti i riferimenti a directory
|
| 597 |
diverse da quelle definite all'inizio del Makefile. In precedenza,
|
| 598 |
il target install di gentoo diceva:
|
| 599 |
|
| 600 |
<p><example>
|
| 601 |
install: gentoo
|
| 602 |
install ./gentoo $(BIN)
|
| 603 |
install icons $(ICONS)
|
| 604 |
install gentoorc-example $(HOME)/.gentoorc
|
| 605 |
</example>
|
| 606 |
|
| 607 |
<p>Dopo la modifica invece:
|
| 608 |
<example>
|
| 609 |
install: gentoo-target
|
| 610 |
install -d $(BIN) $(ICONS) $(DESTDIR)/etc
|
| 611 |
install ./gentoo $(BIN)
|
| 612 |
install -m644 icons/* $(ICONS)
|
| 613 |
install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
|
| 614 |
</example>
|
| 615 |
|
| 616 |
<p>Avrai sicuramente notato che c'è adesso un comando
|
| 617 |
<tt>install -d</tt> prima degli altri nella regola. Il makefile
|
| 618 |
originale non ce l'ha perchè generalmente /usr/local/bin e le
|
| 619 |
altre directory già esistono sul sistema su cui si lancia
|
| 620 |
`make install`. Tuttavia, dal momento che installeremo nella nostra
|
| 621 |
directory vuota (o anche inesistente), dovremo creare ogni singola
|
| 622 |
directory.
|
| 623 |
|
| 624 |
<p>Possiamo anche aggiungere altre cose alla fine della regola, come
|
| 625 |
l'installazione di documentazione che l'autore upstream talvolta
|
| 626 |
omette:
|
| 627 |
|
| 628 |
<p><example>
|
| 629 |
install -d $(DESTDIR)/usr/share/doc/gentoo/html
|
| 630 |
cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
|
| 631 |
</example>
|
| 632 |
|
| 633 |
<p>Se sei un lettore attento, avrai notato che ho modificato `gentoo' in
|
| 634 |
`gentoo-target' nella riga `install:'. Questo è quello che si
|
| 635 |
definisce un bug fix :-)
|
| 636 |
|
| 637 |
<p>Qualora effettuassi delle modifiche che non sono specificatamente
|
| 638 |
legate alla pacchettizzazione Debian, assicurati di inviarle
|
| 639 |
all'upstream maintainer, in modo che possa includerle nella prossima
|
| 640 |
revisione del programma e possano essere utili ad ogni altro.
|
| 641 |
Ricorda anche di rendere i tuoi fix non specifici per Debian o Linux
|
| 642 |
(o anche Unix!) prima di inviarli -- rendili portabili. Questo
|
| 643 |
renderà la tua correzione molto più semplice da applicare.
|
| 644 |
|
| 645 |
<sect id="difflibs">Distinguere le librerie
|
| 646 |
|
| 647 |
<p>C'è un altro problema comune: le librerie sono spesso diverse
|
| 648 |
da piattaforma a piattaforma. Per esempio, il Makefile può contenere
|
| 649 |
un riferimento a una libreria che non esiste in sistemi Debian.
|
| 650 |
In tal caso occorre modificarlo in una libreria che esiste
|
| 651 |
in Debian, e serva allo stesso scopo.
|
| 652 |
|
| 653 |
<p>Così, se c'è una riga nel Makefile del programma (o nel
|
| 654 |
Makefile.in) che dice qualcosa del tipo (e il programma non compila):
|
| 655 |
|
| 656 |
<p><example>
|
| 657 |
LIBS = -lcurses -lsomething -lsomethingelse
|
| 658 |
</example>
|
| 659 |
|
| 660 |
<p>Modificala come segue, e molto probabilmente funzionerà:
|
| 661 |
<p><example>
|
| 662 |
LIBS = -lncurses -lsomething -lsomethingelse
|
| 663 |
#LIBS = -lcurses -lsomething -lsomethingelse
|
| 664 |
</example>
|
| 665 |
|
| 666 |
<p>(L'autore si rende conto che questo non è il migliore esempio considerato
|
| 667 |
che il nostro pacchetto libncurses adesso è distribuito con un link
|
| 668 |
simbolico libcurses.so, ma non gliene veniva uno migliore. Suggerimenti
|
| 669 |
sono benvenuti :-)
|
| 670 |
|
| 671 |
<chapt id="dreq">Materiale richiesto sotto debian/
|
| 672 |
|
| 673 |
<p>C'è adesso una nuova sotto-directory nella directory principale
|
| 674 |
del programma (`gentoo-0.9.12'), il cui nome è `debian'. Ci sono un certo
|
| 675 |
numero di file in questa directory che dovremo modificare allo scopo
|
| 676 |
di adattare il comportamento del pacchetto. I più importati fra loro
|
| 677 |
sono `control', `changelog', `copyright' e 'rules',
|
| 678 |
che sono richiesti per tutti i pacchetti.
|
| 679 |
|
| 680 |
<sect id="control">Il file `control'
|
| 681 |
|
| 682 |
<p>Questo file contiene vari valori che <prgn/dpkg/, <prgn/dselect/ e
|
| 683 |
altri pacchetti useranno per la gestione del pacchetto.
|
| 684 |
|
| 685 |
<p>Questo è il file control che dh_make crea per noi.
|
| 686 |
|
| 687 |
<p><example>
|
| 688 |
1 Source: gentoo
|
| 689 |
2 Section: unknown
|
| 690 |
3 Priority: optional
|
| 691 |
4 Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
|
| 692 |
5 Build-Depends: debhelper (>> 3.0.0)
|
| 693 |
6 Standards-Version: 3.5.2
|
| 694 |
7
|
| 695 |
8 Package: gentoo
|
| 696 |
9 Architecture: any
|
| 697 |
10 Depends: ${shlibs:Depends}
|
| 698 |
11 Description: <insert up to 60 chars description>
|
| 699 |
12 <insert long description, indented with spaces>
|
| 700 |
</example>
|
| 701 |
(I numeri di riga sono aggiunti).
|
| 702 |
|
| 703 |
<p>Le righe 1-6 sono le informazioni di controllo per il pacchetto
|
| 704 |
sorgente.
|
| 705 |
|
| 706 |
<p>La riga 1 è il nome del pacchetto sorgente.
|
| 707 |
|
| 708 |
<p>La riga 2 è la sezione della distribuzione in cui il pacchetto è
|
| 709 |
incluso.
|
| 710 |
|
| 711 |
<p>Come ti sarai reso conto, Debian è diviso in sezioni: main
|
| 712 |
(il software free), non-free (il software non esattamente free)
|
| 713 |
e contrib (software free che dipende da software non free). Al di
|
| 714 |
sotto di queste ci sono delle sotto-sezioni logiche che descrivono
|
| 715 |
in breve di che genere di pacchetto si tratta. Così abbiamo `admin'
|
| 716 |
per programmi da amministratore, `base' per gli strumenti di base, `devel'
|
| 717 |
per gli strumenti per programmatori, `doc' per la documentazione, `libs' per
|
| 718 |
le librerie, `mail' per programmi e demoni di posta elettronica, `net'
|
| 719 |
per applicazioni e demoni di rete, `x11' per programmi specifici per
|
| 720 |
X11, e molte altre.
|
| 721 |
|
| 722 |
<p>Modifichiamo quindi la sezione in x11. (Un prefisso "main/" è implicito
|
| 723 |
per cui lo omettiamo.)
|
| 724 |
|
| 725 |
<p>La riga 3 descrive quanto sia importante che l'utente installi tale
|
| 726 |
pacchetto.
|
| 727 |
Leggi il manuale della Policy per una guida su come configurare questi
|
| 728 |
campi. La priorità "optional" generalmente funzionerà per nuovi pacchetti.
|
| 729 |
|
| 730 |
<p>Sezioni e priorità sono usati effettivamente solo da <prgn/dselect/
|
| 731 |
dselect quando ordina i pacchetti e seleziona i default. Una volta
|
| 732 |
caricato il pacchetto in Debian, il valore di questi due campi possono
|
| 733 |
essere modificati dai maintainer dell'archivio FTP, nel qual caso
|
| 734 |
ne sarai informato via email.
|
| 735 |
|
| 736 |
<p>Dal momento che si tratta di un pacchetto a priorità normale,
|
| 737 |
lasciamo il campo al valore "optional".
|
| 738 |
|
| 739 |
<p>La riga 4 è nome e e-mail del maintainer. Assicurati che
|
| 740 |
questo campo contenga un campo "To: " valido per una email, perché
|
| 741 |
dopo averlo caricato il sistema di tracciamento delle anomalie lo
|
| 742 |
userà per inviarti le email relativi a errori. Evita l'uso di virgole,
|
| 743 |
'&' e parentesi.
|
| 744 |
|
| 745 |
<p>La riga 5 è la versione degli standard di Debian Policy che questo
|
| 746 |
pacchetto segue, la versione del manuale di Policy che leggi mentre
|
| 747 |
costruisci i pacchetti.
|
| 748 |
|
| 749 |
<p>La sesta riga include la lista dei pacchetti richiesti per creare
|
| 750 |
il tuo pacchetto. Alcuni pacchetti come gcc e make sono impliciti,
|
| 751 |
vedi il pacchetto <package/build-essential/ per dettagli.
|
| 752 |
Se qualche compilatore non standard o altri strumenti sono necessari
|
| 753 |
per compilare il tuo pacchetto, dovresti aggiungerlo alla riga
|
| 754 |
`Build-Depends'. Valori multipli sono separati con virgole; leggi
|
| 755 |
più avanti la spiegazione delle dipendenze binarie per saperne
|
| 756 |
di più della sintassi di questo campo.
|
| 757 |
|
| 758 |
<p>Qui puoi anche avere Build-Depends-Indep, Build-Conflicts e altri campi.
|
| 759 |
Questi dati saranno usati dal software di costruzione automatica
|
| 760 |
dei pacchetti per creare pacchetti binari per altre piattaforme
|
| 761 |
di computer. Vedi il manuale della Policy per altre informazioni sulle
|
| 762 |
build-dependencies e la Guida di Riferimento dello Sviluppatore per
|
| 763 |
informazioni su tali piattaforme (architetture) e come portare il
|
| 764 |
software su di esse.
|
| 765 |
|
| 766 |
<p>Ecco un trucco che puoi usare per trovare quali pacchetti il tuo
|
| 767 |
pacchetto richiede per la creazione:
|
| 768 |
<example>
|
| 769 |
strace -f -o /tmp/log ./configure
|
| 770 |
# o make invece di ./configure, se il pacchetto non usa autoconf
|
| 771 |
for x in `dpkg -S $(grep open /tmp/log|perl -pe 's!.* open\(\"([^\"]*).*!$1!'|grep "^/"| sort | uniq| grep -v "^\(/tmp\|/dev\|/proc\)" ) 2>/dev/null|cut -f1 -d":"| sort | uniq`; do echo -n "$x (>=" `dpkg -s $x|grep ^Version|cut -f2 -d":"` "), "; done
|
| 772 |
</example>
|
| 773 |
|
| 774 |
<p>Gentoo sembra richiedere <package/xlibs-dev/,
|
| 775 |
<package/libgtk1.2-dev/ e <package/libglib1.2-dev/ per compilare,
|
| 776 |
per cui li aggiungiamo dopo <package/debhelper/.
|
| 777 |
|
| 778 |
<p>La riga 8 è il nome del pacchetto binario. Questo è generalmente lo
|
| 779 |
stesso nome del sorgente, ma non deve necessariamente essere così.
|
| 780 |
|
| 781 |
<p>La riga 9 descrive l'architettura di CPU per la quale il pacchetto
|
| 782 |
binario è stato compilato. Possiamo lasciare il valore "any" perché
|
| 783 |
<manref name="dpkg-gencontrol" section="1"> lo riempirà con il valore
|
| 784 |
appropriato per qualsiasi macchina sulla quale questo pacchetto è
|
| 785 |
stato compilato.
|
| 786 |
|
| 787 |
<p>Se il tuo
|
| 788 |
pacchetto è indipendente dalla architettura (per esempio, uno script
|
| 789 |
di shell o Perl, o un documento) modifica questo campo in "all", e
|
| 790 |
leggi oltre in <ref id="rules"> sull'uso del metodo `binary-indep'
|
| 791 |
invece di `binary-arch' per costruire un pacchetto.
|
| 792 |
|
| 793 |
<p>La riga 10 mostra una della più potenti caratteristiche del sistema
|
| 794 |
di pacchettizzazione Debian. I pacchetti possono far riferimento
|
| 795 |
l'uno all'altro in vari modi. Oltre a Depends:, altri campi di
|
| 796 |
relazione sono Recommends:, Suggests:, Pre-Depends:, Conflicts:,
|
| 797 |
Provides:, e Replaces:.
|
| 798 |
|
| 799 |
<p>Gli strumenti di gestione dei pacchetti generalmente si comportano
|
| 800 |
nello stesso modo quando trattano queste relazioni; se così non è, viene spiegato.
|
| 801 |
(vedi <manref name="dpkg" section="8">, <manref name="dselect" section="8">,
|
| 802 |
<manref name="apt" section="8">, <manref name="aptitude" section="1"> ecc.)
|
| 803 |
|
| 804 |
<p>Questo è ciò che le dipendenze significano:
|
| 805 |
|
| 806 |
<p><list>
|
| 807 |
<item>Depends:
|
| 808 |
<p>Il pacchetto non sarà installato sino a quando i pacchetti da cui
|
| 809 |
dipende non lo sono. Usa questo valore se il tuo programma non funziona
|
| 810 |
affatto (o causa un serio malfunzionamento) quando un pacchetto
|
| 811 |
particolare non è già presente.</item>
|
| 812 |
|
| 813 |
<item>Recommends:
|
| 814 |
<p>Alcuni frontend come dselect o aptitude ti chiederanno di installare
|
| 815 |
i pacchetti raccomandati, insieme al tuo pacchetto; dselect insisterà
|
| 816 |
nel volerlo fare. Dpkg e apt-get invece, ingnorano questo campo.
|
| 817 |
Usa questo valore per pacchetti che non sono strettamente
|
| 818 |
necessari, ma tipicamente usati con il tuo programma.</item>
|
| 819 |
|
| 820 |
<item>Suggests:
|
| 821 |
<p>Quando un utente installa il tuo programma, tutti i frontend
|
| 822 |
chiedono verosimilmente se devono
|
| 823 |
installare i pacchetti suggeriti. Dpkg e apt-get non se ne curano
|
| 824 |
Usa questo valore per pacchetti che lavorano insieme al tuo
|
| 825 |
programma, ma non sono affatto necessari. </item>
|
| 826 |
|
| 827 |
<item>Pre-Depends:
|
| 828 |
<p>Questo è più stringente di Depends:. Il pacchetto non sarà
|
| 829 |
installato a meno che i pacchetti da cui pre-dipende non siano
|
| 830 |
installati e <em>correttamente configurati</em>. Usa questo valore
|
| 831 |
con <strong>molta</strong> prudenza, e solo dopo averne discusso
|
| 832 |
nella mailing list debian-devel. Leggi: non usarlo affatto. :-)</item>
|
| 833 |
|
| 834 |
<item>Conflicts:
|
| 835 |
<p>Il pacchetto non sarà installato sino a quando tutti i pacchetti
|
| 836 |
con i quali va in conflitto non saranno stati rimossi.
|
| 837 |
Usa questo valore se il tuo programma assolutamente non può girare
|
| 838 |
(o causa un serio danno) se un particolare pacchetto è presente.</item>
|
| 839 |
|
| 840 |
<item>Provides:
|
| 841 |
<p>Per alcuni tipi di pacchetti dove ci sono alternative multiple
|
| 842 |
sono stati definiti dei nomi virtuali. Puoi trovarne una lista
|
| 843 |
completa nel file
|
| 844 |
/usr/share/doc/debian-policy/virtual-package-names-list.text.gz.
|
| 845 |
Usa questo valore se il tuo programma fornisce una funzione di un
|
| 846 |
pacchetto virtuale esistente .</item>
|
| 847 |
|
| 848 |
<item>Replaces:
|
| 849 |
<p>Usa questo valore quando il tuo programma sostituisce i file
|
| 850 |
di un altro pacchetto o sostituisce completamente un altro pacchetto
|
| 851 |
(usato congiuntamente a Conflicts:). I file dei suddetti pacchetti
|
| 852 |
saranno sostituiti con i file del tuo pacchetto.
|
| 853 |
</item>
|
| 854 |
</list>
|
| 855 |
|
| 856 |
<p>Tutti questi campi hanno una sintassi uniforme. Sono una lista di
|
| 857 |
nomi di pacchetti separati da virgole. Questi nomi di pacchetti
|
| 858 |
possono anche essere liste di nomi di pacchetti alternativi, separati
|
| 859 |
da una barra verticale <tt>|</tt> (simbolo di pipe).
|
| 860 |
|
| 861 |
<p>Questi campi
|
| 862 |
possono restringere la propria applicabilità a una particolare
|
| 863 |
versione di ciascun pacchetto. Tali versioni sono elencate in
|
| 864 |
parentesi dopo ogni nome di pacchetto, e dovrebbero contenere una
|
| 865 |
relazione fra le possibili qui in elenco, seguita da un numero di
|
| 866 |
versione. Le relazioni consentite sono: <tt><<</tt>,
|
| 867 |
<tt><=</tt>, <tt>=</tt>, <tt>>=</tt> e
|
| 868 |
<tt>>></tt> che stanno per strettamente precedente, precedente
|
| 869 |
o uguale, esattamente uguale, successiva o uguale, e strettamente
|
| 870 |
successiva, rispettivamente. Per esempio,
|
| 871 |
|
| 872 |
<p><example>
|
| 873 |
Depends: foo (>= 1.2), libbar1 (= 1.3.4)
|
| 874 |
Conflicts: baz
|
| 875 |
Recommends: libbaz4 (>> 4.0.7)
|
| 876 |
Suggests: quux
|
| 877 |
Replaces: quux (<< 5), quux-foo (<= 7.6)
|
| 878 |
</example>
|
| 879 |
|
| 880 |
<p>L'ultima caratteristica che hai necessità di conoscere è
|
| 881 |
$(shlibs:Depends). Dopo che il tuo pacchetto sarà stato generato
|
| 882 |
e installato nella directory temporanea,
|
| 883 |
<manref name="dh_shlibdeps" section="1"> lo esaminerà alla ricerca
|
| 884 |
di binari e librerie, determinerà le dipendenze da librerie condivise
|
| 885 |
e stabilirà in quali pacchetti queste si trovano, come libc6 o xlib6g.
|
| 886 |
Questo programma passerà la lista a <manref name="dh_gencontrol" section="1">
|
| 887 |
che li metterà al posto giusto, e tu non dovrai preoccuparti di specificarle
|
| 888 |
da solo.
|
| 889 |
|
| 890 |
<p>Detto ciò possiamo lasciare la riga Depends: come è ora, e inserire
|
| 891 |
un'altra riga dopo questa che dice <tt>Suggests: file</tt>,
|
| 892 |
perchè gentoo può usare alcune funzionalità offerte da quel
|
| 893 |
programma/pachetto.
|
| 894 |
|
| 895 |
<p>La riga 12 è una breve descrizione. Gli schermi di molte persone
|
| 896 |
sono larghi 80 colonne, per cui non dovrebbe essere di più di 60
|
| 897 |
caratteri. Modificherai tale campo in "A fully GUI configurable X file
|
| 898 |
manager using GTK+".
|
| 899 |
|
| 900 |
<p>La riga 13 contiene una descrizione estesa. Dovrebbe essere un
|
| 901 |
paragrafo dove vengono dati più dettagli sul pacchetto. La colonna 1
|
| 902 |
di ogni riga dovrebbe essere vuota. Non ci devono essere righe
|
| 903 |
vuote in mezzo, ma puoi mettere un . (punto) in una colonna, per simularle.
|
| 904 |
Inoltre, non ci deve essere più di una riga vuota dopo la descrizione.
|
| 905 |
|
| 906 |
<p>Questo è il file control aggiornato:
|
| 907 |
|
| 908 |
<p><example>
|
| 909 |
1 Source: gentoo
|
| 910 |
2 Section: x11
|
| 911 |
3 Priority: optional
|
| 912 |
4 Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
|
| 913 |
5 Build-Depends: debhelper (>> 3.0.0), xlibs-dev, libgtk1.2-dev, libglib1.2-dev
|
| 914 |
6 Standards-Version: 3.5.2
|
| 915 |
7
|
| 916 |
8 Package: gentoo
|
| 917 |
9 Architecture: any
|
| 918 |
10 Depends: ${shlibs:Depends}
|
| 919 |
11 Suggests: file
|
| 920 |
12 Description: A fully GUI configurable GTK+ file manager
|
| 921 |
13 gentoo is a file manager for Linux written from scratch in pure C. It
|
| 922 |
14 uses the GTK+ toolkit for all of its interface needs. gentoo provides
|
| 923 |
15 100% GUI configurability; no need to edit config files by hand and re-
|
| 924 |
16 start the program. gentoo supports identifying the type of various
|
| 925 |
17 files (using extension, regular expressions, or the 'file' command),
|
| 926 |
18 and can display files of different types with different colors and icons.
|
| 927 |
19 .
|
| 928 |
20 gentoo borrows some of its look and feel from the classic Amiga file
|
| 929 |
21 manager "Directory OPUS" (written by Jonathan Potter).
|
| 930 |
</example>
|
| 931 |
(Ho aggiunto i numeri di riga.)
|
| 932 |
|
| 933 |
<sect id="copyright">Il file `copyright'
|
| 934 |
|
| 935 |
<p>Questo file contiene le informazioni sui riferimenti, copyright
|
| 936 |
e licenza del pacchetto upstream. Il suo formato non è dettato dalla
|
| 937 |
Policy, ma i contenuti lo sono (sezioni 13.6 "Informazioni di Copyright").
|
| 938 |
|
| 939 |
<p>dh_make ne ha creato uno di default, quello di seguito:
|
| 940 |
|
| 941 |
<p><example>
|
| 942 |
1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
|
| 943 |
2 Wed, 11 Nov 1998 21:02:14 +0100.
|
| 944 |
3
|
| 945 |
4 It was downloaded from <fill in ftp site>
|
| 946 |
5
|
| 947 |
6 Upstream Author(s): <put author(s) name and email here>
|
| 948 |
7
|
| 949 |
8 Copyright:
|
| 950 |
9
|
| 951 |
10 <Must follow here>
|
| 952 |
</example>
|
| 953 |
(Ho aggiunto i numeri di riga.)
|
| 954 |
|
| 955 |
<p>Le cose importanti da aggiungere a questo file sono l'indirizzo
|
| 956 |
da cui il pacchetto è stato preso e l'effettiva nota di copyright e
|
| 957 |
licenza. Devi includere la licenza completa, a meno che non sia una delle
|
| 958 |
comuni licenze di free software, come la GNU GPL o LGPL, la BSD o
|
| 959 |
l'Artistic, nel quale caso puoi semplicemente fare riferimento
|
| 960 |
all'opportuno file in /usr/share/common-licenses/ che esiste su tutti
|
| 961 |
i sistemi Debian.
|
| 962 |
|
| 963 |
<p>In breve, ecco come il file copyright di gentoo appare:
|
| 964 |
|
| 965 |
<p><example>
|
| 966 |
1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
|
| 967 |
2 Wed, 11 Nov 1998 21:02:14 +0100.
|
| 968 |
3
|
| 969 |
4 It was downloaded from: ftp://ftp.obsession.se/gentoo/
|
| 970 |
5
|
| 971 |
6 Upstream author: Emil Brink <emil@obsession.se>
|
| 972 |
7
|
| 973 |
8 This software is copyright (c) 1998-99 by Emil Brink, Obsession
|
| 974 |
9 Development.
|
| 975 |
10
|
| 976 |
11 You are free to distribute this software under the terms of
|
| 977 |
12 the GNU General Public License.
|
| 978 |
13 On Debian systems, the complete text of the GNU General Public
|
| 979 |
14 License can be found in /usr/share/common-licenses/GPL file.
|
| 980 |
</example>
|
| 981 |
(Ho aggiunto i numeri di riga.)
|
| 982 |
|
| 983 |
<sect id="changelog">Il file `changelog'
|
| 984 |
|
| 985 |
<p>Questo è un file obbligatorio, che ha un formato speciale descritto
|
| 986 |
nella Policy alla sezione 5.3 "debian/changelog".
|
| 987 |
Tale formato è usato da dpkg e
|
| 988 |
altri programmi per ricavare il numero di versione, revisione,
|
| 989 |
distribuzione e livello di urgenza del tuo pacchetto.
|
| 990 |
|
| 991 |
<p>Per te è ugualmente importante dal momento che è una buona
|
| 992 |
cosa aver documentato tutte le modifiche apportate. Questo aiuterà
|
| 993 |
chi scarica il tuo pacchetto a vedere velocemente se ci sono problemi
|
| 994 |
non risolti con il pacchetto, che dovrebbe sapere. Sarà salvato come
|
| 995 |
`/usr/share/doc/gentoo/changelog.Debian.gz' nel pacchetto binario.
|
| 996 |
|
| 997 |
<p>dh_make ne crea uno di default, che appare così:
|
| 998 |
|
| 999 |
<p><example>
|
| 1000 |
1 gentoo (0.9.12-1) unstable; urgency=low
|
| 1001 |
2
|
| 1002 |
3 * Initial Release.
|
| 1003 |
4
|
| 1004 |
5 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
|
| 1005 |
6
|
| 1006 |
7 Local variables:
|
| 1007 |
8 mode: debian-changelog
|
| 1008 |
9 End:
|
| 1009 |
</example>
|
| 1010 |
(Ho aggiunto i numeri di riga.)
|
| 1011 |
|
| 1012 |
<p>La riga 1 è il nome del pacchetto, versione, distribuzione e
|
| 1013 |
livello di urgenza. Il nome deve corrispondere al nome del pacchetto
|
| 1014 |
sorgente, la distribuzione dovrebbe essere `unstable' o `experimental'
|
| 1015 |
(per ora), e il livello non dovrebbe essere modificato in qualcosa
|
| 1016 |
maggiore di `low'. :-).
|
| 1017 |
|
| 1018 |
<p>Le righe 3-5 sono voci di log, dove documenti le modifiche fatte
|
| 1019 |
nella revisione del pacchetto (non le modifiche di upstream - c'è un
|
| 1020 |
file speciale a tale scopo, creato dall'autore di upstream, installato
|
| 1021 |
come /usr/share/doc/gentoo/changelog.gz). Le nuove righe devono essere
|
| 1022 |
inserite prima della riga più in alto, che inizia con un asterisco
|
| 1023 |
(`*'). Puoi farlo con <manref name="dch" section="1">, <manref
|
| 1024 |
name="emacs" section="1"> o a mano con un editor di testo.
|
| 1025 |
|
| 1026 |
<p>Devi metterci qualcosa di questo genere:
|
| 1027 |
|
| 1028 |
<p><example>
|
| 1029 |
1 gentoo (0.9.12-1) unstable; urgency=low
|
| 1030 |
2
|
| 1031 |
3 * Initial Release.
|
| 1032 |
4 * This is my first Debian package.
|
| 1033 |
5 * Adjusted the Makefile to fix $DESTDIR problems.
|
| 1034 |
6
|
| 1035 |
7 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
|
| 1036 |
8
|
| 1037 |
</example>
|
| 1038 |
(Ho aggiunto i numeri di riga.)
|
| 1039 |
|
| 1040 |
<p>Puoi leggere altro sull'aggiornamento del file changelog più oltre
|
| 1041 |
in <ref id="update">.
|
| 1042 |
|
| 1043 |
<sect id="rules">Il file `rules'
|
| 1044 |
|
| 1045 |
<p>Ora occorre dare una occhiata alle regole esatte che
|
| 1046 |
<manref name="dpkg-buildpackage" section="1"> userà per creare
|
| 1047 |
effettivamente il pacchetto. Questo file è in effetti un altro
|
| 1048 |
Makefile, ma diverso da quello dei sorgenti upstream.
|
| 1049 |
Diversamente da altri file in debian/, questo è marcato come
|
| 1050 |
eseguibile.
|
| 1051 |
|
| 1052 |
<p>Tutti i file `rules', come ogni Makefile, consistono di diverse
|
| 1053 |
regole che specificano come gestire i sorgenti. Ogni regola consiste
|
| 1054 |
di target e nomi di file o nomi di azione che devono essere intraprese
|
| 1055 |
(per es. `build:' o `install:'.) Le regole che tu vuoi siano eseguite
|
| 1056 |
sono invocate come argomenti a riga di comando (per esempio,
|
| 1057 |
`./debian/rules build' o `make -f rules install'.) Dopo il nome del
|
| 1058 |
target, puoi fornire i nomi delle dipendenze, il programma o file da
|
| 1059 |
cui dipende quella regola. A seguire, ci può essere un qualsiasi
|
| 1060 |
numero di comandi (indentati con <tab>!), finché si trova
|
| 1061 |
una riga vuota. Da quel punto inizia un'altra regola. Righe vuote
|
| 1062 |
multiple e linee che iniziano con `#' (hash) sono trattate come
|
| 1063 |
commenti e ignorate
|
| 1064 |
|
| 1065 |
<p>Sarai probabilmente confuso ora, ma sarà tutto più chiaro dopo
|
| 1066 |
l'esame del file `rules' che dh_make fornisce come default. Dovresti
|
| 1067 |
anche leggere la voce `make' in info per maggiori informazioni.
|
| 1068 |
|
| 1069 |
<p>La cosa importante da capire, a proposito del file rules creato da dh_make,
|
| 1070 |
è che si tratta solo di un suggerimento. Funzionerà per semplici
|
| 1071 |
pacchetti, ma per i più complicati non avere remore nell'aggiungere o togliere
|
| 1072 |
qualcosa ad esso, per accomodarlo alle tue necessità. L'unica cosa che
|
| 1073 |
non devi modificare sono i nomi delle regole, perché gli strumenti usano tutti
|
| 1074 |
gli stessi nomi, come richiesto dalla Policy.
|
| 1075 |
|
| 1076 |
<p>Ecco (approssimativamente) come appare il file di default debian/rules
|
| 1077 |
che dh_make ha generato:
|
| 1078 |
|
| 1079 |
<p><example>
|
| 1080 |
1 #!/usr/bin/make -f
|
| 1081 |
2 # Sample debian/rules that uses debhelper.
|
| 1082 |
3 # GNU copyright 1997 to 1999 by Joey Hess.
|
| 1083 |
4
|
| 1084 |
5 # Uncomment this to turn on verbose mode.
|
| 1085 |
6 #export DH_VERBOSE=1
|
| 1086 |
7
|
| 1087 |
8 # This is the debhelper compatibility version to use.
|
| 1088 |
9 export DH_COMPAT=3
|
| 1089 |
10
|
| 1090 |
11 ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
|
| 1091 |
12 CFLAGS += -g
|
| 1092 |
13 endif
|
| 1093 |
14 ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
|
| 1094 |
15 INSTALL_PROGRAM += -s
|
| 1095 |
16 endif
|
| 1096 |
17
|
| 1097 |
18 build: build-stamp
|
| 1098 |
19 build-stamp:
|
| 1099 |
20 dh_testdir
|
| 1100 |
21
|
| 1101 |
22 # Add here commands to compile the package.
|
| 1102 |
23 $(MAKE)
|
| 1103 |
24 #/usr/bin/docbook-to-man debian/gentoo.sgml > gentoo.1
|
| 1104 |
25
|
| 1105 |
26 touch build-stamp
|
| 1106 |
27
|
| 1107 |
28 clean:
|
| 1108 |
29 dh_testdir
|
| 1109 |
30 dh_testroot
|
| 1110 |
31 rm -f build-stamp
|
| 1111 |
32
|
| 1112 |
33 # Add here commands to clean up after the build process.
|
| 1113 |
34 -$(MAKE) clean
|
| 1114 |
35
|
| 1115 |
36 dh_clean
|
| 1116 |
37
|
| 1117 |
38 install: build
|
| 1118 |
39 dh_testdir
|
| 1119 |
40 dh_testroot
|
| 1120 |
41 dh_clean -k
|
| 1121 |
42 dh_installdirs
|
| 1122 |
43
|
| 1123 |
44 # Add here commands to install the package into debian/gentoo.
|
| 1124 |
45 $(MAKE) install DESTDIR=$(CURDIR)/debian/gentoo
|
| 1125 |
46
|
| 1126 |
47 # Build architecture-independent files here.
|
| 1127 |
48 binary-indep: build install
|
| 1128 |
49 # We have nothing to do by default.
|
| 1129 |
50
|
| 1130 |
51 # Build architecture-dependent files here.
|
| 1131 |
52 binary-arch: build install
|
| 1132 |
53 dh_testdir
|
| 1133 |
54 dh_testroot
|
| 1134 |
55 # dh_installdebconf
|
| 1135 |
56 dh_installdocs
|
| 1136 |
57 dh_installexamples
|
| 1137 |
58 dh_installmenu
|
| 1138 |
59 # dh_installlogrotate
|
| 1139 |
60 # dh_installemacsen
|
| 1140 |
61 # dh_installpam
|
| 1141 |
62 # dh_installmime
|
| 1142 |
63 # dh_installinit
|
| 1143 |
64 dh_installcron
|
| 1144 |
65 dh_installman
|
| 1145 |
66 dh_installinfo
|
| 1146 |
67 # dh_undocumented
|
| 1147 |
68 dh_installchangelogs ChangeLog
|
| 1148 |
69 dh_link
|
| 1149 |
70 dh_strip
|
| 1150 |
71 dh_compress
|
| 1151 |
72 dh_fixperms
|
| 1152 |
73 # dh_makeshlibs
|
| 1153 |
74 dh_installdeb
|
| 1154 |
75 # dh_perl
|
| 1155 |
76 dh_shlibdeps
|
| 1156 |
77 dh_gencontrol
|
| 1157 |
78 dh_md5sums
|
| 1158 |
79 dh_builddeb
|
| 1159 |
80
|
| 1160 |
81 binary: binary-indep binary-arch
|
| 1161 |
82 .PHONY: build clean binary-indep binary-arch binary install
|
| 1162 |
</example>
|
| 1163 |
(Ho aggiunto i numeri di riga.)
|
| 1164 |
|
| 1165 |
<p>Hai probabilmente familiarità con righe come la prima, dagli
|
| 1166 |
script di shell e Perl. Essa dice al sistema operativo che questo file
|
| 1167 |
deve essere processato usando /usr/bin/make.
|
| 1168 |
|
| 1169 |
<p>Il senso delle variabili DH_* menzionate alle righe 6 e 9 dovrebbe
|
| 1170 |
essere evidente dalla breve descrizione. Per maggiori informazioni su
|
| 1171 |
DH_COMPAT leggi la sezione "livelli di compatibilità di Debhelper"
|
| 1172 |
della <manref name="debhelper" section="1">pagina di manuale.
|
| 1173 |
|
| 1174 |
<p>Le righe da 11 a 16 sono schemi di supporto per i parametri DEB_BUILD_OPTIONS,
|
| 1175 |
descritti nella sezione 11.1 "Binari" della Policy. Di base queste cose
|
| 1176 |
controllano se i binari sono creati con i simboli per il debugging,
|
| 1177 |
e se questi possono essere eliminati al momento della installazione.
|
| 1178 |
Di nuovo, si tratta solo di uno schema, un suggerimento che dovresti
|
| 1179 |
seguire. Dovresti controllare come il sistema di compilazione dell'upstream
|
| 1180 |
gestisce l'inclusione di simboli di debugging e la loro cancellazione
|
| 1181 |
in installazione e implementare il tutto tu stesso.
|
| 1182 |
|
| 1183 |
<p>Generalmente puoi dire al gcc di compilare con "-g" usando la
|
| 1184 |
variabile CFLAGS -- se questo è il caso del tuo pacchetto, propaga
|
| 1185 |
la variabile <em>aggiungendo</em> <tt>CFLAGS="$(CFLAGS)"</tt> alla
|
| 1186 |
chiamata $(MAKE) nella regola build (vedi oltre). In alternativa,
|
| 1187 |
se il tuo pacchetto usa uno script configure di autoconf, puoi passarlo
|
| 1188 |
a configure <em>premettendo</em> la suddetta stringa alla invocazione
|
| 1189 |
di ./configure nella regola di build.
|
| 1190 |
|
| 1191 |
<p>A proposito di stripping, i programmi sono configurati comunemente
|
| 1192 |
per essere installati non strippati, e spesso senza una opzione
|
| 1193 |
per modificare questa cosa. Fortunatamente,
|
| 1194 |
hai anche <manref name="dh_strip" section="1"> che controllerà se
|
| 1195 |
il flag DEB_BUILD_OPTIONS=nostrip è configurato e terminerà
|
| 1196 |
silenziosamente.
|
| 1197 |
|
| 1198 |
<p>Le righe dalla 18 alla 26 descrivono la regola `build' (e la figlia
|
| 1199 |
`build-stamp') che lanciano make con il Makefile proprio della
|
| 1200 |
applicazione per compilare il programma. Parleremo dell'esempio
|
| 1201 |
commentato docbook-to-man più avanti in <ref id="manpage">.
|
| 1202 |
|
| 1203 |
<p>La regola `clean', come specificata nelle righe 28-36, ripulisce
|
| 1204 |
ogni binario non necessario e file autogenerati, lasciati in giro
|
| 1205 |
dalla creazione del pacchetto. Questa regola deve lavorare tutte le
|
| 1206 |
volte (anche quando l'albero dei sorgenti <em/è/ già ripulito!),
|
| 1207 |
per cui usa le opzioni di forzatura (per es. per rm, è -f),
|
| 1208 |
oppure fai in modo che make ignori i
|
| 1209 |
valori di ritorno (errori) usando un `-' prima del nome del comando.
|
| 1210 |
|
| 1211 |
<p>Il processo di installazione, la regola `install', inizia a riga 38.
|
| 1212 |
Fondamentalmente lancia la regola `install' del Makefile del programma,
|
| 1213 |
ma installa nella directory <tt>$(CURDIR)/debian/gentoo</tt> -
|
| 1214 |
questo è il motivo per cui abbiamo
|
| 1215 |
specificato $(DESTDIR) come directory radice per l'installazione nel
|
| 1216 |
Makefile di gentoo.
|
| 1217 |
|
| 1218 |
<p>Come suggeriscono i commenti, la regola `binary-indep', alla riga
|
| 1219 |
48, è usata per costruire i pacchetti indipendenti dalla architettura.
|
| 1220 |
Dal momento che non ne abbiamo, non verrà fatto niente in questo caso.
|
| 1221 |
|
| 1222 |
<p>Fino alla prossima regola - `binary-arch', dalla riga 52 alla 79,
|
| 1223 |
lanciamo una serie di piccoli programmi di utilità dal pacchetto debhelper
|
| 1224 |
che svolgono varie operazioni sui file del tuo pacchetto per renderlo
|
| 1225 |
conforme alla Policy.
|
| 1226 |
|
| 1227 |
<p>Se il
|
| 1228 |
tuo pacchetto fosse del tipo `Architecture: all', avresti bisogno di
|
| 1229 |
includere tutti i comandi per costruire i pacchetti sotto la regola `binary-indep',
|
| 1230 |
e lasciare la regola `binary-arch' vuota, invece.
|
| 1231 |
|
| 1232 |
<p>I nomi dei programmi di debhelper iniziano con dh_, e il resto è
|
| 1233 |
la descrizione di cosa fa effettivamente il programma di utilità.
|
| 1234 |
È tutto abbastanza auto esplicativo, ma ecco
|
| 1235 |
qualche spiegazione addizionale:
|
| 1236 |
|
| 1237 |
<list>
|
| 1238 |
<item><manref name="dh_testdir" section="1"> controlla di trovarsi
|
| 1239 |
nella giusta directory (cioè la directory superiore dei
|
| 1240 |
sorgenti),
|
| 1241 |
<item><manref name="dh_testroot" section="1"> controlla che tu abbia
|
| 1242 |
i privilegi di root che sono necessari per i target `binary-arch',
|
| 1243 |
`binary-indep' e 'clean',
|
| 1244 |
<item><manref name="dh_installman" section="1">
|
| 1245 |
copia tutte le pagine di man al posto giusto nella directory
|
| 1246 |
destinazione, devi solo dirgli dove sono relativamente alla
|
| 1247 |
directory superiore dei sorgenti,
|
| 1248 |
<item><manref name="dh_strip" section="1">
|
| 1249 |
elimina le intestazioni per il debugging dagli eseguibili e
|
| 1250 |
librerie, per renderli più piccoli,
|
| 1251 |
<item><manref name="dh_compress" section="1"> comprime pagine di
|
| 1252 |
man e documentazioni più grandi di 4kB con <manref name="gzip" section="1">,
|
| 1253 |
<item><manref name="dh_installdeb" section="1"> copia i file legati
|
| 1254 |
al pacchetto (per es. gli script da maintainer) sotto la
|
| 1255 |
directory <file>debian/gentoo/DEBIAN</file>,
|
| 1256 |
<item><manref name="dh_shlibdeps" section="1"> calcola le dipendenze
|
| 1257 |
da librerie condivise di librerie ed eseguibili,
|
| 1258 |
<item><manref name="dh_gencontrol" section="1"> installa una versione
|
| 1259 |
modificata del file di controllo in <file>debian/gentoo/DEBIAN</file>,
|
| 1260 |
<item><manref name="dh_md5sums" section="1"> genera i codici di
|
| 1261 |
controllo MD5 per tutti i file del pacchetto.
|
| 1262 |
</list>
|
| 1263 |
|
| 1264 |
<p>Per informazioni più complete su cosa fanno tutti questi script
|
| 1265 |
dh_*, e quali sono le loro altre opzioni, leggi le rispettive pagine di
|
| 1266 |
manuale. Ci sono alcuni altri, alle volte utili, script dh_*, che non
|
| 1267 |
sono menzionati qui. Se ne avessi bisogno, leggi la documentazione
|
| 1268 |
di debhelper.
|
| 1269 |
|
| 1270 |
<p>La sezione binary-arch è quella dove dovresti effettivamente
|
| 1271 |
commentare qualsiasi riga che richiama funzionalità che non occorrono.
|
| 1272 |
Per gentoo, commenterò tutte le righe su examples, cron, init, man and info,
|
| 1273 |
semplicemente perché
|
| 1274 |
gentoo non le richiede. Inoltre alla linea 68, avrò bisogno di
|
| 1275 |
sostituirò `ChangeLog' con `FIXES',
|
| 1276 |
perché è il nome reale del file di changelog dell'upstream.
|
| 1277 |
|
| 1278 |
<p>Le ultime due righe (insieme con le altre non spiegate qui) sono
|
| 1279 |
solo cose più o meno necessarie, delle quali puoi leggere nel manuale
|
| 1280 |
del make e nella Policy. Al momento, non è essenziale conoscerle.
|
| 1281 |
|
| 1282 |
<chapt id="dother">Altri file sotto debian/
|
| 1283 |
|
| 1284 |
<p>Vedrai che ci sono altri file nella sottodirectory debian/, molti dei
|
| 1285 |
quali con suffisso `.ex', che sta a indicare degli esempi.
|
| 1286 |
Dagli una occhiata. Se volessi
|
| 1287 |
usarli o avessi necessità di usarne le funzionalità:
|
| 1288 |
|
| 1289 |
<list>
|
| 1290 |
<item>esamina la documentazione relativa (suggerimento: il Policy Manual),
|
| 1291 |
<item>se necessario modifica i file per adattarli alle tue necessità,
|
| 1292 |
<item>rinominali per eliminare il suffisso `.ex' se ne hanno uno,
|
| 1293 |
<item>modifica il file rules se necessario.
|
| 1294 |
</list>
|
| 1295 |
|
| 1296 |
<p>Alcuni di questi file, quelli più comunemente usati, sono
|
| 1297 |
spiegati nelle sezioni seguenti.
|
| 1298 |
|
| 1299 |
<sect id="readme">README.Debian
|
| 1300 |
|
| 1301 |
<p>Qualsiasi dettaglo extra o discrepanza fra il pacchetto originale
|
| 1302 |
e la versione debianizzata, deve essere documentata qui.
|
| 1303 |
|
| 1304 |
<p>dh_make ne crea uno di default, che appare come segue:
|
| 1305 |
|
| 1306 |
<example>
|
| 1307 |
gentoo for Debian
|
| 1308 |
----------------------
|
| 1309 |
|
| 1310 |
<possible notes regarding this package - if none, delete this file>
|
| 1311 |
|
| 1312 |
-- Josip Rodin <jrodin@jagor.srce.hr>, Wed, 11 Nov 1998 21:02:14 +0100
|
| 1313 |
</example>
|
| 1314 |
|
| 1315 |
<p>Poiché non dobbiamo aggiungere niente qui, cancelleremo questo file.
|
| 1316 |
|
| 1317 |
<sect id="conffiles">conffiles.ex
|
| 1318 |
|
| 1319 |
<p>Una delle esperienze più tedianti con il software, capita quando si passa
|
| 1320 |
parecchio tempo a configurare con tutti gli sforzi un programma, per vedersi
|
| 1321 |
poi cancellate tutte le modifiche effettuate, a seguito di un aggiornamento.
|
| 1322 |
Debian risolve questo problema marcando i file di configurazione in modo
|
| 1323 |
che quando si aggiorna un pacchetto venga richiesto se si vogliono
|
| 1324 |
conservare i vecchi file di configurazione, o meno.
|
| 1325 |
|
| 1326 |
<p>Il modo di fare questo in un pacchetto è inserire il path completo
|
| 1327 |
di ciascun file di
|
| 1328 |
configurazione (generalmente in /etc), uno per riga, in un file che si
|
| 1329 |
chiama <tt/conffiles/. Gentoo ha un file di configurazione, /etc/gentoorc,
|
| 1330 |
e lo inseriremo nel file <tt/conffiles/.
|
| 1331 |
|
| 1332 |
<p>Se il programma che stai pacchettizzando richiede che ogni utente
|
| 1333 |
modifichi il file di configurazione per funzionare, prendi in
|
| 1334 |
considerazione la possibilità di non marcarlo come conffile.
|
| 1335 |
|
| 1336 |
<p>Puoi gestire degli esempi di configurazione dagli `script del
|
| 1337 |
maintainer', per maggiori informazioni vedi <ref id="maintscripts">.
|
| 1338 |
|
| 1339 |
<p>Se il tuo programma non ha conffiles, puoi in tutta sicurezza
|
| 1340 |
cancellare il file <tt/conffiles/ dalla directory debian/.
|
| 1341 |
|
| 1342 |
<sect id="crond">cron.d.ex
|
| 1343 |
|
| 1344 |
<p>Se il tuo pacchetto richiede che compiti regolarmente schedulati
|
| 1345 |
siano svolti in modo appropriato, puoi usare questo file per configurarli.
|
| 1346 |
|
| 1347 |
<p>Nota che questo non include la rotazione dei log; per quello
|
| 1348 |
guarda <manref name="dh_installlogrotate" section="1"> e
|
| 1349 |
<manref name="logrotate" section="8">.
|
| 1350 |
|
| 1351 |
<p>In caso contrario rimuovilo.
|
| 1352 |
|
| 1353 |
<sect id="dirs">dirs
|
| 1354 |
|
| 1355 |
<p>Questo file specifica le directory che occorrono, ma che la normale
|
| 1356 |
procedura di installazione (make install), per qualche motivo, non crea.
|
| 1357 |
|
| 1358 |
Per default, contiene:
|
| 1359 |
<p><example>
|
| 1360 |
usr/bin
|
| 1361 |
usr/sbin
|
| 1362 |
</example>
|
| 1363 |
|
| 1364 |
<p>Osserva che lo slash prefisso non è incluso. Cambieremo normalmente
|
| 1365 |
tale file come segue:
|
| 1366 |
|
| 1367 |
<p><example>
|
| 1368 |
usr/bin
|
| 1369 |
usr/man/man1
|
| 1370 |
</example>
|
| 1371 |
|
| 1372 |
<p>ma queste directory sono già create nel Makefile, per cui non ci serve
|
| 1373 |
tale file, e lo cancelleremo.
|
| 1374 |
|
| 1375 |
<sect id="docs">docs
|
| 1376 |
|
| 1377 |
<p>Questo file specifica i nomi dei file di documentazione che possiamo
|
| 1378 |
far installare a dh_installdocs nella directory temporanea per noi.
|
| 1379 |
|
| 1380 |
<p>Per default, includerà tutti i file esistenti nella directory
|
| 1381 |
principale dei sorgenti che si chiamano "BUGS", "README*", "TODO", ecc.
|
| 1382 |
|
| 1383 |
<p>Per gentoo, ho incluso anche qualcos'altro:
|
| 1384 |
|
| 1385 |
<p><example>
|
| 1386 |
BUGS
|
| 1387 |
CONFIG-CHANGES
|
| 1388 |
CREDITS
|
| 1389 |
ONEWS
|
| 1390 |
README
|
| 1391 |
README.gtkrc
|
| 1392 |
TODO
|
| 1393 |
</example>
|
| 1394 |
|
| 1395 |
<p>Possiamo anche rimuovere questo file e invece elencare quei file
|
| 1396 |
sulla riga di comando di <tt/dh_installdocs/ nel file <tt/rules/,
|
| 1397 |
in questo modo:
|
| 1398 |
|
| 1399 |
<p><example>
|
| 1400 |
dh_installdocs BUGS CONFIG-CHANGES CREDITS ONEWS README \
|
| 1401 |
README.gtkrc TODO
|
| 1402 |
</example>
|
| 1403 |
|
| 1404 |
<p>Per quanto inversomile possa sembrare, potresti non avere nessuno
|
| 1405 |
di questi file nella directory dei sorgenti del pacchetto. In tal
|
| 1406 |
caso potresti in tutta sicurezza cancellare questo file. Ma non
|
| 1407 |
rimuovere la chiamata <tt/dh_installdocs/ nel file <tt/rules/
|
| 1408 |
perchè è usata per installare il file <tt/copyright/ e altre cose.
|
| 1409 |
|
| 1410 |
<sect id="emacsen">emacsen-*.ex
|
| 1411 |
|
| 1412 |
<p>Se il tuo pacchetto fornisce dei file Emacs che possono essere
|
| 1413 |
compilati al momento della installazione, puoi usare questi file
|
| 1414 |
per configurarlo.
|
| 1415 |
|
| 1416 |
<p>Sono installati nella directory temporanea da
|
| 1417 |
<manref name="dh_installemacsen" section="1">, per cui non dimenticare
|
| 1418 |
di decommentare quella riga nel file <tt/rules/ se lo usi.
|
| 1419 |
|
| 1420 |
<p>Se non ti servono, rimuovili.
|
| 1421 |
|
| 1422 |
<sect id="initd">init.d.ex
|
| 1423 |
|
| 1424 |
<p>Se il tuo pacchetto è un daemon che richiede di essere lanciato
|
| 1425 |
alla partenza del sistema, hai ovviamente ignorato la mia
|
| 1426 |
raccomandazione iniziale, vero? :-)
|
| 1427 |
|
| 1428 |
<p>Questo è uno schema di file abbastanza generico per uno script
|
| 1429 |
da <file>/etc/init.d/</file>, per cui dovrai verosimilmente modificarlo
|
| 1430 |
parecchio. Viene installato nalla directory temporanea da
|
| 1431 |
<manref name="dh_installinit" section="1">.
|
| 1432 |
|
| 1433 |
<p>Se non ti serve, rimuovilo.
|
| 1434 |
|
| 1435 |
<sect id="manpage">manpage.1.ex, manpage.sgml.ex
|
| 1436 |
|
| 1437 |
|
| 1438 |
<p>Il tuo programma dovrebbe avere una pagina di man. Se non ce l'ha
|
| 1439 |
questo file contiene lo scheletro di una pagina che puoi riempire.
|
| 1440 |
|
| 1441 |
<p>Le pagine di manuale sono normalmente scritte in
|
| 1442 |
<manref name="nroff" section="1">. L'esempio <tt/manpage.1.ex/
|
| 1443 |
è scritto in nroff, anche.
|
| 1444 |
Vedi la pagina di manuale relativa a <manref name="man" section="7">,
|
| 1445 |
per una breve descrizione di come modificare tale file.
|
| 1446 |
|
| 1447 |
<p>Se d'altro canto preferisci scrivere in SGML invece che in nroff
|
| 1448 |
puoi usare lo schema in <tt/manpage.sgml.ex/. Se lo fai, devi:
|
| 1449 |
<list>
|
| 1450 |
<item>installare il pacchetto <package/docbook-to-man/
|
| 1451 |
<item>aggiungere <tt/docbook-to-man/ alla riga <tt/Build-Depends/
|
| 1452 |
nel file <tt/control/
|
| 1453 |
<item>rimuovere il commento dalla chiamata di docbook-to-man
|
| 1454 |
nella regola `build' del tuo file <tt/rules/
|
| 1455 |
</list>
|
| 1456 |
|
| 1457 |
<p>E ricorda di rinominare il file in qualcosa tipo <tt/gentoo.sgml/!
|
| 1458 |
|
| 1459 |
<p>Il nome della pagina finale di manuale dovrebbe includere il
|
| 1460 |
nome del programma che sta documentando, per cui la rinomineremo da
|
| 1461 |
"manpage" a "gentoo".
|
| 1462 |
Questo nome di file include ".1" come primo suffisso, il che indica
|
| 1463 |
che è una pagina di manuale per un comando utente. Assicurati che
|
| 1464 |
questa sezione sia di fatto quella corretta.
|
| 1465 |
Ecco una breve lista delle sezioni di pagina di man:
|
| 1466 |
|
| 1467 |
<p><example>
|
| 1468 |
Sezione | Descrizione | Note
|
| 1469 |
1 User commands Comandi e script eseguibili
|
| 1470 |
2 System calls Funzioni del kernel
|
| 1471 |
3 Library calls Funzioni delle librerie di sistema
|
| 1472 |
4 Special files File di /dev
|
| 1473 |
5 File formats Per es. formato di /etc/passwd
|
| 1474 |
6 Games O programmi frivoli
|
| 1475 |
7 Macro packages Come le macro di man.
|
| 1476 |
8 System administration Programmi usati da root.
|
| 1477 |
9 Kernel routines Chiamate non standard e interne
|
| 1478 |
</example>
|
| 1479 |
|
| 1480 |
<p>Così la manpage di gentoo dovrebbe chiamarsi <tt/gentoo.1/.
|
| 1481 |
Per programmi per X puoi aggiungere una "x" alla sezione, cioè
|
| 1482 |
<tt/gentoo.1x/.
|
| 1483 |
Non c'era nessuna pagina man gentoo.1 nei sorgenti
|
| 1484 |
originali, per cui ne ho scritta una, usando le informazioni
|
| 1485 |
dell'esempio e la documentazione dall'upstream.
|
| 1486 |
|
| 1487 |
<sect id="menu">menu.ex
|
| 1488 |
|
| 1489 |
<p>Gli utenti di X Window generalmente hanno un window manager con un
|
| 1490 |
menu che può essere adattato per lanciare programmi. Se è stato installato
|
| 1491 |
il pacchetto <package/menu/, verrà creato un insieme di menu per ciascun
|
| 1492 |
programma del sistema.
|
| 1493 |
|
| 1494 |
<p>Questo è il file <tt/menu.ex/ che di default dh_make crea:
|
| 1495 |
|
| 1496 |
<p><example>
|
| 1497 |
?package(gentoo):needs=X11|text|vc|wm section=Apps/see-menu-manual\
|
| 1498 |
title="gentoo" command="/usr/bin/gentoo"
|
| 1499 |
</example>
|
| 1500 |
|
| 1501 |
<p>Il primo campo dopo i due punti è "needs", e specifica di che
|
| 1502 |
tipo di interfaccia il programma
|
| 1503 |
ha bisogno. Modificalo in una delle alternative in elenco,
|
| 1504 |
per esempio "text" o "X11".
|
| 1505 |
|
| 1506 |
<p>Il successivo è "section", dove voce
|
| 1507 |
di menu e sottomenu dove dovrebbe apparire. L'elenco corrente delle
|
| 1508 |
sezioni si trova in:
|
| 1509 |
<file>/usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1</file>
|
| 1510 |
|
| 1511 |
<p>Il campo "title" è il nome del programma. Puoi iniziarlo in
|
| 1512 |
maiuscolo se preferisci. Solo, mantienilo breve.
|
| 1513 |
|
| 1514 |
<p>Infine, il campo "command" è la riga di comando
|
| 1515 |
che lancia il programma.
|
| 1516 |
|
| 1517 |
<p>Adesso, cambieremo la voce di menu in questo:
|
| 1518 |
|
| 1519 |
<p><example>
|
| 1520 |
?package(gentoo):needs=X11 section=Apps/Tools \
|
| 1521 |
title="Gentoo" command="gentoo"
|
| 1522 |
</example>
|
| 1523 |
|
| 1524 |
<p>Puoi anche aggiungere altri campi come "longtitle", "icon", "hints", ecc.
|
| 1525 |
<p>Vedi <manref name="menufile" section="5">, <manref name="update-menus" section="1">
|
| 1526 |
e <file>/usr/share/doc/debian-policy/menu-policy.html/</file>
|
| 1527 |
per maggiori informazioni.
|
| 1528 |
|
| 1529 |
<sect id="watch">watch.ex
|
| 1530 |
|
| 1531 |
<p>Questo file è usato per configurare
|
| 1532 |
<manref name="uscan" section="1">
|
| 1533 |
e <manref name="uupdate" section="1"> (nel pacchetto <package/devscripts/)
|
| 1534 |
Sono usati per controllare il sito da dove hai recuperato il
|
| 1535 |
sorgente originale.
|
| 1536 |
|
| 1537 |
<p>Questo è quello che vi ho inserito:
|
| 1538 |
|
| 1539 |
<p><example>
|
| 1540 |
# watch control file for uscan
|
| 1541 |
# Site Directory Pattern Version Script
|
| 1542 |
ftp.obsession.se /gentoo gentoo-(.*)\.tar\.gz debian uupdate
|
| 1543 |
</example>
|
| 1544 |
|
| 1545 |
<p>Suggerimento: collegati a Internet,
|
| 1546 |
e prova a eseguire "uscan" nella directory del programma, dopo avere
|
| 1547 |
creato il file. E leggi le pagine di manuale! :)
|
| 1548 |
|
| 1549 |
<sect id="doc-base">ex.package.doc-base
|
| 1550 |
|
| 1551 |
<p>Se il tuo pacchetto ha altra documentazione a
|
| 1552 |
parte le pagine man e i documenti info, dovresti usare il file
|
| 1553 |
`<package/doc-base/'
|
| 1554 |
per registrarle, in modo che l'utente possa trovarle, con
|
| 1555 |
<manref name="dhelp" section="1">, <manref name="dwww" section="1">
|
| 1556 |
o <manref name="doccentral" section="1">,
|
| 1557 |
per esempio.
|
| 1558 |
|
| 1559 |
<p>Questo in genere include file HTML,PS e PDF, distribuiti in
|
| 1560 |
<file>/usr/share/doc/packagename/</file>.
|
| 1561 |
|
| 1562 |
<p>Il file doc-base di gentoo appare come segue:
|
| 1563 |
|
| 1564 |
<p><example>
|
| 1565 |
Document: gentoo
|
| 1566 |
Title: Gentoo Manual
|
| 1567 |
Author: Emil Brink
|
| 1568 |
Abstract: This manual describes what Gentoo is, and how it can be used.
|
| 1569 |
Section: Apps/Tools
|
| 1570 |
|
| 1571 |
Format: HTML
|
| 1572 |
Index: /usr/share/doc/gentoo/html/index.html
|
| 1573 |
Files: /usr/share/doc/gentoo/html/*.html
|
| 1574 |
</example>
|
| 1575 |
|
| 1576 |
<p>Per informazioni sul formato del file, vedi
|
| 1577 |
<manref name="install-docs" section="8">
|
| 1578 |
e il manuale di <package/doc-base/,
|
| 1579 |
in <file>/usr/share/doc/doc-base/doc-base.html/</file>.
|
| 1580 |
|
| 1581 |
<sect id="maintscripts">postinst.ex, preinst.ex, postrm.ex, prerm.ex
|
| 1582 |
|
| 1583 |
<p>Questi file sono chiamati script del maintainer. Sono script posti
|
| 1584 |
nell'area di controllo del pacchetto e lanciati da <prgn/dpkg/ quando il
|
| 1585 |
tuo pacchetto è installato, aggiornato o rimosso.
|
| 1586 |
|
| 1587 |
<p>Per il momento, dovresti evitare qualsiasi modifica manuale degli
|
| 1588 |
script, se possibile, perché sono complicati. Per maggiori
|
| 1589 |
informazioni guarda il Policy Manual alla sezione 6, e dai una
|
| 1590 |
occhiata a questi file di esempio forniti da dh_make.
|
| 1591 |
|
| 1592 |
<chapt id="build">Costruzione del pacchetto
|
| 1593 |
|
| 1594 |
<p>A questo punto, dovresti essere pronto a creare il pacchetto.
|
| 1595 |
|
| 1596 |
<sect id="completebuild">Costruzione completa
|
| 1597 |
|
| 1598 |
<p>Spostati nella directory principale del programma e lancia il
|
| 1599 |
comando:
|
| 1600 |
|
| 1601 |
<p><example>
|
| 1602 |
dpkg-buildpackage -rfakeroot
|
| 1603 |
</example>
|
| 1604 |
|
| 1605 |
<p>Questo farà tutto il necessario per te.
|
| 1606 |
<list>
|
| 1607 |
<item>pulirà l'albero dei sorgenti (debian/rules clean), usando <prgn/fakeroot/
|
| 1608 |
<item>costuirà il pacchetto sorgente (dpkg-source -b)
|
| 1609 |
<item>costruirà il programma (debian/rules build)
|
| 1610 |
<item>costruirà il pacchetto binario (debian/rules binary), usando <prgn/fakeroot/
|
| 1611 |
<item>firmerà il file sorgente <tt/.dsc/, usando <prgn/gnupg/
|
| 1612 |
<item>creerà e firmerà il file di upload <tt/.changes/ usando
|
| 1613 |
<prgn/dpkg-genchanges/ e <prgn/gnupg/
|
| 1614 |
</list>
|
| 1615 |
|
| 1616 |
<p>Il solo input da te richiesto è tua chiave PGP segreta, due volte.
|
| 1617 |
|
| 1618 |
<p>Fatto ciò, vedrai quattro nuovi
|
| 1619 |
file nella directory di cui sopra (<tt>~/debian/</tt>):
|
| 1620 |
|
| 1621 |
<p><list>
|
| 1622 |
<item><em>gentoo_0.9.12.orig.tar.gz</em>
|
| 1623 |
|
| 1624 |
<p>Questo è il codice sorgente originale, semplicemente
|
| 1625 |
rinominato in questo modo in modo da aderire allo standard Debian.
|
| 1626 |
Osserva che questo è stato creato usando l'opzione `-f'
|
| 1627 |
per <prgn/dh_make/ quando è stato inizialmente lanciato.
|
| 1628 |
|
| 1629 |
<item><em>gentoo_0.9.12-1.dsc</em>
|
| 1630 |
|
| 1631 |
<p>È un sommario del contenuto del codice sorgente. Questo file è
|
| 1632 |
generato dal tuo file `control', ed è usato
|
| 1633 |
quando si scompatta il sorgente con <manref name="dpkg-source"
|
| 1634 |
section="1">. Questo file è firmato con PGP, in modo che si possa
|
| 1635 |
essere sicuri che effettivamente è fatto da te.
|
| 1636 |
|
| 1637 |
<item><em>gentoo_0.9.12-1.diff.gz</em>
|
| 1638 |
|
| 1639 |
<p>Questo file compresso contiene ogni singola modifica fatta al
|
| 1640 |
codice sorgente originale, in una forma nota come "diff unificata".
|
| 1641 |
Viene creata e usata da <manref name="dpkg-source" section="1">.
|
| 1642 |
Attenzione: se non chiami il file di distribuzione originale
|
| 1643 |
packagename_version.orig.tar.gz, <prgn/dpkg-source/ non riuscirà
|
| 1644 |
a creare il file .diff.gz correttamente!
|
| 1645 |
|
| 1646 |
<p>Se qualcun altro volesse ri-creare il tuo pacchetto da zero,
|
| 1647 |
potrebbe farlo facilmente usando i suddetti tre file.
|
| 1648 |
La procedura di estrazione è banale: copiare semplicemente i tre file
|
| 1649 |
da qualche parte e lanciare <tt>dpkg-source -x gentoo_0.9.12-1.dsc</tt>.
|
| 1650 |
|
| 1651 |
<item><em>gentoo_0.9.12-1_i386.deb</em>
|
| 1652 |
|
| 1653 |
<p>Questo è il pacchetto binario completo. Puoi usare <prgn/dpkg/
|
| 1654 |
per installarlo e rimuoverlo, come per ogni altro pacchetto.
|
| 1655 |
|
| 1656 |
<item><em>gentoo_0.9.12-1_i386.changes</em>
|
| 1657 |
|
| 1658 |
<p>Questo file descrive tutte le modifiche fatte nella revisione
|
| 1659 |
corrente del pacchetto, ed è usata dai programmi di mantenimento
|
| 1660 |
dell'archivio FTP di Debian per installare i pacchetti binari
|
| 1661 |
e sorgenti. È parzialmente generato dal contenuto del file
|
| 1662 |
`changelog' e dal file .dsc. Questo file è firmato con PGP,
|
| 1663 |
in modo che si possa essere sicuri che è effettivamente tuo.
|
| 1664 |
|
| 1665 |
<p>Quando lavori sul pacchetto, cambieranno le modalità di
|
| 1666 |
funzionamento e nuove funzionalità
|
| 1667 |
potranno essere aggiunte. Quelli che scaricano il tuo pacchetto, possono
|
| 1668 |
quardare questo file per vedere velocemente quali sono i cambiamenti.
|
| 1669 |
I programmi di mantenimento dell'archivio Debian invieranno anche
|
| 1670 |
i contenuti di questo file alla mailing list debian-devel-changes.
|
| 1671 |
</list>
|
| 1672 |
|
| 1673 |
Le lunghe stringhe di numeri nei file .dsc e .changes sono
|
| 1674 |
codici di controllo MD5 per i file
|
| 1675 |
menzionati. Chi scarica questi file, può controllarli con <manref
|
| 1676 |
name="md5sum" section="1"> e se i numeri non corrispondessero
|
| 1677 |
saprebbe che il file relativo è corrotto, o è stato alterato.
|
| 1678 |
|
| 1679 |
<sect id="quickrebuild">Ricostruzione veloce
|
| 1680 |
|
| 1681 |
<p>Con un grosso pacchetto, potresti non voler ricostruire tutto da zero,
|
| 1682 |
ogni volte che modifichi un dettaglio in debian/rules. Per motivi
|
| 1683 |
di testing puoi creare un file .deb, ricostruendo i sorgenti upstream
|
| 1684 |
come segue:
|
| 1685 |
|
| 1686 |
<p><example>
|
| 1687 |
fakeroot debian/rules binary
|
| 1688 |
</example>
|
| 1689 |
|
| 1690 |
<p>Una volta finito con i tuoi aggiustamenti, ricorda di ricostruire
|
| 1691 |
usando la giusta procedura. Potresti non essere in grado
|
| 1692 |
di caricare il pacchetto correttamente se provi con dei file .deb
|
| 1693 |
creati in questo modo.
|
| 1694 |
|
| 1695 |
<sect id="checkit">Controllare il pacchetto per errori
|
| 1696 |
|
| 1697 |
<p>Lancia <manref name="lintian" section="1"> sul tuo file .changes;
|
| 1698 |
questo programma fa una verifica in merito a molti comuni errori di
|
| 1699 |
pacchettizzazione. Il comando è:
|
| 1700 |
|
| 1701 |
<p><example>
|
| 1702 |
lintian -i gentoo_0.9.12-1_i386.changes
|
| 1703 |
</example>
|
| 1704 |
|
| 1705 |
<p>Ovviamente, sostituisci il nome del file con il nome del file
|
| 1706 |
changes generato per il tuo pacchetto. Se sembra che ci siano errori
|
| 1707 |
(le righe che iniziano con E:), leggi la spiegazione (le righe con
|
| 1708 |
N:), correggi e ricostruisci come descritto in <ref id="completebuild">.
|
| 1709 |
Se ci sono righe che iniziano con W:, si tratta di warning, per cui
|
| 1710 |
aggiusta il pacchetto o verifica che i warning siano spuri (e crea
|
| 1711 |
gli ovverrides per Lintian; vedi la documentazione per i dettagli)
|
| 1712 |
|
| 1713 |
<p>Osserva che puoi costruire il pacchetto con <prgn/dpkg-buildpackage/ e
|
| 1714 |
<prgn/lintian/ in un unico comando con <manref name="debuild"
|
| 1715 |
section="1">.
|
| 1716 |
|
| 1717 |
<p>Guarda all'interno del pacchetto usando un file manager come
|
| 1718 |
<manref name="mc" section="1">, o spacchettalo in una posizione
|
| 1719 |
temporanea usando <manref name="dpkg-deb" section="1">.
|
| 1720 |
Stai in guardia per file extra non necessari nel pacchetto binario
|
| 1721 |
e sorgente. Spesso un po' di robaccia non
|
| 1722 |
viene cancellata propriamente; modifica le tue regole per
|
| 1723 |
compensare questa cosa.
|
| 1724 |
Suggerimento: `zgrep ^+++ ../gentoo_0.9.12-1.diff.gz'
|
| 1725 |
ti darà una lista di modifiche/aggiunte ai file sorgenti, e
|
| 1726 |
`dpkg-deb -c gentoo_0.9.12-1_i386.deb' elencherà tutti i file nel pacchetto.
|
| 1727 |
|
| 1728 |
<p>Installa il pacchetto per testarlo tu stesso, per esempio usando il
|
| 1729 |
comando <manref name="debi" section="1"> come root.
|
| 1730 |
Prova a installarlo e lanciarlo su una macchina che non sia la tua, e
|
| 1731 |
verifica qualsiasi errore o warning durante l'installazione o l'esecuzione.
|
| 1732 |
|
| 1733 |
<sect id="upload">Caricamento del pacchetto
|
| 1734 |
|
| 1735 |
<p>Una volta testato il nuovo pacchetto approfonditamente,
|
| 1736 |
sarai pronto a partire con il processo di candidatura come nuovo
|
| 1737 |
maintainer Debian, come descritto in
|
| 1738 |
<url id="http://www.debian.org/devel/join/newmaint">.
|
| 1739 |
|
| 1740 |
<p>Una volta diventato uno sviluppatore ufficiale,
|
| 1741 |
avrai necessità di caricare il pacchetto nell'archivio Debian.
|
| 1742 |
Potresti farlo a mano, ma è più semplice usare i tool automatici forniti, come
|
| 1743 |
<manref name="dupload" section="1"> o <manref name="dput" section="1">.
|
| 1744 |
Descriveremo come puoi farlo con <prgn/dupload/.
|
| 1745 |
|
| 1746 |
<p>Per prima cosa devi creare il file di configurazione di dupload.
|
| 1747 |
Puoi modificare il file di sistema <file>/etc/dupload.conf</file>
|
| 1748 |
o averne uno tuo personale <file>~/.dupload.conf</file>
|
| 1749 |
che fornisce le poche cose da modificare. Scrivici dentro qualcosa come:
|
| 1750 |
|
| 1751 |
<p><example>
|
| 1752 |
package config;
|
| 1753 |
|
| 1754 |
$default_host = "ftp-master";
|
| 1755 |
|
| 1756 |
$cfg{"ftp-master"}{"login"} = "yourdebianusername";
|
| 1757 |
|
| 1758 |
$cfg{"non-us"}{"login"} = "yourdebianusername";
|
| 1759 |
|
| 1760 |
1;
|
| 1761 |
</example>
|
| 1762 |
|
| 1763 |
<p>Ovviamente, modifica le mie informazini personali con le tue, e
|
| 1764 |
leggi la pagina man <manref name="dupload.conf" section="5"> per
|
| 1765 |
capire cosa significa ciascuna opzione.
|
| 1766 |
|
| 1767 |
<p>L'opzione $default_host è la più particolare -- stabilisce
|
| 1768 |
quale coda di caricamento sarà usata per default.
|
| 1769 |
"ftp-master" è la primaria, ma è possibile che tu voglia usarne
|
| 1770 |
un'altra, più veloce. Per maggiori informazioni sulle code,
|
| 1771 |
leggi la Guida di Riferimento per lo Sviluppatore, nella
|
| 1772 |
sezione "Caricare un pacchetto", su
|
| 1773 |
<file>/usr/share/doc/developers-reference/developers-reference.html/ch-upload.en.html#s-uploading</file>
|
| 1774 |
|
| 1775 |
<p>A questo punto connettiti al tuo provider Internet, e scrivi
|
| 1776 |
questo comando:
|
| 1777 |
|
| 1778 |
<p><example>
|
| 1779 |
dupload --to master gentoo_0.9.12-1_i386.changes
|
| 1780 |
</example>
|
| 1781 |
|
| 1782 |
<p><prgn/dupload/ verifica che i codici di controllo MD5 dei file siano
|
| 1783 |
coerenti con quelli del file .changes, per cui ti avvertirà di
|
| 1784 |
ricreare il pacchetto come descritto in
|
| 1785 |
<ref id="completebuild">, per caricare appropriatamente il pacchetto.
|
| 1786 |
|
| 1787 |
<p>Se carichi su "ftp-master", <prgn/dupload/
|
| 1788 |
ti chiederà la tua password per le macchine Debian, e quindi caricherà
|
| 1789 |
il pacchetto.
|
| 1790 |
|
| 1791 |
<chapt id="update">Aggiornamento del pacchetto
|
| 1792 |
|
| 1793 |
<sect id="newrevision">Nuova revisione Debian
|
| 1794 |
|
| 1795 |
<p>Supponiamo che sia stato segnalato un bug del tuo pacchetto,
|
| 1796 |
il #54321, e che si riferisca a un problema che sei in grado di risolvere.
|
| 1797 |
Per creare una nuova revisione Debian del pacchetto, hai bisogno di:
|
| 1798 |
|
| 1799 |
<list>
|
| 1800 |
<item>Correggere il problema nel pacchetto sorgente, ovviamente.
|
| 1801 |
|
| 1802 |
<item>Aggiungere una nuova revisione nel file changelog Debian, per
|
| 1803 |
esempio con `dch -i', oppure esplicitamente con
|
| 1804 |
`dch -v <version>-<revision>` e quindi
|
| 1805 |
includere i tuoi commenti usando il tuo editor preferito,
|
| 1806 |
|
| 1807 |
<p>Suggerimento: come ottenere la data facilmente nel formato
|
| 1808 |
richiesto? Usa `822-date`, or `date -R`.
|
| 1809 |
|
| 1810 |
<p>Includi una breve descrizione del bug e la soluzione nella
|
| 1811 |
voce del changelog,
|
| 1812 |
seguita da: "Closes: #54321". In questo modo, la sottomissione del
|
| 1813 |
bug sarà automaticamente chiusa dal software di mantenimento, nel
|
| 1814 |
momento in cui il tuo pacchetto sarà accettato nell'archivio Debian.
|
| 1815 |
|
| 1816 |
<item>Ripeti quanto fatto in <ref id="completebuild">, <ref id="checkit">,
|
| 1817 |
e <ref id="upload">. La differenza è che questa volta il sorgente
|
| 1818 |
originale non sarà incluso, dal momento che non è stato modificato
|
| 1819 |
e già esiste nell'archivio Debian.
|
| 1820 |
</list>
|
| 1821 |
|
| 1822 |
<sect id="newupstream">Nuovo rilascio di upstream
|
| 1823 |
|
| 1824 |
<p>Adesso consideriamo una situazione differente, un po' più
|
| 1825 |
complicata - una nuova versione upstream è stata rilasciata, e
|
| 1826 |
ovviamente vuoi pacchettizzarla. Avrai bisogno di fare quanto segue:
|
| 1827 |
|
| 1828 |
<list>
|
| 1829 |
<item>Scarica i nuovi sorgenti e sposta il relativo archivio (per
|
| 1830 |
es. dal nome `gentoo-0.9.13.tar.gz') nella directory al di sopra
|
| 1831 |
del vecchio albero di sorgenti (per es. ~/debian/).
|
| 1832 |
|
| 1833 |
<item>Spostati nella vecchia directory di sorgenti e lancia:
|
| 1834 |
|
| 1835 |
<example>
|
| 1836 |
uupdate -u gentoo-0.9.13.tar.gz
|
| 1837 |
</example>
|
| 1838 |
|
| 1839 |
<p>Ovviamente, sostituisci questo nome di file con il nome
|
| 1840 |
dell'archivio dei sorgenti del tuo programma.
|
| 1841 |
<manref name="uupdate" section="1"> rinominerà in modo appropriato
|
| 1842 |
quell'archivio, proverà ad applicare tutte le modifiche dal tuo
|
| 1843 |
precedente file .diff.gz, e aggiornerà il nuovo file
|
| 1844 |
debian/changelog.
|
| 1845 |
|
| 1846 |
<item>Portati nella directory `../gentoo-0.9.13', il nuovo albero
|
| 1847 |
di sorgenti del pacchetto, e ripeti quanto fatto in
|
| 1848 |
<ref id="completebuild">, <ref id="checkit">, e <ref id="upload">.
|
| 1849 |
</list>
|
| 1850 |
|
| 1851 |
<p>Osserva che se hai configurato il file `debian/watch' come descritto
|
| 1852 |
in <ref id="watch">, puoi lanciare <manref name="uscan" section="1">
|
| 1853 |
per cercare automaticamente i sorgenti aggiornati, scaricarli e
|
| 1854 |
lanciare <prgn/uupdate/.
|
| 1855 |
|
| 1856 |
<sect id="upgrading">Verificare gli aggiornamenti di pacchetti
|
| 1857 |
|
| 1858 |
<p>Quando crei una nuova versione del pacchetto, dovresti fare
|
| 1859 |
quanto segue per verificare che il pacchetto può essere
|
| 1860 |
aggiornato in modo sicuro:
|
| 1861 |
|
| 1862 |
<list>
|
| 1863 |
<item>aggiorna dalla versione precedente,
|
| 1864 |
<item>torna indietro e rimuovilo,
|
| 1865 |
<item>installa il nuovo pacchetto,
|
| 1866 |
<item>rimuovilo e reinstallalo nuovamente,
|
| 1867 |
<item>fanne un purge.
|
| 1868 |
</list>
|
| 1869 |
|
| 1870 |
<p>Tieni a mente che se il pacchetto è stato in precedenza rilasciato
|
| 1871 |
in Debian, la gente vorrà spesso fare un aggiornamento dalla versione
|
| 1872 |
che era nell'ultima versione Debian. Ricorda di provare l'aggiornamento
|
| 1873 |
da tale versione, anche.
|
| 1874 |
|
| 1875 |
<sect id="helpme">Dove chiedere aiuto
|
| 1876 |
|
| 1877 |
<p>Prima di deciderti a fare una domanda in qualche area pubblica,
|
| 1878 |
sei pregato di leggere i dannati manuali (RTFM).
|
| 1879 |
Questo include la documentazione in
|
| 1880 |
<file>/usr/share/doc/dpkg</file>,
|
| 1881 |
<file>/usr/share/doc/debian</file>, i file
|
| 1882 |
<file>/usr/share/doc/package/*</file> e
|
| 1883 |
e le pagine man/info di tutti i programmi menzionati in questo documento.
|
| 1884 |
|
| 1885 |
<p>Se hai domande sulla pacchettizzazione alle quale non trovi risposta
|
| 1886 |
nella documentazione, puoi chiedere alla mailing list dei Debian Mentors
|
| 1887 |
su <email/debian-mentors@lists.debian.org/. Gli sviluppatori più esperti
|
| 1888 |
di Debian ti aiuteranno con piacere, ma leggi almeno un po' di
|
| 1889 |
documentazione prima di chiedere!
|
| 1890 |
|
| 1891 |
<p>Guarda <url id="http://lists.debian.org/debian-mentors/"> per
|
| 1892 |
maggiori informazioni riguardo la mailing list.
|
| 1893 |
|
| 1894 |
<p>Quando ricevi una segnalazione di bug (sì, effettive segnalazioni
|
| 1895 |
di bug!) saprai che è il momento di fare fare riferimento al
|
| 1896 |
<url name="Sistema Debian di tracciamento dei bug" id="http://www.debian.org/Bugs/">
|
| 1897 |
e leggere la documentazione lì, per essere in grado di gestire le
|
| 1898 |
segnalazioni in modo efficiente. Ti raccomando di leggere
|
| 1899 |
la Guida di Riferimento dello Sviluppatore, al capitolo
|
| 1900 |
"Gestione dei Bug", su
|
| 1901 |
<file>/usr/share/doc/developers-reference/developers-reference.html/ch-bug-handling.en.html</file>
|
| 1902 |
|
| 1903 |
<p>Se ancora hai delle domande, chiedi sulla mailing list degli
|
| 1904 |
sviuppatori Debian all'indirizzo
|
| 1905 |
<email/debian-devel@lists.debian.org/.
|
| 1906 |
Guarda <url id="http://lists.debian.org/debian-devel/">
|
| 1907 |
per maggiori informazioni su questa mailing list.
|
| 1908 |
|
| 1909 |
<p>Anche se tutto funziona bene, è venuto il momento di iniziare
|
| 1910 |
a pregare. Perché? Perché in poche ore (o giorni), gli utenti di
|
| 1911 |
tutto il mondo inizieranno a usare il pacchetto, e se hai commesso
|
| 1912 |
qualche errore critico, sarai bombardato dalle mail di numerosi
|
| 1913 |
utenti Debian arrabbiati... sto scherzando :-)
|
| 1914 |
|
| 1915 |
<p>Rilassati e sii pronto per le segnalazioni dei bug, perché
|
| 1916 |
c'è molto lavoro da fare prima che il tuo pacchetto
|
| 1917 |
sia completamente in linea con le politiche Debian
|
| 1918 |
(ancora una volta, leggi la <em>documentazione reale</em> per i dettagli).
|
| 1919 |
Buona fortuna!
|
| 1920 |
|
| 1921 |
</book>
|
| 1922 |
|
| 1923 |
</debiandoc>
|