First Debian Package Tutorial

Pèter Szabò

v1.0, 12 Febbraio 2003

Questo tutorial fornisce le istruzioni per la creazione di pacchetti deb per Debian GNU/Linux partendo da un file sorgente in formato tar.gz e le istruzioni per la creazione di un repository di pacchetti Debian sia locale che in rete. Traduzione ed adattamenti in italiano a cura di Hugh Hartmann e revisione a cura di Kriss .


Sommario
1. Introduzione
1.1. Scopo di questo tutorial
2. Perché creare un pacchetto Debian
3. Installazione di pacchetti necessari
4. Scaricare ed estrarre il file sorgente .tar.gz
5. Leggere la documentazione relativa alla creazione di pacchetti Debian
6. Realizzare prima il pacchetto nel modo non-Debian
6.1. Eseguire 'autoconf'
7. Realizzare il pacchetto nel modo Debian: 'deb-make'
8. Creare il Makefile
8.1. Modificare il Makefile.in o il Makefile
9. Modificare il file debian/rules
10. Modificare il file debian/control
11. Modificare il file debian/dirs
12. Modificare il file debian/changelog
13. Modificare gli altri file debian/* in modo adeguato
13.1. I file debian/*.ex non necessari
14. Aggiungere una voce 'dch -i'
15. Eseguire debian/rules build
16. Eseguire debian/rules source
17. Creare i file del pacchetto .deb
18. Modificare il file 'files' e aggiornare il CVS
19. Creare un file diff/patch
20. Installare il pacchetto
21. Modificare gli altri file
21.1. Sottoporre il file .patch all'autore del software
22. Rendere pubblico il proprio pacchetto .deb sul proprio sito web
23. Creare un repository di pacchetti Debian
24. Creare un repository di pacchetti Debian in rete
25. FAQ

1. Introduzione

Questo tutorial vi insegnerà a realizzare un pacchetto Debian (.deb) da un file sorgente tar.gz e ad impostare un repository di pacchetti Debian in modo che ognuno possa installare i vostri pacchetti (e le loro relative dipendenze) con una singola chiamata di 'apt-get install'.


1.1. Scopo di questo tutorial

Questo documento può servire come tutorial per i principianti e come promemoria per quelli che hanno già alcune esperienze con il sistema Debian GNU/Linux e con i relativi strumenti di gestione dei pacchetti deb.

Si descriverà la maniera con 'deb-make', lavorando su sistemi Debian Woody e Sid. Lo strumento deb-make rende molto facile la realizzazione di un pacchetto Debian dalla distribuzione sorgente tar.gz di un programma. Usando questa guida si può creare ed installare il primo pacchetto Debian in 60 minuti.


2. Perché creare un pacchetto Debian

Questi sono i vantaggi più importanti della creazione di un pacchetto Debian:


3. Installazione di pacchetti necessari

Per la creazione di un pacchetto deb sono necessari i seguenti pacchetti:

Per installare i pacchetti precedenti eseguire da root:

apt-get update
apt-get install doc-debian debian-policy
apt-get install dpkg apt
apt-get install make g++ gcc perl autoconf sed
apt-get install debmake devscripts fakeroot

4. Scaricare ed estrarre il file sorgente .tar.gz

Usare wget(1) o il proprio gestore di download preferito per scaricare i sorgenti di un pacchetto software non-Debian. Per estrarre il file sorgente usare:

tar xzvf NOMEFILE.tar.gz
(o tar xvf NOMEFILE.tar)

Rinominare la directory del pacchetto (cioè la directory creata da tar quando estrae l'archivio) a nomepacchetto-versione. Si possono avere tanti trattini (-) nel nome del pacchetto quanti se ne desiderano, ma non devono esserci spazi o segni di sottolineatura (_). Per favore si modifichino tutte le lettere maiuscole in minuscole.

Eseguire il comando appropriato 'cvs import' se si progetta di includere questo pacchetto nel proprio repository CVS.


5. Leggere la documentazione relativa alla creazione di pacchetti Debian

Prima della creazione di qualsiasi pacchetto Debian si è pregati di leggere la seguente documentazione:

Ricordarsi la posizione della seguente documentazione per una successiva lettura:


6. Realizzare prima il pacchetto nel modo non-Debian

Seguire la procedura usuale per la compilazione di un pacchetto UNIX, completamente scorrelata alla Debian. (il tempo di questo passaggio non è parte dei 60 minuti necessari alla creazione del primo pacchetto Debian. Questa procedura può richiedere 2 minuti o 2 giorni, dipendentemente del proprio sistema e dalla propria esperienza). Se ci si aspetta di essere uno sperimentatore in questa area, la procedura descritta qui non è cosi dettagliata.

Ricordarsi delle modifiche che si sono fatte per rendere il software compilabile sul proprio sistema. Possibilmente si sottopongano queste modifiche all'autore del software.


6.1. Eseguire 'autoconf'

Eseguire 'autoconf' solo se esiste un file configure.in, ma non il file configure. Eseguire anche 'automake' se esiste un file *.am. Molti utenti non necessitano di eseguire 'autoheader'.


7. Realizzare il pacchetto nel modo Debian: 'deb-make'

Eseguire 'deb-make' o 'deb-make native' (se non si prevede di creare un file diff) all'interno della directory del pacchetto.

Se si vuole creare un file diff successivamente, si deve sapere che 'deb-make' crea la directory nomepacchetto-ver.sione.orig contenente i file del pacchetto originale. Sovrascrivere questa directory con il reale contenuto originale se sono state fatte delle modifiche dopo aver estratto il sorgente .tar.gz.


8. Creare il Makefile

Creare il Makefile a meno che non esista già. Solo tre target (obiettivi) sono necessari. Di seguito vengono forniti esempi di Makefile:

Esempio di Makefile per un semplice programma in C (foo.c):

.PHONY: all install clean
all:
      gcc -s -O2 -W -Wall foo.c -o foo
      # ^^^ si aggiunga -pedantic e/o -ansi se si preferisce
clean:
      rm -f *.o foo
install:
      cp foo $(DESTDIR)/usr/bin/foo
      chmod 755 $(DESTDIR)/usr/bin/foo
      cp -p foo.man $(DESTDIR)/usr/man/man1/foo.1
      chmod 644 $(DESTDIR)/usr/man/man1/foo.1
      rm -rf $(DESTDIR)/usr/share/doc/foo
      cp -a docs $(DESTDIR)/usr/share/doc/foo

Esempio di Makefile per uno script Perl (foo.pl):

.PHONY: all install clean
all:
      @echo "Non necessario per compilare :-)"
clean: ;
install:
      grep -q '^=begin' foo.pl && pod2man foo.pl foo.1
      [ -f foo.1 ] && cp -p foo.1 $(DESTDIR)/usr/man/man1/foo.1
      chmod 644 $(DESTDIR)/usr/man/man1/foo.1
      chmod 755 $(DESTDIR)/usr/bin/foo
      cp -p foo.man $(DESTDIR)/usr/man/man1/foo.1

Si deve installare il tutto in $(DESTDIR) e non in '/'.


8.1. Modificare il Makefile.in o il Makefile

Questa è la sintassi del Makefile, in questo modo i tab all'inizio della linea sono significativi. Non si deve convertire i tab in spazi o viceversa, e si preservi l'indentazione originale di ogni linea.

Se c'è un file 'Makefile.in' (e un possibile script 'configure') allora si modifichi 'Makefile.in'. Altrimenti si modifichi il 'Makefile'.

Se esiste un target 'install:', verificare che esso installi ogni cosa sotto la directory @prefix, $(prefix) o $(DESTDIR). Se non esiste, aggiungere $(DESTDIR) prima di ogni nome di file e di directory del target.

Impostare la variabile CFLAGS (che contiene flag aggiuntivi per il compilatore C gcc) in maniera adeguata alle proprie necessità. Esempi:

CFLAGS = -s -O2 -W -Wall
CLAGSS = -g -W -Wall
CFLAGS = -s -O2 -W -Wall -ansi -pedantic
CFLAGS = -s -O2 -W -Wall -ansi -pedantic -Wstrict-prototypes
-Wtraditional -Wnested-externs -Winline -Wpointer-arith
-Wbad-function-cast -Wcast-qual -Wmissing-prototypes
-Wmissing-declarations -Wunused

9. Modificare il file debian/rules

Anche il file debian/rules ha la sintassi come il Makefile, così i tab all'inizio della linea risultano significativi. Quindi, non si devono convertire i tab in spazi e viceversa e si deve preservare l'indentazione originale di ogni linea.

Modificare la linea contenente '$(MAKE) install' nel modo seguente:

(indentazione con un singolo carattere tab all'inizio)
      $(MAKE) install prefix=`pwd`/debian/tmp/usr DESTDIR=`pwd`/debian/tmp

Se c'è una riga breve dopo 'build:' contenente './configure' aggiungere le opzioni appropriate per lo script 'configure'. La maggior parte delle volte non è necessaria alcuna opzione (eccetto per --prefix=usr). Per favore consultare il file README del pacchetto e/o './configure --help' per le opzioni addizionali.

Aggiornare la linea contenente '$(MAKE) CFLAGS=' a $(MAKE) se non si vuole che debian/rules sovrascriva il CFLAGS che si è impostato nel Makefile o nel Makefile.in.

Aggiungere le righe seguenti alla sezione 'clean:'

-rm -f core DEADJOE a.out
-rm -f config.status config.cache config.h
-rm -rf autom4te.cache

Aggiungere le seguenti righe:

.PHONY: source	
source: clean
      DIR="`pwd`";DIR="$${DIR##*/}"; cd .. && dpkg-source -b "$$DIR"

10. Modificare il file debian/control

Aggiungere/modificare le seguenti voci nella prima sezione (Source:):

Aggiungere/modificare le seguenti voci nella seconda sezione (Binary:):

Per il formato delle voci 'Depends:' e 'Build-Depends' si consulti il Debian Packaging Manual (descritto nella sezione "Leggere la documentazione relativa alla creazione di un pacchetto Debian".

Consultare /var/lib/dpkg/status per diversi esempi di 'Depends' etc.

Non è necessario fornire una voce per 'Version:', deb-make la estrarrà dal file debian/changelog.


11. Modificare il file debian/dirs

Aggiungere tutte le directory necessarie, ma non quelle create dal target 'install:' nel Makefile o nel Makefile.in.

Esempio:


12. Modificare il file debian/changelog

Modificare la riga contenente il numero di versione, aggiungere una versione relativa alla costruzione del pacchetto.

Esempio:

vecchia riga: sam2p (0.43) unstable; urgency=low
nuova riga: sam2p (0.43-1) unstable; urgency=low

13. Modificare gli altri file debian/* in modo adeguato

Nella maggioranza dei casi tutti gli altri file sono a posto. I file debian/*.ex contengono degli esempi. Se è necessaria la loro funzionalità, rinominarli senza l'estensione .ex (example) e modificarli in modo appropriato.


13.1. I file debian/*.ex non necessari

Rimuovere i file debian/*.ex non necessari.


14. Aggiungere una voce 'dch -i'

Assicurarsi che la propria variabile d'ambiente EDITOR sia impostata correttamente. Le impostazioni più comuni sono:

export EDITOR=vi
export EDITOR=emacs
export EDITOR=joe
export EDITOR=mcedit
export EDITOR=nano
export EDITOR=nano-tiny

Opzionalmente, aggiungere una di queste impostazioni di editor al proprio ~/.bashrc e al ~/.bash_profile.

Eseguire 'dch -i' per aggiungere la documentazione per la nuova versione del pacchetto appena creato. Si avvierà il proprio editor, e si posizionerà il cursore alla linea che inizia con un ' * '. Aggiungere qui la documentazione appropriata.

Esempio:

	sam2p (0.43-2) unstable; urgency=low
	
	  * Added proper Description:, Depends: and Build-Depends: to
	    debian/changelog, modified the Makefile to respect $(DESTDIR)
	    etc.
	
	 -- Szabó Péter  <pts@winter>  Fri,  7 Feb 2003 14:11:17 +0100
	
	sam2p (0.43-1) unstable; urgency=low
	
	  * Initial Debian release.
	
	 -- Szabó Péter  <pts@winter>  Fri,  7 Feb 2003 14:04:44 +0100
	
	Local variables:
	mode: debian-changelog
	End:

Assicurarsi che l'informazione della versione ('0.43-2' nell'esempio) sia corretta, dev'essere maggiore di quella della precedente esecuzione di 'debian/rules binary'.

Si può omettere la documentazione se si ha una fretta notevole ma si devono sempre verificare i numeri della versione. Mai salvare un file non conforme alla sintassi, perché questo impedirà di costruirsi altri binari. Se non si è sicuri, prima fare un backup, o guardare i vari file /usr/share/doc/*/changelog.gz.

Usare dch -a per aggiungere altri cambiamenti documentati (una voce extra che inizia con ' * ') all'attuale versione del pacchetto costruito.


15. Eseguire debian/rules build

Eseguire debian/rules build per costruire i binari. Questo (processo) può richiedere diverso tempo. Eseguirà il configure ogni volta che è richiamato. Questa è un'operazione normale.

Se ci sono messaggi di errore, fissare gli errori, rimuovere il file 'build', possibilmente eseguendo 'debian/rules clean' e ripetere ancora questo passaggio.


16. Eseguire debian/rules source

Eseguire 'debian/rules source' per costruire i file sorgente .tar.gz e .dsc. Questo passaggio è opzionale. È generalmente giudizioso creare questi archivi sorgenti, perché possono essere caricati dentro un repository di pacchetti Debian, e così gli altri utenti saranno capaci di ricompilare il pacchetto appena rilasciato con il comando:

apt-get -b source nomepacchetto

Vedere i repository dei pacchetti Debian successivamente in questo tutorial.


17. Creare i file del pacchetto .deb

Verificare che la versione costruita sia corretta e nella parte più alta del file debian/changelog.

Eseguire:

rm -f *~
fakeroot debian/rules build

18. Modificare il file 'files' e aggiornare il CVS

Se esiste un file 'files' (non 'debian/files') contenente i nomi dei file importanti, aggiungere a questo tutti i file 'debian/*', eccetto per debian/files* e debian/substvars -- ma prima si dovrebbe eseguire debian/rules clean.

Eseguire cvs add debian/* per includere questi file nel CVS (se applicabile).


19. Creare un file diff/patch

Questo passaggio è opzionale. Eseguire qualcosa come:

debian/rules clean
(cd ..; diff -ru nomepacchetto-ver.sione{.orig,} >nomepacchetto-ver.sione.patch)

20. Installare il pacchetto

Installare il pacchetto con dpkg -i. Si deve dare questo comando come root (non fakeroot). Eseguire qualcosa come:

dpkg -i ../nomepacchetto_versione_i386.deb

21. Modificare gli altri file

Se c'è qualcosa che non funziona con il pacchetto installato, modificare i file nella directory sorgente e tornare alla sezione "Creare il Makefile".


21.1. Sottoporre il file .patch all'autore del software

Se non si è l'autore del software, inviare un file .patch all'autore, così che possa incorporare il vostro lavoro di porting e/o di fissaggio di bug nelle versioni successive del software.


22. Rendere pubblico il proprio pacchetto .deb sul proprio sito web

Così altri utenti possano beneficiare del vostro lavoro. Non ci si dimentichi di comprimere nuovamente l'albero del sorgente originale a un file .tar.gz, e rendere pubblico anche i sorgenti, così anche gli utenti non Debian possano beneficiare del vostro lavoro, e il programma sia disponibile compilato in differenti versioni di libc.


23. Creare un repository di pacchetti Debian

Così ogni utente del proprio sistema può installare i vostri pacchetti con apt-get install e ricompilarli con apt-get -b source.

Non è necessario essere root per creare un repository di pacchetti. Verrà spiegato il caso più semplice, senza sub-directory o conflitti di nomi dei pacchetti.


24. Creare un repository di pacchetti Debian in rete

In questo modo chiunque può installare sul proprio sistema i vostri pacchetti con 'apt-get install' e ricompilarli con 'apt-get -b source'.

Questa è la fine del tutoria step-by-step.


25. FAQ