Indice
Questo documento cerca di descrivere la costruzione di un pacchetto Debian GNU/Linux, sia per un normale utente Debian che per un aspirante sviluppatore. Utilizzando un linguaggio immediato, non tecnico e con l'ausilio di esempi concreti. C'è un detto latino che dice Longum iter est per preaecepta, breve et efficax per exempla! (La via è lunga usando la teoria, ma breve ed efficiente con gli esempi!).
È disponibile la riscrittura di questo tutorial, con contenuti aggiornati e con esempi più pratici, denominato Guide for Debian Maintainers. Si prega di utilizzare il nuovo tutorial come documento primario.
This document is made available for the Debian Buster
release since this offers many translations. This document will be dropped
in the following releases since contents are getting outdated. [1]
Una delle cose che rende Debian una delle distribuzioni più importanti, è il suo sistema di pacchettizzazione. Sebbene ci sia una vasta quantità di software disponibile sotto forma di pacchetto Debian, qualche volta è necessario installare del software per il quale non è stato ancora creato il pacchetto. Si potrebbe pensare che creare dei pacchetti sia un compito molto difficile. In effetti, se si è alle prime armi con GNU/Linux è dura, ma se si ha esperienza non si può non leggere questo documento :-) Servirà conoscere dei rudimenti di programmazione Unix, ma di sicuro non sarà necessario essere un mago della programmazione. [2]
Una cosa però è certa: per creare in maniera corretta e manutenere dei pacchetti Debian serviranno svariate ore di lavoro. Per far funzionare il nostro sistema, i maintainer devono stare attenti a non commettere errori, essere scrupolosi e tecnicamente competenti.
Se è necessario qualche aiuto sulla pacchettizzazione, si consiglia la lettura di Sezione 1.4, «Dove chiedere aiuto».
Le versioni aggiornate di questo documento dovrebbero sempre essere
disponibile online all'indirizzo http://www.debian.org/doc/maint-guide/ e nel
pacchetto maint-guida
. Le traduzioni
saranno disponibili in pacchetti come maint-guide-es
. Si noti che questa
documentazione può essere leggermente obsoleta.
Poiché si tratta di un tutorial, si è scelto di spiegare dettagliatamente ogni passo per alcuni argomenti importanti. Alcuni passi possono apparire irrilevanti per alcuni di voi. Si prega di essere pazienti. Si sono anche volutamente evitati alcuni casi particolari fornendo solo dei riferimenti, per mantenere questo semplice documento.
Qui sono presenti alcune osservazioni delle dinamiche sociali di Debian, nella speranza che siano di aiuto per le interazioni con Debian:
Siamo tutti volontari.
Non si può imporre agli altri cosa fare.
Si dovrebbe essere motivati a fare le cose da soli.
La coooperazione amichevole è la forza motrice.
Il vostro contributo non deve affaticare gli altri.
Il vostro contributo è prezioso solo quando gli altri lo apprezzano.
Debian non è la vostra scuola in cui si ottiene in automatico l'attenzione degli insegnanti.
Dovreste essere in grado di imparare molte cose da soli.
L'attenzione degli altri volontari è una risorsa molto scarsa.
Debian è in costante miglioramento.
Ci si aspetta che vengano creati pacchetti di alta qualità.
Si consiglia di adattarsi al cambiamento.
Ci sono molti tipi di persone, che interagiscono nel mondo Debian, con ruoli diversi:
autore originale (upstream author): La persona che ha iniziato lo sviluppo del programma.
responsabile del programma (upstream maintainer): La persona che attualmente sviluppa il programma.
responsabile del pacchetto (maintainer): La persona che ha creato il pacchetto Debian del programma.
sponsor: La persona che aiuta i responsabili dei pacchetti a verificarne la correttezza dei contenuti ed a depositarli nell'archivio Debian ufficiale.
mentore: La persona che aiuta i responsabili dei pacchetti alle prime armi nelle operazioni di creazione del pacchetto, ecc.
sviluppatore Debian (Debian Developer) (DD): membro del progetto Debian con i permessi di depositare i pacchetti all'interno dell'archivio Debian ufficiale.
responsabile Debian (Debian Maintainer) (DM): persona con permessi di accesso limitati all'archivio ufficiale dei pacchetti di Debian.
Si noti che non è possibile diventare uno sviluppatore Debian (DD) ufficiale dal giorno alla notte, poiché questo richiede più che delle semplici conoscenze tecniche. Ma non ci si deve lasciare scoraggiare da questo. Se il lavoro che si è fatto è utile a qualcun altro, si può sempre depositare il proprio pacchetto sia come maintainer attraverso uno sponsor che come maintainer Debian.
Si noti che non è necessario creare un nuovo pacchetto per diventare uno sviluppatore Debian ufficiale. Lo si può diventare anche semplicemente contribuendo alla manutenzione di pacchetti già esistenti. Ci sono molti pacchetti che aspettano solo dei bravi responsabili (vedere Sezione 2.2, «Scegliamo il programma»).
Dal momento che in questo documento si trattano solo gli aspetti tecnici della pacchettizzazione, si prega di fare riferimento a quanto segue per conoscere come relazionarsi con Debian e come partecipare:
Debian: 17 anni di Software Libero, "do-ocracy", e la democrazia (Slides introduttive)
Come aiutare Debian? (Ufficiale)
Debian GNU/Linux FAQ, capitolo 13 - "Contribuire al Progetto Debian" (Semi-ufficiale)
Il Wiki di Debian, HelpDebian (supplementare)
Sito del New Member Debian (ufficiale)
Debian Mentors FAQ (supplementare)
Prima di iniziare, bisogna assicurarsi di avere installato correttamente
alcuni pacchetti aggiuntivi, necessari per lo sviluppo. Da notare che la
lista non contiene nessun pacchetto etichettato come
essenziale
o richiesto
- ci aspettiamo
che siano già installati nel sistema.
I seguenti pacchetti fanno parte dell'installazione standard di Debian, per
cui probabilmente sono già presenti nel sistema (insieme ai pacchetti
aggiuntivi dai quali dipendono). Si può effettuare un controllo con
aptitude show
o con
pacchetto
dpkg -s
.
pacchetto
Il pacchetto più importante da installare in un sistema in cui si ha
intenzione di sviluppare è build-essential
. Questo
includerà altri pacchetti necessari per avere un
ambiente di base per la compilazione dei programmi.
Per alcuni tipi di pacchetti questo è tutto quello che serve, ci sono però una serie di pacchetti che, pur non essendo essenziali per lo sviluppo, vengono in aiuto allo sviluppatore o possono essere richiesti dal pacchetto su cui si lavora:
autoconf
, automake
e autotools-dev
- diversi programmi recenti usano
script di configurazione e Makefile
preprocessati con
l'aiuto di programmi come questi. (vedere info autoconf
,
info automake
) autotools-dev
tiene aggiornate le versioni di
alcuni file di automazione e contiene la documentazione che spiega il modo
migliore per utilizzare questi file.
debhelper
e dh-make
- dh-make
è necessario per creare lo scheletro del
pacchetto, utilizza alcuni strumenti di debhelper
per creare i pacchetti. Non sono
essenziali per la creazione di pacchetti, ma sono
fortemente consigliati per i nuovi maintainer. Questo
rende l'intero processo molto più semplice da iniziare e controllare
successivamente. (vedere dh_make(8), debhelper(1).) [3]
Il nuovo debmake
può essere
utilizzato in alternativa a dh-make
. Ha più funzionalità e comprende la
documentazione HTML con esempi dettagliati di pacchettizzazione, presenti in
debmake-doc
.
devscripts
- questo pacchetto
contiene alcuni pratici script che possono essere utili ai maintainer, anche
se non sono strettamente necessari per la creazione dei pacchetti. I
pacchetti consigliati o suggeriti da questo pacchetto andrebbero presi in
considerazione. (vedere /usr/share/doc/devscripts/README.gz
.)
fakeroot
- questo programma permette
di fingere di essere root, dato che è necessario per l'esecuzione di alcune
parti del processo di creazione del pacchetto. (vedere fakeroot(1).)
file
- questo semplice programma
determina la tipologia di un file. (vedere file(1).)
gfortran
- il compilatore GNU
Fortran 95, necessario se il programma è scritto in Fortran. (vedere
gfortran(1).)
git
- questo pacchetto contiene un
famoso sistema per il controllo delle versioni, progettato per gestire
progetti molto grandi con velocità ed efficienza; è utilizzato da molti
progetti open source, tra cui il kernel Linux. (Vedere git(1),
Manuale di git (/usr/share/doc/git-doc/index.html
).)
gnupg
- questo programma consente di
firmare elettronicamente i pacchetti. Questo è
importante soprattutto se si vuole distribuirli ad altre persone, e verrà
sicuramente fatto quando un pacchetto sarà pronto per essere incluso nella
distribuzione Debian. (vedere gpg(1).)
gpc
- il compilatore GNU Pascal,
necessario se il programma è scritto in Pascal. Un sostituto degno di nota
è fp-compiler
, il Compilatore Free
Pascal. (vedere gpc(1), ppc386(1).)
lintian
- questo è l'analizzatore
dei pacchetti Debian, una volta costruito il pacchetto, permette di scoprire
gli errori più comuni, cercando di spiegarli. (vedere lintian(1), Lintian User's Manual.)
patch
- questo utile programma usa
un file contenente una serie di differenze (prodotta dal programma diff) e
le applica al file originale, per produrre una versione modificata. (vedere
patch(1).)
patchutils
- questo pacchetto
contiene dei programmi che lavorano con le patch, come
lsdiff, interdiff e
filterdiff.
pbuilder
- questo pacchetto contiene
i programmi che vengono usati per creare e manutenere un ambiente
chroot. Creare pacchetti Debian nell'ambiente
chroot permette di verificare le dipendenze appropriate
ed evitare bug di tipo FTBFS (Fails To Build From Source, non compila da
sorgente). (vedere pbuilder(8) e pdebuild(1))
perl
- Perl è uno dei linguaggi di
scripting interpretato più utilizzati sugli odierni sistemi Unix e derivati,
spesso definito come il coltellino svizzero di Unix. (vedere perl(1).)
python
- Python è un altro
linguaggio di scripting interpretato molto utilizzato sui sistemi Debian,
combina una notevole potenza con una sintassi molto chiara. (vedere
python(1).)
quilt
- questo pacchetto aiuta a
gestire una gran numero di patch, tenendo traccia dei cambiamenti
apportati. Le patch sono organizzate in maniera logica come una pila, è
possibile applicare(=push) le modifiche apportate dalla patch, oppure
annullarle(=pop), semplicemente muovendosi attraverso la pila. (vedere
quilt(1) e /usr/share/doc/quilt/quilt.pdf.gz
.)
xutils-dev
- alcuni programmi,
generalmente quelli fatti per X11, usano questi strumenti per generare i
Makefile
da una serie di funzioni macro. (vedere
imake(1), xmkmf(1).)
Le brevi note elencate qui sopra servono solo ad accennare lo scopo di ogni pacchetto. Prima di continuare, è opportuno leggere la documentazione di ogni programma rilevante, compresi quelli installati per via delle dipendenze del pacchetto come make, almeno per un utilizzo di base. Può sembrare molto pesante farlo adesso, ma in seguito ci si renderà conto che sarà stato utilissimo. Se si hanno dubbi specifici potrebbe essere utile rileggere i documenti di cui sopra.
Segue una serie di documenti molto importanti che è consigliabile leggere insieme a questo documento:
debian-policy
- il manuale delle policy Debian comprende le
spiegazioni riguardanti la struttura e il contenuto dell'archivio Debian,
numerose problematiche inerenti la progettazione del sistema operativo, lo
Standard della Gerarchia del Filesystem (ndr.
Filesystem Hierarchy Standard), (che indica la posizione prevista per ogni
file e directory), ecc. In questo contesto, l'argomento più importante è la
descrizione dei requisiti che ogni pacchetto deve soddisfare per essere
incluso nella distribuzione. (vedere le copie locali di
/usr/share/doc/debian-policy/policy.pdf.gz
and /usr/share/doc/debian-policy/fhs/fhs-3.0.pdf.gz
.)
developers-reference
- la Debian Developer's Reference descrive
tutte le questioni non prettamente legate alle tecniche di
pacchettizzazione, come la struttura dell'archivio, come rinominare,
abbandonare o adottare un pacchetto, come fare gli NMUs, come gestire i bug,
suggerimenti pratici di pacchettizzazione, quando e dove fare i caricamenti,
ecc. (Si veda la copia locale di /usr/share/doc/developers-reference/developers-reference.pdf
.)
Segue una serie di documenti importanti che è consigliabile leggere insieme a questo documento:
Autotools Tutorial contiene un ottimo tutorial su the GNU Build System known as the GNU Autotools i cui componenti più importanti sono Autoconf, Automake, Libtool, e gettext.
gnu-standards
- questo pacchetto
contiene due documenti provenienti dal progetto GNU: GNU Coding Standards, and Information for Maintainers of GNU Software.
Nonostante Debian non necessiti del loro utilizzo, sono comunque utili come
linee guida e buona prassi. (vedere le copie locali di
/usr/share/doc/gnu-standards/standards.pdf.gz
e
/usr/share/doc/gnu-standards/maintain.pdf.gz
.)
Se questo documento contraddice uno dei documenti cui sopra, si considerino
corretti quest'ultimi. Si prega di inviare una segnalazione di bug relativa
al pacchetto maint-guide
usando
reportbug.
Segue una serie di tutorial alternativi che si possono leggere insieme a questo documento:
Prima di decidere di fare una domanda in qualche luogo pubblico, si prega di leggere la documentazione:
i file in
/usr/share/doc/
per
tutti i pacchetti pertinenti
pacchetto
il contenuto di
man
per tutti i comandi pertinenti
comando
il contenuto di
info
per tutti i comandi pertinenti
comando
il contenuto dell'archivio della listadebian-mentors@lists.debian.org
il contenuto dell'archivio della listadebian-devel@lists.debian.org
È possibile utilizzare i motori di ricerca web più efficacemente includendo
stringhe di ricerca come sito:lists.debian.org
per
limitare le ricerca ad un determinato dominio.
Creare un piccolo pacchetto di test è un ottimo metodo per imparare i dettagli della pacchettizzazione. Analizzare dei pacchetti già esistenti e ben manutenuti, è invece, il metodo migliore per capire come creano i pacchetti le altre persone.
Se si hanno ancora domande sulla pacchettizzazione alle quale non si trova risposta nella documentazione disponibile e le risorse web, si può chiedere aiuto nei seguenti luoghi:
debian-mentors@lists.debian.org mailing list. (Questa è la mailing list per i principianti.)
debian-devel@lists.debian.org mailing list. (Questa è la mailing list per gli esperti.)
su IRC in canali come
#debian-mentors
.
Team concentrati su uno specifico insieme di pacchetti. (Lista completa su https://wiki.debian.org/Teams)
Mailing list specifiche per lingua come debian-devel-{french,italian,portuguese,spanish}@lists.debian.org o debian-devel@debian.or.jp. (Elenco completo su https://lists.debian.org/devel.html e https://lists.debian.org/users.html)
Gli sviluppatori di Debian più esperti saranno lieti di aiutare, se viene chiesto correttamente e dopo aver fatto gli sforzi necessari.
Quando si ricevono delle segnalazioni di bug (sì, proprio quelle!), si dovrà approfondire l'utilizzo del Sistema di tracciamento dei bug di Debian e leggere la relativa documentazione, per essere in grado di gestire le segnalazioni in maniera efficiente. È vivamente consigliato leggere Debian Developer's Reference, 5.8. "Handling bugs".
Anche se tutto è andato per il meglio, è arrivato il momento di pregare. Perché? Perché in poche ore (o giorni) utenti da tutto il mondo cominceranno ad usare il vostro pacchetto, e se si è commesso qualche errore grave, la propria email sarà inondata da messaggi di molti utenti Debian incavolati… Si scherza ovviamente. :-)
Ci si deve rilassare ed essere pronti per le segnalazioni di bug, perché c'è molto lavoro prima che un pacchetto sia completamente conforme alle policy di Debian (ancora una volta, si legga la vera documentazione per i dettagli). In bocca al lupo!
[1] Nel documento si suppone l'utilizzo di un sistema
jessie
o superiore. Se si intende seguire questo
documento per un vecchio sistema (incluse le vecchie versioni di Ubuntu),
bisognerebbe almeno installare delle versioni backport (n.d.t. versioni dei
programmi presenti nei pacchetti di testing e unstable, compilate per poter
funzionare in un sistema stable) di dpkg
e debhelper
.
[2] Si possono avere più informazioni sulla gestione base di un sistema Debian dal documento Debian Reference. Questo documento contiene anche alcune riferimenti utili per approfondire la programmazioni Unix.
[3] Ci sono un paio di pacchetti specializzati ma simili, come dh-make-perl
, dh-make-php
, ecc.