Capitolo 8. Gli strumenti di gestione dei pacchetti Debian

# Capitolo 8. Gli strumenti di gestione dei pacchetti Debian

## 8.1. Quali programmi fornisce Debian per gestire i suoi pacchetti?

Esistono diversi strumenti che vengono usati per gestire i pacchetti Debian, dalle interfacce grafiche o testuali agli strumenti a basso livello usati per installare i pacchetti. Tutti gli strumenti disponibili, per funzionare correttamente, si appoggiano sugli strumenti di più basso livello e vengono elencati qui in ordine di complessità decrescente.

È importante capire che gli strumenti di gestione dei pacchetti di più alto livello, come aptitude o synaptic si appoggiano su apt che si appoggia, a sua volta, su dpkg per gestire i pacchetti nel sistema.

Si veda il Capitolo 2. Gestione dei pacchetti Debian della Debian reference per maggiori informazioni sulle utilità di gestione dei pacchetti di Debian. Tale documento è disponibile in diverse lingue e formati; si veda la voce della Debian Reference nella panoramica dei manuali utenti del DDP.

### 8.1.1. dpkg

Questo è il principale programma di gestione dei pacchetti. dpkg può essere invocato con molte opzioni. Quelli che seguono sono alcuni degli usi comuni.

- Scoprire tutte le opzioni: `dpkg --help`.

- Stampare il file di controllo (ed altre informazioni) di un specifico pacchetto: `dpkg --info pippo_VVV-RRR.deb`.

- Installare un pacchetto (incluso lo spacchettamento e la configurazione) nel file system dell'hard disk: `dpkg --install pippo_VVV-RRR.deb`.

- Spacchettare (ma non configurare) un archivio Debian sul file system dell'hard disk: `dpkg --unpack pippo_VVV-RRR.deb`. Si noti che questa operazione non lascia necessariamente il pacchetto in uno stato utilizzabile; alcuni file possono necessitare di ulteriori adattamenti per funzionare correttamente. Questo comando rimuove qualsiasi versione già installata del programma ed esegue lo script preinst (si veda Sezione 7.6, «Cosa sono gli script preinst, postinst, prerm e postrm di Debian?») associato al pacchetto.

- Configurare un pacchetto che è già stato spacchettato: `dpkg --configure pippo`. Tra le altre cose, questa azione esegue lo script postinst (si veda Sezione 7.6, «Cosa sono gli script preinst, postinst, prerm e postrm di Debian?») associato al pacchetto. Aggiorna inoltre i file elencati in `conffiles` per questo pacchetto. Si faccia attenzione che l'operazione "configure" prende come argomento il nome del pacchetto (ad esempio, pippo), non il nome del file archivio Debian (ad esempio, pippo_VVV-RRR.deb).

- Estrarre un unico file chiamato "ciccia" (o un gruppo di file chiamati "ciccia*") da un archivio Debian: `dpkg --fsys-tarfile pippo_VVV-RRR.deb | tar -xf - 'ciccia*'`.

- Rimuovere un pacchetto (ma non i suoi file di configurazione): `dpkg --remove pippo`.

- Rimuovere un pacchetto (inclusi i suoi file di configurazione): `dpkg --purge pippo`.

- Elencare lo stato d'installazione dei pacchetti contenenti la stringa (o l'espressione regolare) "pippo*": `dpkg --list 'pippo*'`.

### 8.1.2. APT

APT è l'Advanced Package Tool (strumento avanzato per i pacchetti), un'interfaccia avanzata per il sistema di gestione dei pacchetti di Debian che fornisce il programma apt-get. Fornisce strumenti a riga di comando per cercare e gestire pacchetti e per interrogare informazioni sudi essi, oltre all'accesso a basso livello a tutte le funzionalità della libreria libapt-pkg. Per maggiori informazioni vedere la Guida utente in `/usr/share/doc/apt-doc/guide.html/index.html` (è necessario installare il pacchetto `apt-doc`).

A partire da Debian Jessie per alcuni comandi apt-get e apt-cache di uso frequente esiste un equivalente tramite il nuovo binario apt. Ciò significa che comandi popolari come apt-get update, apt-get install, apt-get remove, apt-cache search o apt-cache show ora possono anche essere chiamati semplicemente con apt, ad esempio con apt update, apt install, apt remove, apt search o apt show. Di seguito viene riportata una panoramica dei comandi vecchi e nuovi:

     apt-get update             ->  apt update
     apt-get upgrade            ->  apt upgrade
     apt-get dist-upgrade       ->  apt full-upgrade
     apt-get install package    ->  apt install pacchetto
     apt-get remove package     ->  apt remove pacchetto
     apt-get autoremove         ->  apt autoremove
     apt-cache search string    ->  apt search stringa
     apt-cache policy package   ->  apt list -a pacchetto
     apt-cache show package     ->  apt show pacchetto
     apt-cache showpkg package  ->  apt show -a pacchetto

Lo strumento apt unisce funzionalità di apt-get e apt-cache e, in modo predefinito, ha un formato di output colorato più elegante che lo rende più piacevole per l'utente. Per l'uso in script o casi d'uso avanzati apt-get rimane preferibile o necessario.

apt-get fornisce un metodo semplice per recuperare e installare i pacchetti da fonti multiple usando la riga di comando. A differenza di dpkg, apt-get non capisce i file .deb, funziona con i nomi appropriati dei pacchetti e può solo installare gli archivi .deb da una fonte specificata in `/etc/apt/sources.list`. apt-get chiama dpkg direttamente dopo aver scaricato gli archivi .deb[5] dalle fonti configurate.

Quelli che seguono sono alcuni dei modi comuni di usare apt-get.

- Per aggiornare l'elenco dei pacchetti conosciuti dal sistema, si può eseguire:

      apt update

  (lo si dovrebbe eseguire regolarmente per aggiornare il proprio elenco di pacchetti)

- Per installare il pacchetto `pippo` e tutte le sue dipendenze, si esegua:

      apt install pippo

- Per rimuovere il pacchetto pippo dal sistema, si esegua:

      apt remove pippo

- Per rimuovere il pacchetto pippo e i suoi file di configurazione dal sistema, si esegua:

      apt purge pippo

- Per elencare tutti i pacchetti per i quali sono disponibili versioni più nuove, eseguire:

      apt list --upgradable

- Per aggiornare tutti i pacchetti sul sistema (senza installare pacchetti aggiuntivi o rimuovere pacchetti), si esegua:

      apt upgrade

- Per aggiornare tutti i pacchetti sul sistema e, se necessario per l'aggiornamento di un pacchetto, installare pacchetti aggiuntivi o rimuovere pacchetti, si esegua:

      apt full-upgrade

  (Il comando `upgrade` mantiene un pacchetto nella sua versione installata obsoleta se l'aggiornamento necessita dell'installazione di un pacchetto aggiuntivo per soddisfare una nuova dipendenza. Il comando `full-upgrade` è meno conservativo.)

Si noti che si deve aver fatto il login come root per eseguire qualsiasi comando che modifichi i pacchetti.

Si noti che apt-get ora installa in modo predefinito anche i pacchetti raccomandati ed è, per la sua robustezza, il programma consigliato per la gestione dei pacchetti dalla console, per eseguire installazioni di sistema e per aggiornamenti principali del sistema.

La suite di strumenti apt include anche lo strumento apt-cache per interrogare l'elenco dei pacchetti. Lo si può usare per trovare i pacchetti che forniscono una funzionalità specifica, attraverso l'uso di interrogazioni con testo semplice o espressioni regolari e con interrogazioni sulle dipendenze nel sistema di gestione dei pacchetti. Alcuni dei modi comuni di usare apt-cache sono i seguenti.

- Per trovare pacchetti la cui descrizione contiene `parola`:

      apt search parola

- Per stampare le informazioni dettagliate su un pacchetto:

      apt show pacchetto

- Per stampare i pacchetti da cui dipende un dato pacchetto:

      apt-cache depends pacchetto

- Per stampare informazioni dettagliate sulle versioni disponibili di un pacchetto e le sue dipendenze inverse:

      apt-cache showpkg pacchetto

Per maggiori informazioni, installare il pacchetto `apt` e leggere apt(8), apt-get(8), sources.list(5) e installare il pacchetto `apt-doc` e leggere `/usr/share/doc/apt-doc/guide.html/index.html`.

### 8.1.3. aptitude

aptitude è un gestore di pacchetti per sistemi Debian GNU/Linux che fornisce un frontend per l'infrastruttura di gestione dei pacchetti apt. aptitude è un'interfaccia testuale che usa la libreria curses. Le azioni possono essere effettuate da un'interfaccia visuale o dalla riga di comando.

aptitude può essere usato per effettuare compiti di gestione dei pacchetti in modo veloce e semplice. Permette all'utente di visualizzare l'elenco dei pacchetti e di eseguire compiti di gestione dei pacchetti come installazioni, aggiornamenti e rimozioni.

aptitude fornisce le funzionalità di apt-get, oltre a molte funzionalità aggiuntive:

- aptitude offre un facile accesso a tutte le versioni di un pacchetto;

- aptitude rende facile tenere traccia del software obsoleto elencandolo in "Pacchetti obsoleti e creati localmente";

- aptitude include un sistema piuttosto potente per cercare particolari pacchetti e limitare i pacchetti visualizzati. Gli utenti che hanno familiarità con mutt impareranno presto ad usarlo, dato che la sintassi per le espressioni regolari è stata ispirata da quella di mutt.

- aptitude può essere usato per installare le attività predefinite disponibili. Per maggiori informazioni si veda Sezione 8.1.5, «tasksel».

- aptitude in modalità a schermo intero ha una funzionalità su incorporata e può essere eseguito da un utente normale. Richiama su (e chiederà la password di root, se esiste) quando sono veramente necessari i privilegi di amministrazione.

Si può usare aptitude attraverso un'interfaccia visiva (si esegua semplicemente `aptitude`) o direttamente dalla riga di comando. La sintassi usata per la riga di comando è molto simile a quella usata con apt-get. Per esempio, per installare il pacchetto `pippo`, si può eseguire `aptitude install `pippo``.

Si noti che aptitude è il programma consigliato per la gestione quotidiana dei pacchetti dalla console.

Per maggiori informazioni, si legga la pagina di manuale aptitude(8) e si installi il pacchetto `aptitude-doc`.

### 8.1.4. synaptic

synaptic è un gestore di pacchetti grafico. Permette di installare, aggiornare e rimuovere pacchetti software in modo amichevole. Oltre alla maggior parte delle funzionalità offerte da aptitude, ha anche una funzionalità per modificare l'elenco dei repository usati e supporta la navigazione di tutta la documentazione disponibile relativa ad un pacchetto. Si veda il sito web di synaptic per maggiori informazioni.

### 8.1.5. tasksel

Quando si desidera fare una specifica attività può essere difficile trovare l'insieme appropriato di pacchetti che soddisfano le proprie necessità. Gli sviluppatori Debian hanno definito delle `attività` (task): un'attività è una raccolta di diversi pacchetti Debian individuali tutti relativi ad una specifica attività. Le attività possono essere installate tramite il programma tasksel o con aptitude.

L'installatore Debian tipicamente installa automaticamente le attività associate con un sistema standard ed un ambiente desktop. L'ambiente desktop specifico installato dipende dal supporto CD/DVD usato, solitamente è il desktop GNOME (attività `gnome-desktop`). Inoltre, a seconda delle selezioni dell'utente durante il processo di installazione, possono essere installate automaticamente delle attività. Per esempio, se si è selezionata una lingua diversa dall'inglese, anche le attività associate ad essa vengono automaticamente installate.

### 8.1.6. Altri strumenti per la gestione dei pacchetti

#### 8.1.6.1. dpkg-deb

Questo programma manipola i file archivio Debian (`.deb`). Quelli che seguono sono alcuni degli usi comuni.

- Scoprire tutte le opzioni: `dpkg-deb --help`.

- Determinare quali file sono contenuti in un file archivio Debian: `dpkg-deb --contents pippo_VVV-RRR.deb`

- Estrarre i file contenuti in un archivio Debian dentro una directory specificata dall'utente: `dpkg-deb --extract pippo_VVV-RRR.deb tmp` estrae ognuno dei file in `pippo_VVV-RRR.deb` nella directory `tmp/`. Questo è comodo per esaminare il contenuto di un pacchetto in una directory localizzata, senza installare il pacchetto nel file system root.

- Estrarre i file delle informazioni di controllo da un pacchetto: `dpkg-deb --control pippo_VVV-RRR.deb tmp`

Si noti che ogni pacchetto che è stato semplicemente spacchettato usando `dpkg-deb --extract` non sarà installato correttamente, si dovrebbe invece usare `dpkg --install`.

Maggiori informazioni sono fornite nella pagina di manuale dpkg-deb(1).

## 8.2. Debian afferma di essere in grado di aggiornare un programma in esecuzione; come viene fatto?

Il kernel (file system) nei sistemi Debian GNU/Linux supporta la sostituzione dei file anche quando sono in uso.

È fornito anche un programma chiamato start-stop-daemon che viene usato per avviare i demoni all'avvio o fermarli quando il runlevel cambia (per esempio, da multiutente a singolo utente o all'arresto). Lo stesso programma viene usato dagli script di installazione quando viene installato un nuovo pacchetto contenente un demone, per fermare i demoni in esecuzione e riavviarli se necessario.

## 8.3. Come si può sapere quali pacchetti sono già installati su un sistema Debian?

Per conoscere lo stato di tutti i pacchetti installati su di un sistema Debian, si esegua il comando

    dpkg --list

Questo stampa un riassunto di una riga per ogni pacchetto, dando un simbolo di stato di due lettere (spiegato nell'intestazione), il nome del pacchetto, la versione installata e una breve descrizione.

Per sapere lo stato dei pacchetti i cui nomi corrispondono a qualsiasi modello che inizia con «pippo» eseguire il comando:

    dpkg --list 'pippo*'

Per ottenere un rapporto più prolisso per un particolare pacchetto si esegua il comando:

    dpkg --status nomepacchetto

## 8.4. Come mostrare i file di un pacchetto installato?

Per elencare tutti i file forniti dal pacchetto `pippo` installato si esegua il comando

    dpkg --listfiles pippo

Notare che i file creati dagli script di installazione non vengono mostrati.

## 8.5. Come posso scoprire quale pacchetto ha prodotto un particolare file?

Per identificare il pacchetto che ha prodotto il file chiamato `pippo` si esegua uno dei comandi:

- `dpkg --search pippo`

  Questo cerca `pippo` nei pacchetti installati. (È (attualmente) equivalente a cercare nella directory `/var/lib/dpkg/info/` tutti i file aventi l'estensione `.list` e a sistemare l'output per stampare i nomi di tutti i pacchetti e le deviazioni che lo contengono.)

  Un'alternativa più veloce è lo strumento dlocate.

      dlocate -S pippo

- `zgrep pippo Contents-ARCH.gz`

  Questo cerca i file contenenti la sottostringa `pippo` nel loro nome di percorso completo. I file `Contents-ARCH.gz` (dove ARCH rappresenta l'architettura desiderata) risiedono nelle directory principali dei pacchetti (main, non-free, contrib) sui siti degli archivi Debian (cioè in `/debian/dists/trixie`). Un file `Contents` si riferisce solo ai pacchetti nell'albero delle sottodirectory dove esso risiede. Quindi, un utente potrebbe dover cercare in più file `Contents` per trovare il pacchetto contenente il file `pippo`.

  Questo metodo ha il vantaggio rispetto a `dpkg --search` di trovare i file nei pacchetti che non sono attualmente installati sul proprio sistema.

- `apt-file search `pippo``

  Se si installa il pacchetto `apt-file`, simile al precedente, esso cerca i file che contengono nel loro nome di percorso completo la sottostringa o l'espressione regolare `pippo`. Il vantaggio rispetto all'esempio precedente è che non c'è bisogno di recuperare i file `Contents-ARCH.gz` dato che ciò viene fatto automaticamente per tutti le fonti definite in `/etc/apt/sources.list` quando viene eseguito (come root) `apt-file update`.

## 8.6. Perchè «pippo-data» non viene rimosso quando viene disinstallato «pippo»? Come ci si può assicurare che vengano eliminati i vecchi pacchetti di librerie non utilizzati?

Alcuni pacchetti sono suddivisi nel programma («pippo») e nei dati («pippo-data») (o in «pippo» e «pippo-doc»). Questo sistema vale in Debian per molti giochi, applicazioni multimediali e dizionari ed è stato introdotto dato che alcuni utenti possono voler accedere ai dati grezzi senza installare il programma o perché il programma può essere eseguito senza i dati rendendo così «pippo-data» opzionale.

Situazioni simili si verificano quando si ha a che fare con le librerie: generalmente vengono installate dato che i pacchetti che contengono applicazioni dipendono da esse. Quando il pacchetto dell'applicazione viene completamente eliminato, il pacchetto di libreria può rimanere sul sitema. Oppure, quando il pacchetto dell'applicazione non dipende più da libdb4.2, ad esempio, ma da libdb4.3, il pacchetto libdb4.2 può rimanere quando il pacchetto dell'applicazione viene aggiornato.

In questi casi, «pippo-data» non dipende da «pippo», perciò la maggior parte degli strumenti di gestione dei pacchetti non lo rimuove automaticamente quando viene rimosso il pacchetto «pippo». La stessa cosa si verifica per i pacchetti di libreria. Ciò è necessario per evitare dipendenze cicliche. Se però si usa apt-get (vedere Sezione 8.1.2, «APT») o aptitude (vedere Sezione 8.1.3, «aptitude») come strumento di gestione dei pacchetti, essi tengono traccia dei pacchetti installati automaticamente e danno la possibilità di rimuoverli quando sul sistema non rimane alcun pacchetto che ne abbia bisogno.

[5] Notare che si sono port che rendono questo strumento disponibile con altri sistemi di gestione dei pacchetti, come il gestore di pacchetti di Red Hat, noto anche come rpm.

Capitolo 7. Fondamenti sul sistema di gestione dei pacchetti Debian |  | Capitolo 9. Mantenere il sistema Debian aggiornato