Capitolo 1. Partire nel modo giusto

# Capitolo 1. Partire nel modo giusto

È 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.

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!).

Questo documento sarà disponibile fino alle release `Buster` di Debian, dato che è stato tradotto in molte lingue. Dato che i contenuti non sono aggiornati, questo documento verrà eliminato nelle release successive. [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.

## 1.1. Dinamiche sociali di Debian

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)

## 1.2. Programmi necessari per lo sviluppo

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 `pacchetto`` o con `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.

## 1.3. Documentazione necessaria per lo sviluppo

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:

- Debian Packaging Tutorial

## 1.4. Dove chiedere aiuto

Prima di decidere di fare una domanda in qualche luogo pubblico, si prega di leggere la documentazione:

- i file in `/usr/share/doc/`pacchetto`` per tutti i pacchetti pertinenti

- il contenuto di `man`comando`` per tutti i comandi pertinenti

- il contenuto di `info`comando`` per tutti i comandi pertinenti

- 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.

Guida per il nuovo Maintainer |  | Capitolo 2. Primi passi