Translation(s): English - Español - Italiano


Introduzione

Questo tutorial è basato sul tutorial live in IRC di Debian Women tenuto da Gürkan Sengün.

È stato lievemente modificato per adattarsi allo stile del web, e mantenere anonimi i nomi dei partecipanti.

Requisiti

Questo corso si rivolge a persone che non hanno mai fatto un pacchetto Debian, ma hanno compilato loro stessi del software dai sorgenti. Verrà creato un piccolo pacchetto Debian. Per questo saranno necessari alcuni strumenti di Debian, usare:

   apt-get install build-essential devscripts dh-make

pacchettizzazione

Si può pacchettizzare per Debian (sezione main) qualunque cosa sia Software Libero (conforme alle DFSG).

Prima di pacchettizzare qualcosa per Debian, è una buona idea verificare se non l'abbia già fatto qualcun altro: fare una rapida ricerca su Google e quindi cercare se c'è un ITP. Una volta che si è sicuri che il software non sia pacchettizzato, si dovrebbe compilare un ITP.

Chiunque può lavorare a Debian, le persone che fanno dei pacchetti per Debian li possono mettere online (su un server web). Se poi chi ha creato il pacchetto trova uno sponsor (ovvero un Debian Developer, abbreviato DD, che verifica quel pacchetto e lo introduce in Debian), può diventare un Debian Maintainer (DM) e apparire su: http://www.debian.org/devel/people.

Quando un nuovo pacchetto viene caricato in Debian, esso dapprima appare nella "Debian new queue" (la si può trovare con Google). Successivamente appare su http://buildd.debian.org

Flusso di lavoro della pacchettizzazione

Procurarsi il software

Questo tutorial farà riferimento al pacchetto wmplopfork (una piccola dockapp, che mostra graficamente l'utilizzo della CPU).

I passaggi da seguire e le indicazioni generali fornite si applicano a qualunque altro programma.

Si può scaricare il software utilizzato in questo tutorial da: http://hules.free.fr/wmforkplop/

È una buona idea quando si fanno pacchetti avere una directory chiamata "debian" nella propria $HOME (o magari "sources/debian" o "src/debian", il concetto è quello), e scaricare in quella directory il codice sorgente dei programmi originali.

Quindi, una volta scaricato il codice sorgente, lo si deve spacchettare (nel nostro caso con tar -xzvf wmforkplop-0.9.1.tar.gz ).

Come si può vedere, wmforkplop si spacchetta per bene in wmforkplop-0.9.1, ma non tutto il software è disponibile in questa bella forma, a volte fanno pasticci e si spacchettano nella stessa directory. Si può dare un'occhiata al file tar facendo tar -tvf tarfile.tar.gz o usando mc.

Debianizzazione con dh

Definire nel proprioo script di login (.bashrc, .zshenv, ecc.) le variabili d'ambiente:

export DEBEMAIL=vostro@indirizzo.email` e `export DEBFULLNAME="Vostro Nome"`.

Assicurarsi di avere esportato tali variabili prima di proseguire, saranno utilizzate da dh_make.

Ora è la volta di entrare nella nuova directory ed eseguire

dh_make 

Questo programma farà alcune domande e aiuterà a creare il nuovo pacchetto.

 Type of package: single binary, multiple binary, library, or kernel module? [s/m/l/k]

Sta chiedendo che tipo di pacchetto si vuole creare. Selezionare "s" per un singolo binario. È il pacchetto con cui solitamente si comincia. È meglio cominciare con le cose semplici e poi fare pacchetti più complicati quando si ha più esperienza.

Mostrerà delle altre informazioni e aspetterà un <Invio> di conferma: confermare.

Preparazione del pacchetto

dh_make fa un gran bel lavoro aiutando a cominciare con il pacchetto, ma c'è ancora tanto lavoro da fare, specialmente dentro la directory debian/.

README e INSTALL

È buona prassi leggere come prima cosa i file README e INSTALL forniti con il pacchetto originale.

Questo consentirà di sapere come dev'essere installato il programma, e di sapere se ha delle dipendenze impreviste. In più, se il file INSTALL non è quello classico di AutoTools, potrebbe essere necessario leggerlo nel dettaglio per scoprire cosa si deve fare per installarlo.

Nel caso di wmforkplop, il README dice che sono necessari altri software per poterlo creare: imlib2 e libgtop2; è fatto anche notare che il pacchetto sorgente ha un tipo di carattere: Vera.ttf, dal momento che questo è un carattere che è fornito da un altro pacchetto (lo si può verificare utilizzando http://packages.debian.org) dipenderemo da quest'ultimo pacchetto.

Il file INSTALL dice che wmforkplop utilizza autotools, e dunque non c'è bisogno di toccare alcun Makefile. Nel caso di un software che non usa gli autotools, potrebbe esser necessario modificare il Makefile per renderlo adatto a Debian. È necessario installarlo nella directory debian/ utilizzando $(DESTDIR).

.ex

Entrare nella directory debian/ e guardare i molti file creati da dh_make, se ne possono cancellare subito parecchi. Molti di essi sono file .ex (da example); non dovrebbe restare alcun file .ex alla fine della creazione del pacchetto.

Si può rimuovere

Dopo tutte le rimozioni, dovrebbero essere rimasti 10 file.

debian/manpage.1.ex: Questo è un esempio di pagina man.

debian/menu.ex: Questo è un esempio di file di menu per il pacchetto menu.

debian/watch.ex: Questo è un esempio di file watch.

Esaminando nell'ordine i rimanenti file, si ha:

debian/changelog

In questo file si vede il pacchetto, l'archivio delle versioni debian-version e l'urgenza, qualcosa del tipo

wmforkplop (0.9.1-1) unstable; urgency=low

dove

Se si fosse compilato un ITP, si sarebbe ottenuto un numero di bug ITP da bugs.debian.org, qualcosa come #123456. È possibile chiudere il bug con il caricamento di tale pacchetto, aggiungendo nel changelog:

Il file debian/changelog può sembrare innocente, ma è uno dei più importanti.
È letto da molti bot (il bot per i bug, il bot buildd, ecc.);
è il solo file in cui viene indicata la versione del pacchetto: è l'informazione che sarà conservata con ciascun rilascio.

debian/control

Questo file controlla

La parte iniziale contiene le informazioni sul pacchetto sorgente (Source) documentate in: http://www.nl.debian.org/doc/debian-policy/ch-controlfields.html

Ora iniziano le informazioni sul pacchetto binario:

debian/copyright

In questo file si dovrebbe dichiarare

Se il software ha licenza GPL si può semplicemente mettere una breve nota che dichiari "on Debian GNU/Linux systems you can find the complete GPL licence in /usr/share/common-licences/GPL" (sui sistemi Debian GNU/Linux si può trovare la licenza GPL completa in /usr/share/common-licenses/GPL).

Ma se non è GPL (o BSD), si dovrebbe includere qui l'intera licenza.

Se alcune parti del software sono GPL e altre hanno qualche altra licenza, si dovrebbe indicare in modo molto chiaro di che parti si tratta, e copiare la licenza alla lettera nel file copyright.

debian/docs

Questo file comprende i file che saranno copiati in /usr/share/doc/pacchetto quando il pacchetto viene installato.

Nel caso di wmforkplop, si può rimuovere la riga Vera.txt dato che è già stata aggiunta la dipendenza.

Si dovrebbe quindi dare un'occhiata ai file ../{NEWS, README, TODO}.

debian/compat

Questo file indica il livello di compatibilità con debhelper.

Debhelper ha subito numerose revisioni, alcune delle quali rompono la compatibilità; si può usare il numero di compat per specificare la revisione di debhelper che il pacchetto in questione richiede o supporta.

È già stato stabilito che è necessario dehelper (>= 4.0.0), dunque compat dovrebbe essere 4.

Si potrebbe avere un pacchetto vecchio che utilizza una sintassi di debhelper vecchia e potrebbe essere compat 1 o compat 2.

Si raccomanda comunque di usare l'ultima versione.

debian/manpages

Questo file stabilisce dove sono le pagine man. Non è stato creato da debhelper: è necessario crearselo da soli.

Nella directory debian/ eseguire:

echo "debian/wmforkplop.1" > manpages

debian/rules

Questo file è simile a un Makefile: ha regole (rules) per lo svolgimento di una serie di compiti.

Debhelper l'ha già riempito con molte regole e compiti, alcuni dei quali sono in forma di commento.

Una volta finite le modifiche, non vi dovrebbero più essere righe di commento. Il che equivale a dire che si dovrebbero decommentare quelle che servono e cancellarle quelle che non servono.

Lettura suggerita sui Makefile:

Proprio in fondo al file si troveranno tre comandi in forma di commento: dh_perl, dh_python, dh_makeshlibs; possono essere tutti rimossi, dato che non si sta usando Perl, né Python, né si stanno facendo shlib.
Si può poi rimuovere anche dh_installinfo, dh_cron, dh_init, dh_mime, dh_pam, dh_emacsen, dh_logrotate, dh_debconf e dh_install, per analoghe ragioni.
Si dovrebbe usare:

Però decommentare dh_installmenu (dato che c'è un file menu).

Creazione dei pacchetti

La preparazione del pacchetto è quasi completa, il prossimo grande passo è crearlo.

Lo si fa utilizzando il comando debuild. Se non si ha la propria chiave GPG a portata di mano, si può creare il pacchetto senza firmarlo usando:

debuild -us -uc

ma ricordarsi che è una buona idea avere la propria chiave GPG pronta quando si creano pacchetti.

Il comando potrebbe lamentarsi della mancanza delle necessarie dipendenze di compilazione; se ciò accade, installarle.

Quando si crea il pacchetto, si possono incontrare errori come:

Ciò è comune, perciò non demoralizzarsi; correggere gli errori e riprovare.

Una volta finita la creazione del pacchetto, ci si dovrebbe spostare nelle directory genitrice (quella $HOME/debian) e visualizzare l'elenco dei file al suo interno. Ci dovrebbero essere

Ora si può eseguire lintian sul pacchetto, per controllare che sia in buono stato:

lintian -Ivi wmforkplop_0.9.1-1_i386.deb

o qualunque sia il nome del file che si è creato.

Probabilmente mostrerà un elenco di errori e avvertimenti che andranno corretti per poi ricreare il pacchetto.

Una volta corretti gli errori e gli avvertimenti per il .deb, si potrebbe eseguire lintian su

Installazione ed esecuzione

L'ultimo test per il pacchetto è la sua installazione ed esecuzione. Per installarlo si dovrebbe usare:

dpkg -i wmforkplop_0.9.1-1_i386.deb

Dopo che è installato provare le cose che sono state pacchettizzate: provare

Condividere il pacchetto

Anche se non si mette il proprio pacchetto in Debian, lo si può comunque condividere con altri mettendolo nella propriaa directory serverweb/debian/.

Domande e risposte

Queste sono le domande fatte e le risposte date durante la sessione su IRC.

Si spera diano una risposta a molte delle comuni domande che potrebbero nascere quando si legge questo tutorial.

Che cosa significa 'ITP' e a che cosa serve?

ITP significa "Intent To Package" (Proposito di pacchettizzare).

È un tipo speciale di bug, che indica che chi lo invia (o qualcun altro) ha intenzione di pacchettizzare un certo software.

Lo scopo degli ITP è di far sì che nessun lavoro sia fatto due volte, così se qualcuno sta pacchettizzando un programma che si vorrebbe pacchettizzare, non sarà necessario farlo due volte.

È buona prassi segnalare un bug ITP (usando reportbug o un client di posta) prima di pacchettizzare del software.
Questo "assicura" che non si sprechi lavoro (che altre persone impacchettino lo stesso software, se controllano il database degli ITP).

Per maggiori informazioni vedete http://www.nl.debian.org/devel/wnpp/.

Che cosa sono gli autotools? Che cos'è lo script `./configure`?

Gli autotools sono un insieme di utilità per aiutare nella compilazione di un programma su ogni piattaforma.

Il ./configure cerca di rilevare su che piattaforma è, e genera un Makefile adatto all'ambiente, o se non può ci rinuncia.

È davvero una manna dal cielo, un tempo sarebbe stato necessario modificare il Makefile da soli.
Se la propria piattaforma non era menzionata nel Makefile, era necessario indovinare i valori da utilizzare per far sì che il programma si compilasse.
Spesso era necessario modificare un po' anche i sorgenti.

Come pacchettizzo i pacchetti che non si compilano? (documentazione, pagine web, script di shell)

Non c'è un tutorial su questo, a causa della miriade di possibilità; ci sono così tanti differenti tipi di pacchetti non compilati che è arduo dare degli indirizzi generali su di essi.

Si possono guardare però dei pacchetti di esempio, per esempio ttf-junicode (Architecture: all) o supertux (all e i386). Provare apt-get source qualchepacchetto e dare un'occhiata a com'è fatto.

Vedere anche