Una delle caratteristiche fondamentali dei sistemi GNU/Linux, fin dal 1994, è la gestione del software sotto forma di pacchetti. Questo permette di semplificare molte cose, sia per quanto riguarda l’installazione o rimozione da parte dell’utente, sia soprattutto per la gestione dei vari conflitti tra le librerie e gli aggiornamenti. Inoltre, è una buona soluzione anche per chi vuole rilasciare i propri programmi per architetture di processori differenti. Chi per lavoro o passione scrive programmi per GNU/Linux potrà certamente decidere di pubblicarli rilasciando il codice sorgente, ma gli utenti vorranno anche dei pacchetti precompilati perché oggi come oggi nessuno ha voglia di compilarsi tutti i programmi da solo. Un vantaggio dei pacchetti per il programmatore è che, nonostante esistano diversi formati, si possono facilmente convertire tra loro. Quindi si possono creare dei pacchetti Debian e convertirli poi in qualsiasi altro formato. Lo svantaggio è che creare pacchetti Debian con gli strumenti tradizionali è un po’ macchinoso o quanto meno noioso. Per fortuna, il comando Debuild si occupa di automatizzare la quasi totalità del procedimento. Permette di creare non soltanto i pacchetti binari, da distribuire agli utenti, ma anche i pacchetti sorgenti che si possono inviare su un proprio repository per compilarli nel cloud contemporaneamente per diverse architetture.
La prima cosa da fare è assicurarsi che il proprio file di progetto o makefile contenga istruzioni per l’installazione del programma. Per esempio, se si sta utilizzando qmake basta scrivere in coda al file:
unix {
target.path = /usr/bin
INSTALLS += target
}
Similmente, si possono seguire le linee guida di CMake oppure scrivere direttamente un’apposita sezione di un Makefile.
Il passo successivo è ovviamente ottenere il Makefile: per un progetto qmake basta dare il comando
qmake
nella cartella che contiene il file di progetto (quello con estensione PRO ). Su alcune installazioni, il comando qmake potrebbe trovarsi in una cartella diversa da /usr/bin . Si può semplificare l’operazione creando un link:
sudo ln -s /usr/lib/x86_64-linux-gnu/qt5/bin/qmake /usr/bin/qmake
ovviamente ci si deve assicurare che il percorso sia giusto.
Il nome della cartella del codice sorgente deve essere scritto nella forma nomedelpacchetto-versione
. Si può poi dare il comando
dh_make -e indirizzoemail -s --createorig
inserendo l’indirizzo email legato alla chiave GPG che verrà usata per firmare il pacchetto. Per un pacchetto relativo a un programma eseguibile, si può usare l’opzione -s
, mentre per le librerie si deve usare -l
.
Verrà creata la cartella debian : al suo interno vi sono una serie di file che è possibile modificare per personalizzare il proprio pacchetto. Alcuni, però, devono necessariamente essere modificati. Il primo è il file changelog : questo deve contenere una breve descrizione della versione del pacchetto e la firma GPG corretta. Inoltre, si può indicare la versione Debian (o Ubuntu) per cui il pacchetto è progettato. Per esempio, unstable o stable, bionic o zetsy.
Altro file fondamentale è control . In questo file si devono indicare le sezioni in cui inserire il programma nel sistema di pacchetti (office, multimedia, system ecc.) e i vari pacchetti dai quali dipende. Questi pacchetti possono essere ricavati da script automatici durante la compilazione del programma, ma anche inseriti manualmente, dividendoli con delle virgole. È importante anche inserire una descrizione.
Tornando nella cartella del codice sorgente, è possibile creare un pacchetto sorgente con il comando
debuild -S -sa
Se si sta soltanto producendo una versione diversa di un pacchetto il cui codice sorgente è già presente nei repository della distribuzione in uso, si può anche sostituire l’opzione -sa con -sd , per non caricare sui server anche il codice originale. Nella maggioranza dei casi, comunque, ha più senso la prima opzione. Il sistema ci chiederà di firmare il pacchetto con la nostra chiave crittografica. Si può poi caricare questo pacchetto sorgente su un server come Launchpad, usando il comando dput
, per compilare il pacchetto per più architetture.
Se ora si vuole creare direttamente il pacchetto binario, basta dare il comando:
debuild binary
Dopo la compilazione, il pacchetto in formato DEB verrà creato nella cartella superiore a quella del codice sorgente.
Nel caso in cui qualcosa vada storto si può fare pulizia con il comando debuild clean
, controllare i file e ripetere la costruzione del pacchetto. Se il pacchetto è stato creato lo si può provare a installare e disinstallare per assicurarsi che faccia esattamente quel che ci si aspetta.