Capitolo 1. Partire nel modo giusto

Indice

1.1. Dinamiche sociali di Debian
1.2. Programmi necessari per lo sviluppo
1.3. Documentazione necessaria per lo sviluppo
1.4. Dove chiedere aiuto

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

The rewrite of this tutorial document with updated contents and more practical examples is available as Guide for Debian Maintainers. Please use this new tutorial as the primary tutorial document.

This document is made available for the Debian Buster release since it is offered in many translations but this 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.

If you need some help with packaging, please read 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:

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.

The following packages come with the standard Debian installation, so you probably have them already (along with any additional packages they depend on). Still, you should check them with aptitude show package or with dpkg -s package.

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]

    The new debmake may be used as the alternative to the standard dh-make. It does more and comes with HTML documentation with extensive packaging examples 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 - this utility lets you emulate being root, which is necessary for some parts of the build process. (See 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 - a tool that enables you to digitally sign packages. This is especially important if you want to distribute packages to other people, and you will certainly be doing that when your work gets included in the Debian distribution. (See 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 - this is the Debian package checker, which lets you know of any common mistakes after you build the package and explains the errors found. (See 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 - this package contains programs which are used for creating and maintaining a chroot environment. Building a Debian package in this chroot environment verifies the proper build dependency and avoids FTBFS (Fails To Build From Source) bugs. (see pbuilder(8) and 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-2.3.pdf.gz.)

  • developers-reference - the Debian Developer's Reference describes all matters not specifically about the technical details of packaging, like the structure of the archive, how to rename, orphan, or adopt packages, how to do NMUs, how to manage bugs, best packaging practices, when and where to upload, etc. (See the local copy of /usr/share/doc/developers-reference/developers-reference.pdf.)

Segue una serie di documenti importanti che è consigliabile leggere insieme a questo documento:

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.

The following is an alternative tutorial document that you may read along with this document:

Before you decide to ask your question in some public place, please read this fine documentation:

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

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

Even if it all worked well, it's time to start praying. Why? Because in just a few hours (or days) users from all around the world will start to use your package, and if you made some critical error you'll get mailbombed by numerous angry Debian users… Just kidding. :-)

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.