jump to navigation

Compilare con Ubuntu: 4) Creare pacchetti Debian con dh_make

In Avanzate, per Guru!, Guide il 7/03/07 @ 16:37 trackback

Questo è uno dei capitoli più importanti della serie, dal momento che descrive il momento catartico e rigenerante della creazione di veri pacchetti debian.

deb.png

Cosa intendo per “vero pacchetto debian”? Beh, semplifico dicendo che è un pacchetto contenente le informazioni necessarie alla sua corretta installazione su ogni distribuzione Linux basata su Debian (e quindi Ubuntu), quindi essenzialmente la gestione delle eventuali dipendenze da altri pacchetti e integrazione con il database di dpkg.


Ho sempre cercato di mettere in ordine e semplificare le innumerevoli informazioni contenute nella documentazione ufficiale per la creazione di pacchetti Debian, purtroppo è un compito veramente arduo, data la vastità della materia… anche perché non mi sono mai appassionato troppo alla faccenda.

Per fortuna c’è chi si è prodigato a rendere il tutto un po’ più accessibile e… perchè no? meno noioso! Se volete qualche guida semplificata, in inglese, potete leggere questo articolo su Linux.com, oppure questo post su UbuntuForums, o se preferite qualcosa in italiano c’è la guida dell’ottimo Treviño. Questa guida si ispira al loro lavoro, specie a quello di Treviño che ha chiarito molto la procedura :)

Obiettivi:

Sorgenti “debianizzati”: dh_make e la directory debian

L’argomento, come dicevo, è abbastanza vasto. Non si potrebbe liquidare in due parole, e molte delle guide, inclusa la documentazione ufficiale, spiegano dettagliatamente come creare manualmente tutti i file necessari. In ogni directory contententi sorgenti “debianizzati” esiste una sotto directory “debian”, in cui trovano posto alcuni file che contengono le istruzioni necessarie a trasformare sorgenti generici in potenziali pacchetti Debian.

Dal momento che io sono felipe :D liquido l’argomento proprio in due parole, con i comandi che uso io stesso talvolta per creare qualche semplice pacchetto. La cosa interessante è che il tutto avviene con una insospettabile facilità!
Esiste infatti un sistema che permette di creare automaticamente tutti file necessari, e in uno stato usabile. Si chiama dh_make, ed è un piccolo script che si occupa di creare la sottodirectory debian con impostazioni abbastanza affidabili per pacchetti semplici. Non pensate di compilare l’intero GNOME così :D

Requisiti essenziali:


$: sudo apt-get install devscripts dh-make make build-essential dpkg apt

Questo comando installerà alcune componenti essenziali, oltre allo stesso script perl “dh_make”

Comandi generici:

$: cd sorgenti_da_compilare-0.1.2
$: dh_make -e [email protected] -n -copyright gpl
$: CFLAGS="-Wall -g -O2" ./configure --host=i486-linux-gnu --build=i486-linux-gnu --prefix=/usr --mandir=${prefix}/share/man --infodir=${prefix}/share/info --altre-opzioni-peregrine
$: debuild binary

Il primo comando ci porta all’interno della directory dei sorgenti che vogliamo compilare. “Fin qui tutto bene” (cit l’odio). L’importante è che la directory abbia esattamente il formato nome-versione.

Il secondo comando è quello centrale: la creazione della directory debian. Lo switch “-e” serve a specificare l’indirizzo email del mantainer, “-n” salta la creazione di una patch e crea direttamente un sorgente “nativo”, “-copyright” specifica ovviamente la licenza. Vi verrà chiesto di specificare il tipo di pacchetto che si sta creando, quasi sicuramente basterà selezionare “s” (single). Se vi viene voglia di selezionare qualsiasi altra opzione, sappiate che state per entrare in un mondo di dolore. Limitatevi a pacchetti semplici!

Il terzo comando è il normalissimo “./configure” che diamo quando compiliamo qualcosa, ma con qualche parametro e qualche variabile per restare conformi agli standard di Debian. Ovviamente lascio a voi la risoluzione di eventuali dipendenze di compilazione… si suppone che prima di tentare la creazione di un pacchetto Debian, sappiate compilare :)

L’ultimo passaggio è la compilazione e l’impacchettamento vero e proprio. Una volta finito questo processo, verrà creato un pacchetto nella directory genitrice, quindi per installarlo basterà qualcosa del genere:

$: sudo dpkg -i ../pacchetto-creato_0.1.2_i386.deb

E, una volta verificato che tutto funzioni, sarete pronti per spammare al mondo intero il vostro pacchetto nuovo di zecca :)

Margini di miglioramento

Questa procedura è molto semplificata, ma non si discosta da quella ufficiale nella sostanza. Sappiate che se voleste migliorare le vostre capacità e approfondire il tutto, i margini (enormi) di miglioramento stanno tra il secondo e il terzo comando.

Dopo la creazione automatica dei file che stanno nella sottodirectory “debian”, un mantainer esperto va subito a modificare le informazioni predefinite, partendo ad esempio dall’aggiunta di una banale descrizione del pacchetto… per arrivare all’inclusione di script complessi e procedure mirate a far funzionare il singolo pacchetto.

Dopo aver fatto qualche esperimento quindi potreste voler consultare questa parte della guida ufficial. Se la cosa dovesse incuriosirvi e piacervi… potreste ritrovarvi dall’oggi al domani a creare pacchetti per Debian/Ubuntu!

Buona pacchettizzazione ;)

Pagine forse correlate:

Etichette:

Commenti »

1. Coobox - 7/03/07 @ 17:01

ottimo felipe mi serviva MITTIKO

2. NoWhereMan - 7/03/07 @ 17:12

hmmm, ma quanto cambia da “sudo fakeroot checkinstall” ? anche lì in fondo puoi impostare le dipendenze, se vuoi…

3. dav2dev - 7/03/07 @ 17:51

oh, grande, bella guida!!

un paio di domande, se io scarico i sorgenti svn e seguo la tua guida, quando poi aggiorno da svn devo cancellare la dir debian prima di ripetere la procedura?c’è anche qualche altro file coinvolto, oltre a quelli in debian/ ? nel caso scarichi un sorgente già “debianizzato” (tipo amsn che contiene già una cartella debian/) è sufficiente dare solo il terzo e quarto comando dei 4 che hai scritto?
grasssie

4. giovanni - 7/03/07 @ 17:52

Siiiiiii! Era dall’ultimo “Compilare con Ubuntu” che l’aspettavo! Grazie !

5. dav2dev - 7/03/07 @ 17:54

per la prima domanda, intendevo se la devo cancellare manualmente o lo fa lo script da solo, e se c’è qualche file speciale in debian/ che aggiorna solo i file da aggiornare, un po’ come fa svn che scarica di volta in volta solo il necessario..

6. Luigi Molinaro - 7/03/07 @ 19:30

[OT ] Senti Felipe sto impazzendo…. come fai a fare uscire i dettagli di cosa hai nelle cartelle sul tuo desktop ??

7. felipe - 7/03/07 @ 19:37

@Luigi Molinaro:
https://pollycoke.net/2006/11/28/ricetta-per-un-desktop-felipesco-digressione-sulle-icone/
L’ultima immagine di quel post

8. cr7 - 7/03/07 @ 19:41

Utilissimo! Grazie felipe ;)

lol, mi ero dimenticato di scrivere il nick :D

9. gnommer - 7/03/07 @ 21:31

Bravo felipe…. oltre ad essere molto modesto ;) hai fatto la guida che molti cercano. Non ti montare la testa pero’ :D

10. felipe - 7/03/07 @ 22:51

@tutti:
Ho fatto un po’ di pulizia di alcuni commenti fuorvianti, col permesso dell’autore dei commenti. Rock on :)

@NoWhereMan:
Non conosco quella possibilità con checkinstall, potresti fornirmi un link?

@dav2dev:
1. Meglio che fai tutto daccapo in quei casi.
2. no
3. sì

11. Marco - 7/03/07 @ 23:34

ARGH CHECKINSTALL
Il peggio del peggio. Da non consigliare alle persone assolutamente. A quel punto puoi usare Slackware.

12. packz - 8/03/07 @ 11:24

Dai i miei esperimenti ho scoperto comunque che se vai a installare dei file in directory diverse da quelle indicate in Debian/dirs ti da errore. Lui di default mette solo /usr/bin/usr/sbin e quindi se installi librerie (o già solo la documentazione) al momento di fare il pacchetto restituisce un errore. Adesso non mi ricordo se l’ho letto in quelche guida o mi è arrivato tramite messaggio divino… nel caso qualcuno sappia qualcosa di più sono pronto a ricevere informazioni…

Aspetto documentazione su Auto{conf,make}…

13. Massimiliano. - 8/03/07 @ 14:51

Bellissima guida, molte grazie!!!

14. zakk - 8/03/07 @ 19:58

@Marco: non mi offendere slackware!!!

15. NoWhereMan - 9/03/07 @ 20:22

@felipe: ./configure && make && sudo fakeroot checkinstall

anziché make install: crea un pacchetto in una finta root (attraverso fakeroot), checkinstall crea il pacchetto (ovviamente un deb), e usare sudo gli permette di installarlo direttamente. non ho link ma immagino puoi fare un giro su gùggol :P

funziona abbastanza bene, puoi anche indicare dipendenze… insomma non capisco quale sia il problema di checkinstall, visto che Marco qua inorridisce me lo dica lui :P

ciauzz

16. Roberto Mazzoleni - 9/03/07 @ 20:28

Debuild non ha il metodo per passare la flag -j a make…

C’è forse una variabile di sistema che si può modificare? (né il man di debuild né quello di make mi danno il nome di questa variabile…).

Provo a mettere un alias a make (make = “make -j3″), ma non mi sembra una soluzione molto elegante.

Perché se perdo meno tempo-uomo perché il pacchetto va preparato prima della compilazione (e poi basta per tutte le successive ricompilazioni) perdo più tempo-macchina perché non posso più sfruttare il biprocessore…

17. felipe - 9/03/07 @ 20:32

@NoWhereMan:
Ho trattato checkinstall in passato: https://pollycoke.net/2006/12/01/compilare-con-ubuntu-3-checkinstall/

Quello che ti avevo chiesto era una delucidazione sul supporto alle dipendenze. Checkinstall supporta diversi formati, ma è approssimativo. Credo che Marco intendesse questo

@Roberto Mazzoleni:
$: export MAKE="make -j3"

;)

18. Roberto Mazzoleni - 9/03/07 @ 20:39

Mi devo contraddire da solo… Basta aggiungere -eMAKE=”make -j3″ a debuild.

Evvai con la compilazione parallela!

19. Roberto Mazzoleni - 9/03/07 @ 20:40

Cavolo, non ho fatto in tempo a trovarlo da solo che mi hai risposto, SEI TROPPO FORTE Felipe ;-)

20. NoWhereMan - 9/03/07 @ 20:50

oh, scusa; be’ una delle opzioni alla creazione permette di scrivere delle dipendenze, ma sinceramente non ho idea di come e se funzioni

ciao

21. Roberto Mazzoleni - 9/03/07 @ 21:05

@NoWhereMan
con questo metodo le dipendenze vengono calcolate in automatico
@Felipe
ho provato ad esportare così la variabile ma non funziona, col metodo che ho scritto io funziona tutto. Col notevole risparmio di tempo del calcolo parallelo (magari anche con una bella ccache)

22. mighelone - 12/03/07 @ 9:47

Ciao a tutti! qualcuno ha idea della procedura da seguire per creare pacchetti basati su python?
Io ho provato a pacchettizzate quodlibet 0.24 e ho combinato un gran casino :-(

23. iPod Video su Ubuntu - Vive « InQuietudini - 14/03/07 @ 20:33

[...] (per amor di cronaca, per creare il pacchetto ho seguito la guida presente su PollyCoke! “Compilare con Ubuntu: 4) Creare pacchetti Debian con dh_make“): [...]

24. NoWhereMan - 18/03/07 @ 18:40

però, è quasi più facile che con checkinstall ^^

25. felipe - 19/03/07 @ 0:11

@NoWhereMan:
Già, ma regala molte più soddisfazioni :)

26. Compilare con Ubuntu: 5) Creare pacchetti a partire da "setup.py" « pollycoke :) - 21/03/07 @ 15:39

[...] Ubuntu), Articoli, Guide e HowTo, APT, Debian, Deluge, Ubuntu. trackback Nella mia guida “Compilare con Ubuntu: 4) Creare pacchetti Debian con dh_make” descrivevo il tipico caso di creazione di pacchetti a partire da sorgenti abbastanza [...]

27. freelabs @ sbarrax.it » Glipper (glipper_0.95.1-1_i386.deb) - 22/03/07 @ 15:13

[...] ho provato a fare il pacchetto anche con dh_make – seguendo questa buona guida di pollycoke “Compilare con Ubuntu: 4) Creare pacchetti Debian con dh_make” – ma non ha avuto altrettanta fortuna, il .deb ne è venuto fuori con una notazione diversa, [...]

28. Rhythmbox 0.10 + SVN impacchettati per Ubuntu Edgy [deb] « pollycoke :) - 3/04/07 @ 16:23

[...] miei post nella categoria “Compilare con Debian (e Ubuntu)“, e in particolare “Compilare con Ubuntu: 4) Creare pacchetti Debian con dh_make“. Se proprio non avete voglia di compilare e siete disposti ad installare un pacchetto non [...]

29. manu - 13/04/07 @ 16:30

il comando debuild binary mi restituisce questo errore:
couldn’t exec fakeroot debian/rules:

30. elegos - 13/04/07 @ 18:49

c’è un modo per modificare la versione del programma? Perchè ho messo descrizioni etc. nei file di configurazione, ma visto che sto compilando un programma SVN, sarebbe comodo poterlo aggiornarlo con la versione es. 1.5svn-revision

è possibile senza dover rifare dh_make -parametri ogni volta, che lo posso fare soltanto cancellando la cartella debian? Grazie!

31. elegos - 13/04/07 @ 18:50

@ manu: sudo apt-get install fakeroot

32. SuPerMan555 - 9/07/07 @ 16:25

E se io dovessi compilare un programma con autogen.sh, basta che lo sostituisco a configure?

33. Modo semplicissimo di creare un pacchetto .deb « Dott104 - Vuoto a perdere - 27/07/07 @ 10:40

[...] Guida su Pollycoke di Felipe : link; [...]

34. hman - 3/09/07 @ 17:25

Ottima guida, sono riuscito anche a modificare i files Dirs e Rules per inserire un link al menu principale della mia applicazione.
Mi chiedevo se esiste qualcosa del genere anche per creare RPM. Ho usato ALIEN per trasformare il .deb in .rpm, ma non so se porta con se le dipendenze.
Checkinstall sicuramente non le porta.

saluti
hman

35. potenzafb - 12/09/07 @ 0:13

Se al terzo passaggio mi succede questo:

./configure:3:in `require’: no such file to load — build/configure.rb (LoadError)

cosa succede? cosa devo combinare? :D

Grazie, ciao!

36. notoriousxl - 20/09/07 @ 16:06

Felipe, ti è mai capitato, alla fine dell’esecuzione di debuild binary, questo errore:

dh_clean -k
dh_installdirs
# Add here commands to install the package into debian/tcl-ts.
/usr/bin/make prefix=/home/andrea/src/amsn-temp/tcl/unix/debian/tcl-ts/usr install
make[1]: Entering directory `/home/andrea/src/amsn-temp/tcl/unix’
Making directory /opt/ts/lib
mkdir: impossibile creare la directory `/opt/ts’: Permission denied
chmod: impossibile accedere a `/opt/ts/lib’: No such file or directory
Making directory /opt/ts/bin
mkdir: impossibile creare la directory `/opt/ts’: Permission denied
chmod: impossibile accedere a `/opt/ts/bin’: No such file or directory

Cioè, il debuild binary vuole scrivere sulla root del sistema! :|
È un problema lanciarlo come root? A te è mai capitato?

PS: il pacchetto in questione sono le tcl prese da cvs, questo è il configure, se può essere utile (ma non penso, ho anche provato a non passargli parametri):
CFLAGS="-Wall -g -O2" ./configure --host=powerpc-linux-gnu --build=powerpc-linux-gnu --prefix=/opt/ts --includedir=/opt/ts/include/tcl8.5 --enable-shared --enable-threads --mandir=/opt/ts/share/man --enable-man-symlinks --enable-man-compression=gzip

37. Masand - 22/09/07 @ 13:39

Sto provando a compilare GNome Video Arcade con uesta guida, ma facendo tutti i passi come da procedura, il comando “debuild Binary”, mi restituisce il seguente errore:

Can’t exec “fakeroot”: Nessun file o directory at /usr/bin/debuild line 1210.
debuild: fatal error at line 1210:
couldn’t exec fakeroot debian/rules: Nessun file o directory

Come posso risolvere?

Grazie molte…

Un saluto a tutti…
masand

38. FileZilla 3.0.2.1 per Ubuntu Gutsy [deb] « pollycoke :) - 5/11/07 @ 13:42

[...] con Debian (e Ubuntu)” (preferibilmente in ordine cronologico inverso) e specialmente “Compilare con Ubuntu: 4) Creare pacchetti Debian con dh_make” per farsi un’idea, e poi passare alla documentazione ufficiale messa a disposizione [...]

39. Leo - 1/02/08 @ 11:29

Sucusate la domanda.

Tutto questo funzina se il pacchetto si compila con ./configure make make install.

Ma se invece bisogna usare cmake? come creo il deb?

40. Leo - 12/02/08 @ 11:02

aggiungi autotools-dev alla lista dei pacchetti richiesti per debuild

Per il resto grazie per la guida

41. Leo - 12/02/08 @ 11:04

ops… anche fakeroot ;-)

42. monolite - 20/02/08 @ 14:43

Bella guida:) preferisco comunque il metodo con chekinstall e fakeroot:)
é più semplice e per me elastico….:)

43. bergs - 26/06/08 @ 11:55

in ubuntu 8.04 devi aggiungere anche fakeroot!

44. Anonimo - 1/12/08 @ 18:55

ma mi sieghi che motivo c’è nell’intallare apt [b]da[/b] apt??

45. Mario - 27/12/08 @ 22:16

Ciao
A me dice che non c’è il file configure, come mai?
[email protected]:~/NetBeansProjects/ciao-0copia.1$ CFLAGS=”-Wall -g -O2″ ./configure –host=i486-linux-gnu –build=i486-linux-gnu –prefix=/usr –mandir=\${prefix}/share/man –infodir=\${prefix}/share/inf
bash: ./configure: Nessun file o directory

46. Compilare Solang su Ubuntu « pollycoke :) - 17/06 @ 23:36

[...] di creare un vero pacchetto debian, per quello basta seguire la mia sempre-valida “Compilare con Ubuntu: 4) Creare pacchetti Debian con dh_make“, oppure aspettare che il torrenziale Dktrkrantz sforni puntuale un pacchetto di ottima [...]