That’s my blog… Life and Linux

Creare pacchetti Debian a partire dai sorgenti – Guida Rapida

Introduzione

Make debian packags from sources tarball Una delle caratteristiche vincenti delle più valide distribuzioni debian sono sicuramente i pacchetti. I pacchetti (in generale) sono di fatto degli archivi compressi contenenti tutti i files di un applicazione (eseguibili, files di configurazione, documentazione…) ed installabili in modo molto semplice.
In particolare quelli debian si dividono in pacchetti Sorgenti e Binari, quando parlo di pacchetti, personalmente, faccio riferimento a quest’ultimi (binari) caratterizzati dall’estensione .deb e dal fatto di contenere principalmente files già compilati per una determinata architettura e già pronti per essere installati in una macchina con pochi click (o un semplice comando da shell se preferite :)). Per informazioni più dettagliate guardate la guida di debianizzati , o la guida ufficiale debian.

Senza stare a tirar fuori cose troppo complicate o specifiche, i pacchetti debian sono così utili non solo perché permettono di installare in modo rapido e semplice qualsiasi software senza doverselo compilare, ma anche perché grazie ad un database locale, ciascun PC è sempre in grado di monitorare i pacchetti installati, le versioni disponibili, le librerie dipendenti e quindi di controllare lo stato totale del proprio PC.
Ma secondo me c’è di più… Voglio dire, se uno scarica un software non pacchettizzato e se vuole installarlo dai sorgenti ricorrendo ai classici ./configure && make && sudo make install (o con relativi front-end grafici come Kcofigure o Kompile), tutte le volte che si installa qualcosa si butta nel nostro hard disk una marea di dati che il più delle volte non rintracciamo e che possiamo scordarci di eliminare (al momento opportuno) se non abbiamo mantenuto un log oppure se il Makefile supportava il make uninstall o simili.
Insomma, semplicemnte il risultato è una marea di files dispersi nel nostro HD non monitorati e difficili da cancellare; magari il sistema continua a funzionare come un missile, ma di sicuro lo spazio libero segnalato dal buon df col tempo cala e parecchio… 🙂
Viceversa, se si hanno dei pacchetti .deb, grazie al database della nostra distro debian(-based) possiamo in modo facile e trasparente sapere quale file appartiene al pacchetto X e quale a quello Y, e quindi con un semplice comando da shell (o un paio di click) possiamo disinstallare il tutto riprendendoci il nostro spazio in totale sicurezza… 🙂

Detto questo, qual’è la soluzione? Facile! Costruiamoci da soli i pacchetti .deb che ci servono!

 

Operazioni Preliminari

Per poter compilare un qualsiasi software vi serviranno inizialmente molti pacchetti di base, è normale che all’inizio avrete un sacco di errori in fase di configurazione, più che di compilazione, poi pian piano diminuiranno sempre col tempo, via via che vi fate una bella scorta dei pacchetti più importanti. Ad ogni modo quando avrete un qualche errore per mancanza di pacchetti, vi consiglio di cercare su google direttamente la stringa dell’errore (semmai unita alla parola «debian» o «ubuntu» o «kubuntu» in questo caso), oppure di rivolgervi al sistema di ricerca nei pacchetti di ubuntu.com ;).

Ad ogni modo, nel nostro caso, vi indicherò solamente i pacchetti fondamentali per fare dei pacchetti debian, da shell dovete dare il seguente comando:

  • sudo apt-get install devscripts dh-make make build-essential dpkg apt

Una volta installato quanto sopra dovrete essere a posto per quanto “mi” riguarda… Semmai chiedete!

 

Istruzioni

Vi dico subito che la via che intraprenderemo non sarà certo la più “ortodossa” e che magari non è troppo da guru, ma semplicemente è la più facile e veloce da seguire. Magari non funzionerà al 100% ma con maggior parte dei sorgenti andrà perfettamente (i problemi ci sono quando non c’è un Makefile o qualche volta quando manca il configure).

Comunque… Il metodo per creare il pacchetto è assolutamente banale:

  • Estraete i vostri sorgenti che saranno compressi in un archivio .tar.gz o .tar.bz2 in una cartella a sé stante, in modo tale che i files Makefile e (se presente) configure si trovino direttamente all’interno; il nome di questa cartella è molto importante e deve rispecchiare il seguente stile: nomeprogramma-versione.
    Attenzione
    , perché nomeprogramma deve essere tutto in minuscolo e può contenere solo caratteri, numeri, punti (.), più (+) o meno (-), mentre versione deve iniziare con un numero seppur i caratteri successivi possono contenere anche caratteri, punti… Quindi, se quanto detto non viene rispecchiato, onde evitare warning & co., vi consiglio di rinominare la vosta directory.

  • Entrate nella cartella suddetta con il classico:

    cd nomeprogramma-versione

  • Date il seguente comando:

    dh_make -s -e nick@provider.com -n –copyright gpl

    Il comando dh_make serve a creare una sottocartella ./debian/ "standard" contenente tutte le impostazioni generali per creare un pacchetto .deb che verranno poi integrate nei passi successivi, un file .deb contiene infatti due archivi, uno (data.tar.gz) contenente i dati puri da estrarre nel vostro filesystem, mentre l’altro (control.tar.gz) contenente le informazioni sul pacchetto ed i dati dei files presenti e che permette di beneficiare della vera forza dei pacchetti (ossia l’aspetto “gestionale”).

    I parametri indicati sono opzionali a dire il vero, cmq vediamo di spiegarli:
     -s serve ad indicare che state creando un pacchetto per un programma singolo (se non è il caso omettetelo, vi verranno chieste dopo altre informazioni);
     -e nick@provider.com vi consente di impostare la vostra email (può essere utile solo se ridistribuite il pacchetto);
     -n serve a dire al dh_make di non fare una copia di backup della cartella dei sorgenti prima di procedere alla creazione della cartella ./debian/. Se non avete fatto modifiche al codice e se avete sempre l’archivio iniziale non ha senso crearvi un backup (specie se avete parecchi MB di soergenti), ad ogni modo se omettete questo parametro vi troverete una cartella denominata nomeprogramma-versione.orig in più in ../ (ossia al livello superiore);
     –copyright gpl serve invece a definire la licenza che copre il software da "pacchettizzare". Le possibliità sono gpl, lgpl, artistic, bsd (se non la sapete omettetela pure, specie se il pacchetto è per “uso personale” ;));
     gli altri parametri li vedete facendo dh_make –help

  • Se non dovete ridistribuire il vostro pacchetto quanto fatto dal dh_make andrà benissimo altrimenti dovrete rivedere la configurazione del pacchetto, per farlo aprite con un qualsiasi editor di testo il file ./debian/control ed editatelo. Fondamentalmente vi dovrebbe bastare la modifica della categoria o della Descrizione… E’ tutto molto intuitivo, ad ogni modo per configurazioni più complete leggetevi questo tutorial.

  • Avviate la configurazione e la compilazione:

    Se dovete passare qualche comando di configurazione particolare (tipo la directory di una libreria o le opzioni di ottimizzazione, vedete la documentazione o l’–help del configure per maggiori informazioni) al file configure, allora avviate il seguente comando:

    ./configure –OPZIONE1=VALORE1 –OPZIONE2=VALORE2 …

    Ad i vostri valori, onde non creare problemi di incompatibilità, dovrete comunque aggiungere anche altri parametri definiti altrimenti in modo automatico:

    CFLAGS="-Wall -g -O2" ./configure –host=i486-linux-gnu –build=i486-linux-gnu –prefix=/usr –mandir=\${prefix}/share/man –infodir=\${prefix}/share/info

    Che quindi diventerà (nel caso vogliate includere parametri personali):

    CFLAGS="-Wall -g -O2" ./configure –host=i486-linux-gnu –build=i486-linux-gnu –prefix=/usr –mandir=\${prefix}/share/man –infodir=\${prefix}/share/info –OPZIONE1=VALORE1 –OPZIONE2=VALORE2

    Se altrimenti non dovete, come nella maggior parte dei casi, passare nessun parametro alla configurazione o se non esiste il file di configurazione avviate direttamente la compilazione e tutti i processi di creazione del pacchetto, ebbene questo si fa con il seguente comando:

    debuild binary

    In realtà il comando è solo debuild mentre binary è un parametro che serve ad indicare allo script di creare solo un pacchetto binario (se volete anche ricomprimere i sorgenti e binari creati omettetelo pure…). A questo punto verranno eseguiti tutti gli scripts del pacchetto devscripts necessari alla configurazione (se non l’avete fatta prima), alla compilazione, all’analisi delle dipendenze e alla compressione dei files in un file denominato nomeprogramma-versione_architettura.deb che, se andrà tutto bene, troverete nella cartella ../ (livello superiore)

  • Fatto! Ebbene, se non avete notato problemi il vostro pacchetto è pronto e potrete installarlo col semplice comando:

    sudo dpkg -i ../nomeprogramma-versione_architettura.deb

 

Esempio

Per facilitarvi (ulteriormente) il tutto vi mostro un esempio… Tutto questo l’ho ottenuto creando il pacchetto di aMule 2.1.0.

  • Estraete il file aMule-2.1.0.tar.bz2 che creerà una cartella ./aMule-2.1.0/ e che per quanto detto sopra dovrete rinominare in ./amule-2.1.0/
  • Accedete a ./amule-2.1.0/ da shell con cd amule-2.1.0
  • Ora, per nel mio caso ho utilizzato una configurazione ottimizzata come indicato nell’articolo apposito, quindi ho dato un comando ./configure mio, ma in questo caso facciamo tutto con le impostazioni predefinite dagli sviluppatori di aMule.
  • Dare il comando dh_make -s -e trevi55+public@gmail.com -n –copyright gpl
  • Poiché volevo rendere pubblico ho modificato con un editor il mio file ./debian/control aggiungendovi una descrizione (ricordate che ogni riga di descrizione deve iniziare con uno spazio o una tabulazione) e modificando la versione in 2.1.0-0ubuntu1 come è consuetudine per far capire la distribuzione di base.
  • Quindi ho avviato la compilazione con debuild binary.
  • Dopo «qualche» minuto ho avuto l’output atteso dpkg-deb: costruisco il pacchetto `amule’ in `../amule_2.1.0_i386.deb’. ed il mio pacchetto era nato!
  • Ho installato il pacchetto con sudo dpkg -i amule_2.1.0-0ubuntu1_i386.deb e tutto era funzionante!

 

Mi auguro che questa guida che doveva essere breve 😛 vi abbia aiutato!

 

CIAO! :bye:


Vi cito inoltre altre pagine dedicate alla creazione di pacchetti che ho letto prima di giungere alla conclusione che vedete sopra. In realtà nessuna usa un metodo simile (ossia, non usa il comodissimo debuild binary) complicando e rallentando molto le cose (è comunque logico che per fare pacchetti più “seri” è bene che diate un occhiata a questi documenti per produrre un pacchetto completo e perfetto in ogni suo aspetto ;)):

  • Pingback: Modo semplicissimo di creare un pacchetto .deb « Dott104 - Vuoto a perdere()

  • salve, stavo facendo una prova con deluge 0.5.5 e mi sono ritrovato questo errore …

    ./libtorrent/include/libtorrent/asio/basic_io_object.hpp:55: error: using invalid field ‘asio::basic_io_object::implementation’
    error: command ‘gcc’ failed with exit status 1
    make[1]: *** [all] Error 1
    make[1]: Leaving directory `/home/alga/repo/dev/deluge-0.5.5′
    make: *** [build-stamp] Error 2
    debuild: fatal error at line 1223:
    couldn’t exec debian/rules:

    d acosa può dipendere?

  • Pingback: Treviño’s Blog » Archives » Impacchettare Compiz Fusion GIT con MakeFusionDebs()

  • boh?

    ragazzi, ascoltate un vecchietto, lasciate stare: debian non si deturpa! lasciate la pacchettizzazione agli sviluppatori. lasciate il sistema “pulito”, nello spirito debian. saluti e in bocca al lupo per l’università (bei tempi…). ciao

  • paolo

    Grazie per questa ottima guida!!!