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: Treviño’s Blog » Compilare aMule 2.1.0 su Ubuntu / Kubuntu()

  • skypjack

    Destabilizzare l’albero principale Debian è la cosa più folle che abbia mai sentito e tutto perchè non sia dove finiscono i file di un programma??? Ma và…
    Il mondo Debian è ortogonale a chi non rispetta la sua policy (ad eccezione di programmi tipo lame, eccezioni dovute a limitazioni sulle licenze) e pertanto non andrebbe “intossicato” con robaccia…
    Del resto, chi rispetta la struttura basilare di un sistema GNU/Linux ti permetterà di usare il prefix per specificare DOVE INSTALLARE TUTTO IN MODO CHE TU POSSA RITROVARLO A TEMPO DEBITO!!!
    Aggiungi poi un parametro al tuo path (se hai deciso di sfruttare /opt, chiaramente) altrimenti neanche, perchè /usr/local è default di ricerca.
    A questo punto hai i tuoi programmi “estranei” isolati ed eliminabili, senza utilizzare programmi non destinati a te in modo assolutamente inappropriato!!
    Ricorda: GNU/Linux non è win32 e soprattutto Debian non è un giocattolo!!
    A buon intenditor… 🙂

    Ps: Chi sono? Ma il tuo caro icarus, ovviamente… 🙂

  • Ciao Icarus… Scusa… Non capisco… Perché destabilizzare?

    Non si destabilizza nulla a mio modo di vedere… Il pacchetto che si va a creare è “standard” non è che si creano casini di dipendenze o cosa… Cioè, non capisco che si dovrebbe destabilizzare… 😮

    Spiegami meglio 😛

  • skypjack

    Vedi Trevi, ora ti dico una cosa, ma non la prendere male, bensì come una spinta a imparare, capire e sapere sempre di più: Lascia stare!! :p
    E’ troppo presto per spiegarti certe cose, ancora sei un “nuovo arrivato” nel mondo GNU/Linux e devi imparare tanto… Ma presto capirai tutto, credimi… A bientot…

  • Ok… Ok… Intanto però questa guidina mi pare che risolva un po’ :).

    Se poi ci sono errori critici pensaci te ;).

    Inoltre, se ti registri puoi anche inviarmi delle bozze di articoli che posso pubblicare, quindi se vuoi aggiungere un po’ di professionalità, fai pure 😉

  • skypjack

    Quanto mi paghi? ;p

  • LOL… Ecco l’anima dello GNU ^_^ 😆

    Beh… Insomma, fai pure te 😛

  • COReE

    skypjack, stai facendo discorsi da 12-enne spero che
    ti renda conto presto! “Lascia stare” è una gran stupidata, e credimi “amo” debian forse più di te!

  • skypjack wrote > Quanto mi paghi? ;p

    Caro skypjack, il tuo ragionamento è quello di uno che già viene pagato, e sappiamo tutti da chi… 😉

  • fabio

    skypjack ci sei o ci fai?
    piuttosto, grazie della guida, manderò in pensione il trittico 🙂

  • skypjack, stai facendo discorsi da 12-enne […] Caro skypjack, il tuo ragionamento è quello di uno che già viene pagato, e sappiamo tutti da chi… […] skypjack ci sei o ci fai?

    Ragazzi tranquilli… Skypjack (AKA Icarus) è un mio amico. Ci siamo conosciuti all’Università, vi assicuro che «quanto mi paghi?» era solo una battuta :). Ci siamo scambiati righe e righe di email, è un ragazzo che per aiutare gli altri fa sempre i salti mortali (e non solo nell’informatica).

    Stava solo scherzando… Per il resto, è un amante della debian da anni ed è comprensibile che veda questo “mondo dei nuovi utenti” con un minimo di diffidenza. Lui le cose le sa, io le sto imparando e magari se mi “bacchetta” un po’ ci può stare. Ciò nonostante a volte è anche un po’ troppo integralista 😆 Ciao ^_^

  • Lui le cose le sa, io le sto imparando e penso faccia bene a bacchettarmi

    Treviño mi sembri un pò masochista!!!

  • AHAH… LOL… No, non la prendere così 😆

    Intendevo, se mi da dei consigli sono pronto ad accettarli visto che la sa lunga… Di certo la frase è un po’ sibillina, è vero 🙂

  • Treviño, che skypjack sia tuo amico, si ci sta; ma uno che è di passaggio (io) sul tuo blog, deve avere sensori telepatici in ottima forma per capirlo, e temo che alle 3 di notte siano un pò scrasi!!! Cmq, bel lavoro. Statemi bene ragazzi e lunga vita all’iniziativa!

  • Ehehe… Si, si… E’ comprensibile che ci sia stato un malinteso… Avevo capito :).

    Ad ogni modo grazie per i complimenti 😉

    A presto! ^_^

  • skypjack

    Ciao Trevi… Scusa ma dovevo preparare Metodi…
    Hai ragione, ha volte sono “cattivo”, ma un giorno vedrai ti torneranno utili le bacchettate!! Anche io le ho prese e anche tu un giorno le darai… E’ una ruota che gira… Ps: Appena ho un pò di tempo ti scivo qualcosa… Va bene algoritmica? Sai, passioni…

  • skypjack

    Ps: Chiaramente, rigorosamente, C/C++… S’intende… 🙂

  • Ah, ora il C++ lo accetti? 😀 😀

    Cmq, non sei cattivo, ma solo iper-rigoroso ;).

    Ad ogni modo ti lascio carta bianca… Quando vuoi, quello che vuoi 🙂

     

    PS: Se vuoi aggiungo a WordPress il plugin per colorare ed indentare il codice postato 😉 Penso ce ne sarà bisogno ^_^     

     

     

  • Pingback: Treviño’s Blog » Novità da KDE e Kubuntu: KDE 3.5.1 e SpreadKDE!()

  • keggy

    Grazie trevi ottima guida….. Cmq sia sta cazzo di amule nn fa lo stesso!!!!emoticon

  • SyBorg

    Mmmm… nella riga di apt-get install, mi sa che dh_make e’ dh-make

  • Ops… Grazie! 🙂

  • carcass

    Ottima guida, l’ho inserita come news al mio sito di appartenenza emoticon

    Spero ti faccia piacere emoticon

    Debian Clan

  • Ovvio… Grazie! 🙂  

  • Carcass

    carcass@debian:~/desktop/pcxfirewall-2.24$ dh_make -s
    Maintainer name : carcass
    Email-Address   : carcass@localhost.localdomain
    Date            : Mon,  3 Jul 2006 11:34:49 +0200
    Package Name    : pcxfirewall
    Version         : 2.24
    License         : blank
    Type of Package : Single
    Hit <enter> to confirm:
    Could not find pcxfirewall_2.24.orig.tar.gz
    Either specify an alternate file to use with -f
    or add –createorig to create one.
    carcass@debian:~/desktop/pcxfirewall-2.24$

     

    Gentilmente sapreste dirmi perche mi da questo errore????

    Seguo in maniera letterale la guida ma con qualsiasi pacchetto mi da sto errore………..

     

    Grazie emoticon 

  • Mhmmh… A me non è mai successo a dire il vero, comunque…

    Prova a fare dh_make -n -s

    Eventualmente, dimmi se viene creata la sottocartella ./debian (e se ci sono dati dentro…) 

  • Carcass

    carcass@debian:~/desktop/amule-2.1.3$ dh_make -n -s
    Maintainer name : carcass
    Email-Address   : carcass@localhost.localdomain
    Date            : Thu,  6 Jul 2006 16:11:30 +0200
    Package Name    : amule
    Version         : 2.1.3
    License         : blank
    Type of Package : Single
    Hit <enter> to confirm:
    Done. Please edit the files in the debian/ subdirectory now. amule
    uses a configure script, so you probably don’t have to edit the Makefiles.
    carcass@debian:~/desktop/amule-2.1.3$ debuild binary
    dpkg-checkbuilddeps: Unmet build dependencies: autotools-dev
    debuild: fatal error at line 1188:
    You do not appear to have all build dependencies properly met.
    If you have the pbuilder package installed, you can run
    /usr/lib/pbuilder/pbuilder-satisfydepends as root to install the
    required packages, or you can do it manually using dpkg or apt using
    the error messages just above this message.
    carcass@debian:~/desktop/amule-2.1.3$  

    Ciao

     

    Come hai suggerito te crea la sub dir debian ma poi da altri problemi dato che nbon ha quei pacchetti dev allora io mi domando: per ogni programma alla fine dobbiamo installare pacchetti dev…. ????

    Ho provato a compilare l’ultimo sorgente di amule e questo è tutto da console…..

     

    Ciao emoticon 

     

  • Se devi compilare un software, i pacchetti -dev sono necessari, visto che lì sono contenute le librerie che vengono utilizzate da quel software.

    Per aiutarti nella compilazione, ti consiglio auto-apt (lo installi da synaptic) che consente di cercare ed installare i pacchetti mancanti.

    Per usarlo fai:

    auto-apt run ./configure;

    qunidi ricconfigura i sorgenti come indicato sopra o con debuild clean && debuild binary

  • Carcass

    Grazie mille, capito.   emoticon

  • Pingback: [Ubuntu] Come creare dei pacchetti .deb « Dis Dix ;)()

  • Giuliastro

    Trev, mi spiegi rapidamente il funzionamento della versione nella nomenclatura del pacchetto? O meglio, capisco inserire il nome della distribuzione, ma il numero esattamente a cosa serve? Ha un senso avere un amule_2.1.0-0ubuntu1_i386.deb e un amule_2.1.0-0ubuntu7_i386.deb? Cosa succede se si trovano nello stesso repository? Scusa per l’ignoranza e grazie in anticipo per la splendida guida. 🙂

  • Allora… La distribuzione viene inserita principalmente per far differire i pacchetti ubuntu da quelli debian (e delle altre debian-based), il numero dopo serve per indicare la versione del pacchetto… Se per esempio uno aggiorna solo il pacchetto (magari gli script di configurazione o i files interni), ma lascia sostanzialmente la stessa versione del programma nel pacchetto, per far aggiornare gli utenti non cambia il numero di versione del programma, ma quello del pacchetto 😉

    Se si trovano nello stesso repository, apt prende il pacchetto con la versione maggiore (ed i numeri di versione hanno maggiore priorità a partire da sinistra [+ priorità] verso destra [- priorità]).

    Quindi nel tuo esempio, verrebbe scaricato l’*ubuntu7 (visto che tutto ciò che precede il "7" è uguale) 😉

  • Giuliastro

    Chiarissimo. Grazie mille e ancora complimenti. 🙂

  • Pingback: Installare wine, Skype, RealPlayer su Debian Etch AMD64 utilizzando pacchetti .deb « Il blog di GS Defender()

  • Socrate

    ciao ragzzzuoli , io ho rpovato con diversi programmi ma non va……l’errore, dopo aver dato:

    dh_make -s -e socratecb@yahoo.it -n –copyright gpl
     

    e dopo aver dato

     debuild binary

    è: 

    root@socrate-desktop:/home/socrate/Desktop/aMule-2.1.3# debuild binary
    debuild: fatal error at line 600:
    cannot find readable debian/changelog anywhere!
    Are you in the source code tree?

     

    cosa significa…..? che nella cartella non ci sono i sorgenti……?

     

  • Mi sa che il primo comando non ha funzionato… Attento alle opzioni; eventualmente leggi dh_make -h

  • Nice site. Thanks!
    http://xan-go.blogspot.com com xango

  • Cool site. Thanks.
    http://bootsugg.blogspot.com 9 boots size ugg

  • *Gian*

    Interessante e utile per tutti i poco esperti 🙂

  • Pingback: Compilare con Ubuntu: 4) Creare pacchetti Debian con dh_make « pollycoke :)()

  • Bellissimo

  • @ COReE :  io ho 12 anni e non faccio sti ca**o di ragionamenti.

    Cmq ottima guida, sto impachettando pdfedit

  • C’è già nel mio repo… 🙂

  • Good site. Thank you!
    http://webmeds.netfirms.com/alli-diet-pill aid alli diet

  • Pingback: Installare wine, Skype, RealPlayer su Debian Etch AMD64 utilizzando pacchetti .deb « La casa di Emanuele Cipolla()

  • Cool site. Thank you!
    http://toppages.isuisse.com/pravachol blood pravachol pressure

  • Look for my homepage please. | | | | | | | | | | | | | | | | | | | | | | | | |

  • ultimategrayfox

    Done. Please edit the files in the debian/ subdirectory now. amule
    uses a configure script, so you probably don’t have to edit the Makefiles.
    marco@ubuntu:~/Desktop/amule-2.1.3$ debuild binaryCan’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

    mi sono incartato qua… dove sbaglio? grazie 

     

  • Pingback: Installare wine, Skype, RealPlayer su Debian Etch AMD64 utilizzando pacchetti .deb « Emanuele Cipolla()