3.4. Uno sguardo più approfondito agli strumenti per i pacchetti Debian

Precedentemente nella Guida, abbiamo menzionato alcuni dei comandi veramente semplici di gestione dei pacchetti con le loro opzioni maggiormente utilizzate. Tuttavia, Debian offre molte più possibilità in fatto di strumenti relativi alla gestione dei pacchetti.

dpkg, il gestore di pacchetti di medio livello per Debian, offre alcune funzioni di basso livello in più di apt-get e corrisponde a grandi linee al comando rpm sulle distribuzioni Linux basate su RPM (gestore dei pacchetti di Red Hat).

Come si nota facilmente, dpkg non possiede nessun metodo di recupero automatico dei pacchetti. Per installare un pacchetto con dpkg (ad esempio vim), si dovrebbe prima scaricare il pacchetto .deb per conto proprio e poi eseguire qualcosa del tipo dpkg -i vim_6.0.093-1.deb. dpkg non verifica neanche le dipendenze, così, in questo esempio, il pacchetto vim potrebbe essere scompattato ma la sua configurazione verrebbe rimandata fino a che non vengano installati tutti i pacchetti dai quali dipende (che è un modo di installare software noioso e poco educativo; usare apt-get). dpkg è tuttavia, ancora indispensabile per la gestione di basso livello e in definitiva vale la pena di esplorarlo.

dpkg -r vim rimuove il pacchetto se non sono istallati programmi che dipendono da lui. I file di configurazione per il pacchetto (quelli elencati come conffiles nei file di controllo del pacchetto) sono lasciati sul sistema. dpkg --purge vim rimuove vim con anche la configurazione. dpkg --configure --pending configura tutti i pacchetti in sospeso (per esempio, quelli che erano stati lasciati in attesa di essere processati dopo l'esecuzione di un dpkg senza successo).

Qualche volta è utile copiare la lista dei pacchetti da una macchina a un'altra ed avere tutto lo stesso software installato sull'altro sistema (o semplicemente tenere un elenco da qualche parte per un futuro riferimento). Utilizzare dpkg --get-selections > elenco per creare l'elenco e dpkg --set-selections < elenco; apt-get dselect-upgrade successivamente per caricare l'elenco ed iniziare l'installazione.

È anche possibile mettere i pacchetti in uno stato "bloccato", che significa che non si vuole che il sistema li tocchi. Usare echo vim hold | dpkg --set-selections. Per renderlo nuovamente disponibile per l'aggiornamento, eseguire echo vim install | dpkg --set-selections.

Alcune volte una azione di dpkg non può essere realizzata a causa di dipendenze mancanti, file duplicati o qualcosa di similare. Utilizzare --force-all con dpkg per ignorare il problema e proseguire. Questa opzione può essere usata ovunque con dpkg ma spesso è la causa della corruzione del database dei pacchetti (specialmente per mancata corrispondenza di versione) e del totale caos delle dipendenze. Se più avanti si pianifica l'utilizzo di apt-get, non si usi mai questa opzione poiché blocca immediatamente apt (si può, tuttavia, provare il comando apt-get -f install e apt farà del suo meglio per rimettere le cose in ordine).

dpkg-reconfigure può essere utilizzato per riconfigurare pacchetti abilitati per debconf (quelli che usano debconf per fare domande riguardanti la configurazione locale). Usare dpkg-reconfigure vim per riconfigurare vim. dpkg-reconfigure debconf riconfigurerebbe debconf stesso. Si può scegliere tra alcuni tipi di modi di configurazione di pacchetto interattivi o non interattivi. Il modo non interattivo è molto utile se si stanno realizzando un mucchio di installazioni automatizzate.

SuggerimentoNota
 

Alcune volte (a causa di un bug nell'interfaccia debconf di uno specifico pacchetto), non si riuscirà a configurare con successo il pacchetto; questo è molto probabile che succeda ogni tanto se si utilizza il ramo instabile di Debian. Un esempio comune potrebbero essere i bottoni "Accept" che al momento non accettano nessun input, o campi di testo che sono (nuovamente, per sbaglio), sempre considerati vuoti. Una possibile soluzione per questo tipo di problema è di riconfigurare debconf in modalità non interattiva, poi configurare il pacchetto problematico e infine ritornare ad una sorta di configurazione in modalità interattiva. Tuttavia i pacchetti negli anni si sono evoluti e non ci ricordiamo nessuna rilevante occorrenza di questo problema.

SuggerimentoNota
 

Molto probabilmente si utilizzerà questo comando per riconfigurare il Sistema X Window ogni tanto, così si ricordi solo questo comando, che è il modo elegante e specifico di Debian per ottenere la configurazione: dpkg-reconfigure xserver-xfree86

Qualche volta è anche utile vedere un elenco delle dipendenze ricorsive per un pacchetto. Questa caratteristica è fornita dal pacchetto apt-rdepends.

Per reinstallare un pacchetto, si usi uno tra il suddetto dpkg -i e apt-get --reinstall install NOMI PACCHETTI. Per installare un pacchetto con una specifica versione o da uno specifico ramo, eseguire apt-get install vim=6.0.093-1 o apt-get install vim/testing.

Per aggiornare il sistema, abitualmente si avvia apt-get update; apt-get upgrade. Per aggiornare solo specifici pacchetti, avviare apt-get install NOMI PACCHETTI o debfoster -u NOMI PACCHETTI.

grep-dctrl è un altro strumento a disposizione. Può rispondere a domande del tipo "Cosa è il pacchetto Debian foo?", "Quale è la versione attuale del pacchetto Debian vim?", "Quali pacchetti Debian mantiene John Doe?", "Quali pacchetti Debian sono in qualche modo collegati al linguaggio di programmazione Scheme?" e "Chi mantiene i pacchetti fondamentali di un sistema Debian?". Si veda la sua pagina di manuale per maggiori informazioni.

Per rimuovere pacchetti Debian non necessari (librerie inutilizzate rimaste sul sistema, eccetera) dal proprio sistema, avviare debfoster o deborphan.

Il pacchetto dpkg-repack fornisce uno strumento per re-impacchettare nel formato .deb pacchetti installati. Se sono state fatte modifiche al pacchetto mentre era non impacchettato (come file in /etc modificati), il nuovo pacchetto, naturalmente, erediterebbe le modifiche. Questa utilità rende facile copiare pacchetti da un computer ad un altro o ricreare pacchetti che sono installati sul proprio sistema, ma non più disponibili altrove.

Utilizzare dpkg-divert per sovrascrivere la versione del pacchetto di uno specifico file. Si potrebbe usarlo per sovrascrivere alcuni file di configurazione di un pacchetto o ogni volta che alcuni file (che non sono marcati come "conffile" nel pacchetto Debian) devono essere preservati da dpkg quando installa una nuova versione del pacchetto che contiene quei file. In aggiunta a (o invece di) dpkg-divert, si può usare dpkg-statoverride per sovrascrivere le proprietà e i permessi (e naturalmente i bit suid) dei file installati. Utilizzando questa tecnica, si potrebbe anche abilitare l'esecuzione del programma solo ad un ristretto gruppo di utenti.

3.4.1. Formato dei file di pacchetto Debian

Benché i pacchetti Debian GNU vengano gestiti meglio utilizzando gli appropriati strumenti Debian per i pacchetti, può essere piuttosto utile venire introdotti alla loro "conformazione" interna.

I file di pacchetto Debian (file .deb) non hanno la necessità di speciali strumenti per essere gestiti; sono dei semplici archivi ar consistenti in due file: data.tar.gz e control.tar.gz. In altri termini, gli strumenti generici necessari per estrarre il contenuto di .deb sono ar, tar e gzip, e sono tutti presenti su qualsiasi sistema Unix.

Per estrarre i dati del pacchetto, eseguire dpkg -x pachetto.deb /tmp/PACCHETTO. Per estrarre la sezione di controllo, eseguire dpkg -e pacchetto.deb.

Se non si ha dpkg a propria disposizione, si può estrarre la sezione dei dati utilizzando ar per estrarre il tarball dei dati e tar/gzip per spacchettarli: ar x pacchetto.deb data.tar.gz; tar zxf data.tar.gz. Allo stesso modo, si può estrarre la sezione control.tar.gz.

NotaNotare che
 

Si potrebbe avere la necessità di usare la suddetta procedura in pratica se, mentre si aggiorna il pacchetto gnu libc, si fa qualcosa di sciocco e si finisce con uno stato di mezza installazione senza il comando /sbin/ldconfig (cosi che l'avvio di tutti i programmi "più pesanti" non ha successo). Se questo è il motivo per il quale si sta leggendo la sezione, allora una soluzione è di scompattare il pacchetto libc6 manualmente e ricopiare il comando ldconfig al suo posto (in /sbin/). L'altra (e più facile) cosa da farsi è creare temporaneamente un file /sbin/ldconfig vuoto che dovrebbe semplicemente restituire la buona riuscita:

# echo "#!/bin/sh" > /sbin/ldconfig
# chmod 755 /sbin/ldconfig
In questo modo, tuttavia, si ha la necessità di aggiungere l'opzione --force-overwrite quando si reinstalla libc, tipo dpkg -i --force-overwrite libc6*.deb.