Come amministratore di sistema Debian, si gestiranno abitualmente pacchetti .deb, dal momento che contengono unità funzionali coordinate (applicazioni, documentazione, ecc.), di cui facilitano l'installazione e la manutenzione. È perciò una buona idea conoscere cosa sono e come usarli.
Questo capitolo descrive la struttura e il contenuto dei pacchetti "binari" e "sorgenti". I primi sono file .deb, direttamente utilizzabili da dpkg, mentre i secondi contengono il codice sorgente e le istruzioni per costruire pacchetti binari.
5.1. Struttura di un pacchetto binario
Il formato dei pacchetti Debian è progettato in modo che il suo contenuto possa essere estratto su qualsiasi sistema Unix che abbia i classici comandi ar, tar e gzip (qualche volta xy o bzip2. Questa proprietà apparentemente banale è importante per la portabilità e il disaster recovery.
Immagina, ad esempio, di aver eliminato per errore il programma
dpkg e perciò di non poter più installare pacchetti Debian. Dal momento che
dpkg è esso stesso un pacchetto Debian, sembrerebbe che il sistema sia spacciato… Fortunatamente, si conosce il formato di un pacchetto e perciò si può scaricare il file
.deb del pacchetto
dpkg e installarlo manualmente (vedi il riquadro "
STRUMENTI dpkg, APT e ar). Se per sfortuna uno o più dei programmi
ar,
tar o
gzip/
xz/
bzip2 fosse scomparso, sarà necessario solamente copiare il programma mancante da un altro sistema (dal momento che ognuno di essi opera in maniera completamente autonoma, senza dipendenze, una semplice copia è sufficiente). Se il sistema è stato ancora più sfortunato, ed anche questi non funzionano (forse mancano le librerie principali del sistema?), si dovrebbe provare la versione statica di
busybox (fornito col pacchetto
busybox-static), che è ancora più autosufficiente, e fornisce sottocomandi come
busybox ar,
busybox tar e
busybox gunzip.
Questo è il contenuto di un file .deb:
$ ar t dpkg_1.17.23_amd64.deb↵
debian-binary↵
control.tar.gz↵
data.tar.gz↵
$ ar x dpkg_1.17.23_amd64.deb↵
$ ls↵
control.tar.gz data.tar.gz debian-binary dpkg_1.17.23_amd64.deb↵
$ tar tzf data.tar.gz | head -n 15↵
./↵
./var/↵
./var/lib/↵
./var/lib/dpkg/↵
./var/lib/dpkg/parts/↵
./var/lib/dpkg/info/↵
./var/lib/dpkg/alternatives/↵
./var/lib/dpkg/updates/↵
./etc/↵
./etc/logrotate.d/↵
./etc/logrotate.d/dpkg/↵
./etc/dpkg/↵
./etc/dpkg/dpkg.cfg.d/↵
./etc/dpkg/dpkg.cfg↵
./etc/alternatives/↵
$ tar tzf control.tar.gz↵
./↵
./conffiles↵
./postinst↵
./md5sums↵
./prerm↵
./preinst↵
./control↵
./postrm↵
$ cat debian-binary↵
2.0↵
Come si può vedere, l'archivio ar di un pacchetto Debian è composto da tre file:
debian-binary. Questo è un file di testo che indica semplicemente la versione del file .deb usato (nel 2015: versione 2.0).
control.tar.gz. Questo file archivio contiene tutte le meta-informazioni disponibili, come il nome e la versione del pacchetto. Alcune di queste meta-informazioni permettono agli strumenti di gestione dei pacchetti di determinare se è possibile installarlo o disinstallarlo, per esempio secondo l'elenco dei pacchetti già sulla macchina.
data.tar.gz. Questo archivio contiene tutti i file che devono essere estratti dal pacchetto; qui è dove sono memorizzati i file eseguibili, la documentazione, ecc. Alcuni pacchetti possono usare altri formati di compressione, nel qual caso il file avrà un altro nome (data.tar.bz2 per bzip2, data.tar.xz per XZ).