aptitude
Package manager (Debian/Ubuntu).
Cos’è Aptitude
Aptitude è un frontend per la gestione avanzata dei pacchetti di una distribuzione Debian, ma risulta valido per tutte le distribuzioni che supportano APT (link).
È lo strumento preferito da molti per l’amministrazione dei pacchetti su Debian in quanto non solo raggruppa in un unico semplice programma le funzionalità di molti tool (apt-get, apt-cache, apt-mark, etc.) ma anche perché permette di gestire in modo molto più facile (ed efficace) situazioni complesse (dipendenze, dipendenze inverse, rimozione pacchetti non utilizzati, etc).
Aptitude è un frontend a dpkg esattamente come apt-get
e può essere utilizzato in due modi: da linea di comando, cioè come apt-get
(con la stessa sintassi per i comandi principali), oppure tramite l’interfaccia visuale basata sulle librerie ncurses.
L’interfaccia visuale verrà trattata più diffusamente, perché si ritiene che sia uno strumento fondamentale per la gestione dei pacchetti e soprattutto per la diagnostica e la risoluzione degli eventuali problemi riscontrati.
Installazione
A partire da Debian 9 (Stretch) l’omonimo pacchetto è diventato opzionale, per cui può essere necessario installare aptitude
prima di poterlo utilizzare. Per esempio con apt e privilegi di amministrazione basta:
# apt install aptitude
In particolare ne è ancora raccomandabile l’installazione per:
-
gestire Debian con molti repository diversi per poter gestire più facilmente possibili conflitti;
-
per avvalersi dell’ineguagliata funzione di ricerca avanzata;
-
oppure ancora per disporre di un’interfaccia visuale ad APT anche senza server grafico attivo.
Uso da linea di comando
Anche dalla linea di comando l’uso di Aptitude è molto semplice e comodo. Si usa in genere la seguente forma:
aptitude azione [argomenti…]
azione dice ad Aptitude quale azione svolgere; i rimanenti argomenti dipendono dall’azione scelta e consistono tipicamente in una lista di nomi di pacchetti. Di seguito le azioni più importanti.
update
# aptitude update
Aggiorna la lista dei pacchetti (come premere ‘u’ dall’interfaccia visuale o come apt-get update
) .
safe-upgrade
# aptitude safe-upgrade
Aggiorna tutti i pacchetti aggiornabili senza che nascano conflitti. Per conflitto si intende una situazione in cui l’aggiornamento di un pacchetto richide la rimozione di uno o più differenti pacchetti, ergo l’uso di safe-upgrade causa l’aggiornamento di tutti quei pacchetti che possono essere aggiornati senza che sia necessario rimuovere contestualmente altri pacchetti. Da manuale: Quando si verificano problemi di dipendenze dei pacchetti, usa un algoritmo «sicuro» per risolverli. Questo risolutore cerca di preservare il maggior numero possibile delle scelte dell’utente; non rimuove mai un pacchetto e non installa mai una versione di un pacchetto che non sia la versione candidata predefinita. L’utilizzo di questo comando implica necessariamente l’opzione --safe-resolver
(l’opzione --full-resolver
viene sempre automaticamente rigettata). Una sintassi del tutto equivalente, ma mantenuta solo per ragioni storiche, è:
# aptitude upgrade
Si noti che l’uso non è intercambiabile con apt-get upgrade
, poiché apt-get
in questo caso non effettuerà nemmeno l’installazione di nuovi pacchetti, mentre aptitude safe-upgrade
permette l’installazione di nuovi pacchetti, se necessari per l’aggiornamento di altri, e impedisce soltanto la rimozione di pacchetti precedentemente installati. È invece equivalente, se non per la mancanza di un risolutore di conflitti, al comando apt upgrade
.
Esempio
# aptitude safe-upgrade $(aptitude search ‘?origin(Unofficial Multimedia Packages) ?upgradable’ -F ‘%p’)
Questo comando mostra un esempio d’uso avanzato che permette di aggiornare i soli pacchetti provenienti dal repository deb-multimedia.
full-upgrade
# aptitude full-upgrade
Anche questo comando aggiorna tutti i pacchetti, ma è più aggressivo nella risoluzione delle dipendenze: nuovi pacchetti saranno installati e altri rimossi, fino a quando tutte le dipendenze non saranno soddisfatte. Questo comando potrebbe fare cose non desiderate (come, appunto, installare nuovi pacchetti o rimuoverne altri) quindi deve essere usato con cautela (specialmente nei casi in cui segnala esplicitamente problemi nella risoluzione delle dipendenze). Si noti che questo comando implica l’opzione --full-resolver
, a meno che l’utente non specifichi l’opzione --safe-resolver
, nel qual caso full-upgrade funziona esattamente come safe-upgrade. Una sintassi del tutto equivalente, mantenuta per ragioni storiche, è:
# aptitude dist-upgrade
install, remove, purge, reinstall
# aptitude install pacchetto/i
# aptitude remove pacchetto/i
# aptitude purge pacchetto/i
# aptitude reinstall pacchetto/i
Questi comandi rispettivamente installano, rimuovono, eliminano completamente (eliminazione anche dei file di configurazione) o reinstallano il o i pacchetti specificati.
search
$ aptitude search espressione/i
Elenca i pacchetti che contengono nel nome una delle espressioni fornite. Le espressioni possono essere semplici stringhe (ad esempio il nome di un pacchetto) o anche espressioni più complesse (“Search Patterns”).
Esempi
$ aptitude search iceweasel
Mostrerà tutti i pacchetti che contengono iceweasel nel loro nome.
$ aptitude search ‘~S ~i (!~stable ~Atesting !~Aunstable ~O”Unofficial Multimedia Packages”)’
Mostrerà tutti i pacchetti installati appartenenti alla sola suite (detta anche archive) testing e solo se provenienti dal repository di deb-multimedia (identificato attraverso l’attributo “origine”). Se nel proprio sources.list
non sono specificati repository relativi ad altre suite i parametri !~stable
e !~Aunstable
possono essere omessi. In sintesi è necessario esplicitare sia i repositori disponibili che si vuole escludere che quelli da includere nel risultato della ricerca.
$ aptitude search ‘?installed?origin(Unofficial Multimedia Packages)?not(?origin(Debian))’
Sintassi simile alla precedente, ma in questo caso si è usato un comando che mostra tutti i pacchetti, a prescindere dalla suite, appartenenti a deb-multimedia, ma non appartenenti al repository principale. Per filtrare in base alla suite è sufficiente usare archive, che ne è un sinonimo, e specificarne il nome, invece di origin. Si veda la pagina “I repository ed il loro utilizzo” per capire dove dove trovare i parametri relativi al nome della release, all’origine e altro.
$ aptitude search ‘?origin(Unofficial Multimedia Packages) ?upgradable’ -F ‘%p %v %V’
Mostra tutti i pacchetti aggiornabili del solo repository deb-multimedia (posto naturalmente di averlo specificato nel proprio sources.list
), visualizzando anche versione attualmente installata e candidata.
show
$ aptitude show pacchetto/i
Mostra su terminale le informazioni di ogni pacchetto specificato.
versions
$ aptitude versions espressione
Elenca, per ogni pacchetto cui corrisponde l’espressione specificata, lo stato (installato o meno), il numero di verisone, la release di appartenenza e il valore di pin (si veda la guida dedicata al pinning).
Opzioni
-s, –simulate
Nessuna azione; effettua una simulazione degli eventi che si verificherebbero, ma non cambia realmente il sistema. Esempio di comando: # aptitude install pacchetto -s
-t, –target-release
Permette in genere di aggiornare/installare i pacchetti specificati e le relative dipendenze in base alla release bersaglio. Per esempio:
# aptitude -t stretch-backports install pacchetto
-V, –verbose-versions
Mostra il numero di versione completo dei pacchetti aggiornati e installati.
Easter eggs
$ aptitude mooo
$ aptitude -v moo
$ aptitude -vv moo
$ aptitude -vvvvvvvvv moo
File di configurazione
È possibile definire le opzioni di aptitude non solo da riga di comando, ma anche specificando i corrispondenti parametri in appositi file di configurazione, ad esempio in un unico file /etc/apt/apt.conf
, in più file dal nome arbitrario in /etc/apt/apt.conf.d/
o ancora in ~/.aptitude/config
. A prescindere dal, o dai, file di configurazione è possibile usare in tutti i casi due tipi di sintassi, ad esempio:
APT
{
Default-Release "testing";
Cache-Limit 24000000;
}
Acquire::http::Proxy "http://indirizzo_proxy:3142/";
Aptitude
{
Autoclean-After-Update "true";
Auto-Fix-Broken "true";
Purge-Unused "true";
}