6.2. I comandi aptitude
e apt-get
APT è un progetto vasto, i cui piani originali includevano un'interfaccia grafica. Si basa su una libreria che contiene l'applicazione principale e apt-get
è stato il primo frontend, basato su riga di comando, che è stata sviluppato nell'ambito del progetto.
Numerose altre interfacce grafiche sono apparse come progetti esterni: synaptic
, aptitude
(che include sia un'interfaccia in modalità testo che una grafica, anche se non ancora completa), wajig
, ecc. L'interfaccia più consigliata, apt-get
, è quella usata durante l'installazione di Debian ed è quella che verrà usata negli esempi forniti in questa sezione. Notare tuttavia che la sintassi della riga di comando di aptitude
è molto simile. Quando ci saranno grandi differenze fra apt-get
e aptitude
, tali differenze verranno spiegate.
For any work with APT, the list of available packages needs to be updated; this can be done simply through apt-get update
. Depending on the speed of your connection, the operation can take a while since it involves downloading a certain number of Packages
/Sources
/Translation-language-code
files, which have gradually become bigger and bigger as Debian has developed (at least 10 MB of data for the main
section). Of course, installing from a CD-ROM set does not require any downloading — in this case, the operation is very fast.
6.2.2. Installazione e rimozione
Con APT, i pacchetti possono essere aggiunti o rimossi dal sistema, rispettivamente con apt-get install pacchetto
e apt-get remove pacchetto
. In entrambi i casi, APT installerà automaticamente le dipendenze necessarie o rimuoverà i pacchetti che dipendono da quello che ci si appresta a rimuovere. Il comando apt-get purge pacchetto
implica una completa disinstallazione: anche i file di configurazione vengono eliminati.
Se il file
sources.list
cita diverse distribuzioni, è possibile specificare la versione del pacchetto da installare. Un numero di versione specifico può essere richiesto con
apt-get install pacchetto=versione
, ma è in genere preferito indicare la sua distribuzione di origine (
Stable,
Testing o
Unstable): con
apt-get install pacchetto/distribuzione
. Con questo comando è possibile tornare ad una versione precedente di un pacchetto (se per esempio si sa che funziona bene), a condizione che sia ancora disponibile in una delle sorgenti a cui fa riferimento il file
sources.list
. Altrimenti l'archivio
snapshot.debian.org
può venire in soccorso (vedere il riquadro
APPROFONDIMENTO Le vecchie versioni dei pacchetti: snapshot.debian.org
).
Esempio 6.3. Installazione della versione unstable di spamassassin
#
apt-get install spamassassin/unstable
6.2.3. Aggiornamento del sistema
Sono raccomandati aggiornamenti regolari, perché includono gli ultimi aggiornamenti di sicurezza. Per aggiornare, usare apt-get upgrade
o aptitude safe-upgrade
(ovviamente dopo apt-get update
). Questo comando controlla i pacchetti installati che possono essere aggiornati senza la rimozione di alcun pacchetto. In altre parole, l'obiettivo è quello di garantire l'aggiornamento meno intrusivo possibile. apt-get
è un po' più esigente di aptitude
perché si rifiuta di installare pacchetti che erano già installati in precedenza.
apt-get
in genere seleziona il numero di versione più recente (ad eccezione dei pacchetti Experimental e stable-backports, che vengono ignorati per impostazione predefinita a prescindere dal loro numero di versione). Se si è specificato Testing o Unstable nel proprio sources.list
, apt-get upgrade
porterà la maggior parte di un sistema Stable a Testing o Unstable, e ciò potrebbe non essere quello che si desiderava fare.
Per dire ad apt-get
di usare una specifica distribuzione quando cerca degli aggiornamenti, si deve usare l'opzione -t
o --target-release
, seguita dal nome della distribuzione voluta (ad esempio: apt-get -t stable upgrade
). Per evitare di specificare questa opzione ogni volta che si utilizza apt-get
, si può aggiungere la riga APT::Default-Release "stable";
nel file /etc/apt/apt.conf.d/local
.
Per gli aggiornamenti più importanti, come il passaggio da una versione principale di Debian a quella successiva, è necessario utilizzare apt-get dist-upgrade
(«aggiornamento di distribuzione»). Con questa istruzione, apt-get
completerà l'aggiornamento anche nel caso in cui debba eliminare dei pacchetti obsoleti o installare nuove dipendenze. Questo è anche il comando usato dagli utenti che lavorano quotidianamente con il rilascio Unstable di Debian e che seguono la sua evoluzione giorno per giorno. È così semplice che non ha certo bisogno di spiegazione: la reputazione di APT si basa su questa sua grande funzionalità.
aptitude full-upgrade
è il comando corrispondente di aptitude
anche se dist-upgrade
è comunque riconosciuto (ma deprecato).
6.2.4. Opzioni di configurazione
Oltre agli elementi di configurazione già citati, è possibile configurare certi aspetti di APT aggiungendo direttive in un file della directory /etc/apt/apt.conf.d/
. Ricordare per esempio che APT può dire a dpkg
di ignorare i conflitti fra i file se si specifica DPkg::Options { "--force-overwrite"; }
.
Se si può accedere al Web solo attraverso proxy, bisogna aggiungere una riga come
Acquire::http::proxy "http://proprioproxy:3128"
. Per un proxy FTP, scrivere
Acquire::ftp::proxy "ftp://proprioproxy"
. Per scoprire più opzioni di configurazione, leggere la pagina di manuale
apt.conf(5) con il comando
man apt.conf
(per i dettagli sulle pagine del manuale, vedere la
Sezione 7.1.1, «Pagine di manuale»).
6.2.5. Gestire le priorità dei pacchetti
One of the most important aspects in the configuration of APT is the management of the priorities associated with each package source. For instance, you might want to extend one distribution with one or two newer packages from Testing, Unstable or Experimental. It is possible to assign a priority to each available package (the same package can have several priorities depending on its version or the distribution providing it). These priorities will influence APT's behavior: for each package, it will always select the version with the highest priority (except if this version is older than the installed one and if its priority is less than 1000).
APT defines several default priorities. Each installed package version has a priority of 100. A non-installed version has a priority of 500 by default, but it can jump to 990 if it is part of the target release (defined with the -t
command-line option or the APT::Default-Release
configuration directive).
È possibile modificare le priorità con l'aggiunta di voci nel file /etc/apt/preferences
con i nomi dei pacchetti interessati, la loro versione, la loro origine e la loro nuova priorità.
APT will never install an older version of a package (that is, a package whose version number is lower than the one of the currently installed package) except if its priority is higher than 1000. APT will always install the highest priority package which follows this constraint. If two packages have the same priority, APT installs the newest one (whose version number is the highest). If two packages of same version have the same priority but differ in their content, APT installs the version that is not installed (this rule has been created to cover the case of a package update without the increment of the revision number, which is usually required).
In more concrete terms, a package whose priority is less than 0 will never be installed. A package with a priority ranging between 0 and 100 will only be installed if no other version of the package is already installed. With a priority between 100 and 500, the package will only be installed if there is no other newer version installed or available in another distribution. A package of priority between 501 and 990 will only be installed if there is no newer version installed or available in the target distribution. With a priority between 990 and 1000, the package will be installed except if the installed version is newer. A priority greater than 1000 will always lead to the installation of the package even if it forces APT to downgrade to an older version.
Quando APT controlla /etc/apt/preferences
, prende prima in considerazione le voci più specifiche (spesso quelle che specificano il pacchetto interessato), poi quelle più generiche (tra cui per esempio tutti i pacchetti di una distribuzione). Se sono presenti più voci generiche, viene utilizzata la prima. I criteri di selezione disponibili includono il nome del pacchetto e la fonte che lo fornisce. Ogni fonte è identificata dalle informazioni contenute in un file Release
che APT scarica insieme ai file Packages
. Esso specifica l'origine (di solito "Debian" per i pacchetti di mirror ufficiali, ma può essere anche un nome di una persona o di un'organizzazione per repository di terze parti). Fornisce anche il nome della distribuzione (solitamente Stable, Testing, Unstable o Experimental per le distribuzioni standard fornite da Debian) insieme con la sua versione (per esempio 5.0 per Debian Lenny). Diamo dunque un'occhiata alla sua sintassi attraverso alcuni casi di studio realistici di questo meccanismo.
Supponiamo che si vogliano usare solamente i pacchetti della versione stabile di Debian. Quelli forniti in altre versioni non devono essere installati tranne se esplicitamente richiesto. Si dovrebbero scrivere le seguenti voci nel file /etc/apt/preferences
:
a=stable
definisce il nome della distribuzione selezionata. o=Debian
limita l'impostazione ai pacchetti la cui origine è "Debian".
Si supponga ora di avere un server con diversi programmi locali dipendenti dalla versione 5.14 di Perl e che si voglia garantire che non vengano installati gli aggiornamenti ad un'altra versione. Si potrebbe usare questa riga:
La documentazione di riferimento per questo file di configurazione è disponibile nella pagina di manuale apt_preferences(5), che è possibile visualizzare con man apt_preferences
.
6.2.6. Lavorare con più distribuzioni
Dato che apt-get
è uno strumento così meraviglioso, si può essere tentati di prendere pacchetti provenienti da altre distribuzioni. Ad esempio, dopo aver installato un sistema Stable, si potrebbe desiderare di provare un pacchetto software disponibile in Testing o Unstable, senza scostarsi troppo dallo stato iniziale del sistema.
Anche se a volte si incontrano problemi mischiando pacchetti di diverse distribuzioni,
apt-get
gestisce tale coesistenza molto bene e limita i rischi in modo molto efficace. Il miglior modo di procedere è quello di elencare tutte le distribuzioni utilizzate in
/etc/apt/sources.list
(alcune persone mettono sempre le tre distribuzioni, ma ricordare che
Unstable è riservata agli utenti esperti) e di definire la distribuzione di riferimento con il parametro
APT::Default-Release
(vedere la
Sezione 6.2.3, «Aggiornamento del sistema»).
Supponiamo che Stable sia la propria distribuzione di riferimento ma che Testing e Unstable siano comunque elencate nel proprio file sources.list
. In questo caso, è possibile usare apt-get install pacchetto/testing
per installare un pacchetto da Testing. Se l'installazione non riesce a causa di alcune dipendenze che non possono essere soddisfatte, si può lasciare che risolva queste dipendenze in Testing aggiungendo il parametro -t testing
. Lo stesso vale ovviamente per Unstable.
In questa situazione, gli aggiornamenti (upgrade
e dist-upgrade
) vengono fatti all'interno di Stable eccetto per i pacchetti già aggiornati ad altre distribuzioni: questi seguiranno gli aggiornamenti disponibili nelle altre distribuzioni. Questo comportamento verrà spiegato più avanti con l'aiuto delle priorità predefinite impostate da APT. Non esitare ad usare apt-cache policy
(vedere riquadro) per verificare le priorità assegnate.
Everything centers around the fact that APT only considers packages of higher or equal version than the installed one (assuming that /etc/apt/preferences
has not been used to force priorities higher than 1000 for some packages).
Let's assume that you have installed version 1 of a first package from Stable and that version 2 and 3 are available respectively in Testing and Unstable. The installed version has a priority of 100 but the version available in Stable (the very same) has a priority of 990 (because it is part of the target release). Packages in Testing and Unstable have a priority of 500 (the default priority of a non-installed version). The winner is thus version 1 with a priority of 990. The package “stays in Stable”.
Let's take the example of another package whose version 2 has been installed from Testing. Version 1 is available in Stable and version 3 in Unstable. Version 1 (of priority 990 — thus lower than 1000) is discarded because it is lower than the installed version. This only leaves version 2 and 3, both of priority 500. Faced with this alternative, APT selects the newest version, the one from Unstable.If you don't want a package installed from Testing to migrate to Unstable, you have to assign a priority lower than 500 (490 for example) to packages coming from Unstable. You can modify /etc/apt/preferences
to this effect:
Package: *
Pin: release a=unstable
Pin-Priority: 490
6.2.7. Tenere traccia dei pacchetti installati automaticamente
Una delle funzionalità essenziali di apt-get
(che era inizialmente specifica di aptitude
) è il tenere traccia dei pacchetti installati solo come dipendenze. Questi pacchetti vengono chiamati «automatici» e spesso comprendono, ad esempio, le librerie.
Con queste informazioni, quando i pacchetti vengono rimossi, i gestori di pacchetti possono elaborare un elenco di pacchetti automatici che non sono più necessari (perché non ci sono pacchetti «installati manualmente» che dipendono da essi). apt-get autoremove
eliminerà tali pacchetti. aptitude
non ha questo comando perché li rimuove automaticamente non appena vengono identificati. Entrambi i programmi includono un chiaro messaggio che elenca i pacchetti interessati.
È buona abitudine marcare come automatico ogni pacchetto di cui non si ha direttamente bisogno, in modo che venga automaticamente rimosso quando non è più necessario.
apt-mark auto pacchetto
marca il pacchetto specificato come automatico, mentre
apt-mark manual pacchetto
fa l'opposto.
aptitude markauto
e
aptitude unmarkauto
funzionano nello stesso modo, anche se offrono più funzionalità per marcare molti pacchetti contemporaneamente (vedere la
Sezione 6.4.1, «aptitude
»). L'interfaccia interattiva basata su console di
aptitude
rende anche facile revisionare il «contrassegno automatico» per molti pacchetti.
Si potrebbe voler sapere perché un pacchetto installato automaticamente è presente nel sistema. Per ottenere queste informazioni dalla riga di comando, è possibile utilizzare aptitude why pacchetto
(apt-get
non ha una funzionalità simile):
$ aptitude why python-debian
i aptitude Raccomanda apt-xapian-index
i A apt-xapian-index Dipende python-debian (>= 0.1.15)