Il sistema di gestione dei pacchetti usa un suo database per tenere traccia di
quali pacchetti sono installati, quali non lo sono e quali sono disponibili per
l'installazione. Il programma apt-get
usa questo database per
capire come installare i pacchetti richiesti dall'utente e per scoprire quali
ulteriori pacchetti sono necessari per farli funzionare correttamente.
Per aggiornare questo elenco, va usato il comando apt-get update
.
Questo comando controlla le liste dei pacchetti presenti negli archivi elencati
in /etc/apt/sources.list; vedere Il file /etc/apt/sources.list, Sezione
2.1 ulteriori informazioni su questo file.
È una buona idea eseguire questo comando regolarmente per avere un sistema informato su possibili aggiornamenti dei pacchetti, in particolare sugli aggiornamenti di sicurezza.
Con il file sources.list pronto e l'elenco dei pacchetti disponibili aggiornato, tutto quello che è necessario fare per installare un pacchetto è eseguire apt-get. Per esempio, si può lanciare:
# apt-get install xchat
APT cercherà nel suo database la versione più recente del pacchetto e lo recupererà, come specificato in sources.list, dal corrispondente archivio. Nel caso che il pacchetto dipenda da altri, come nel caso dell'esempio, APT controllerà le dipendenze e installerà i pacchetti necessari, come nell'esempio successivo:
# apt-get install nautilus Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 17.2MB will be used. Do you want to continue? [Y/n]
Il pacchetto nautilus
dipende dalle librerie citate sopra, quindi
per prima cosa APT preleverà queste dall'archivio. Se si era specificato sulla
riga di comando di apt-get il nome di queste librerie, APT non
avrebbe chiesto conferma per continuare, infatti avrebbe installato esattamente
ciò che viene chiesto dall'utente.
Questo significa che APT chiede la conferma solo quando è necessario installare pacchetti che non sono specificati sulla riga di comando.
Le seguenti opzioni di apt-get possono essere utili:
-h Questo aiuto -d Solamente download - NON installa o decomprime gli archivi -f Tenta di continuare se il controllo di integrità fallisce -s Nessuna azione. Simula i passi -y Assume sì a tutte le domande e non chiede conferma -u Mostra anche una lista dei pacchetti da aggiornare
Sulla riga di comando si possono specificare più pacchetti. I file scaricati dalla rete sono riposti nella directory /var/cache/apt/archives per la successiva installazione.
Sulla medesima riga di comando si possono specificare anche i pacchetti da rimuovere, è sufficiente mettere "-" immediatamente dopo il nome del pacchetto che dev'essere rimosso, come in quest'esempio:
# apt-get install nautilus gnome-panel- Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 2594kB will be used. Do you want to continue? [Y/n]
Fare riferimento a Rimozione dei pacchetti, Sezione 3.3 per altri dettagli sulla rimozione dei pacchetti.
Se in qualche modo si danneggia un pacchetto già installato, o semplicemente si vuole che i file di un pacchetto siano rimpiazzati da quelli della versione più recente che è disponibile, si può usare l'opzione --reinstall, in questo modo:
# apt-get --reinstall install gdm Reading Package Lists... Done Building Dependency Tree... Done 0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded. Need to get 0B/182kB of archives. After unpacking 0B will be used. Do you want to continue? [Y/n]
Se non si vuole più usare un pacchetto, lo si può rimuovere dal sistema usando APT. Per farlo eseguire: apt-get remove package. Per esempio:
# apt-get remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Come si può vedere nell'esempio sopra, APT si occupa di rimuovere anche i pacchetti che dipendono da quello che si è chiesto di rimuovere. Non c'è modo, usando APT, di rimuovere un pacchetto senza che siano rimossi anche i pacchetti che dipendono da questo.
Eseguendo apt-get
come sopra, saranno rimossi i pacchetti ma i
loro file di configurazione, se ci sono, rimarranno intatti sul sistema. Per
una rimozione completa del pacchetto, eseguire:
# apt-get --purge remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Notare gli "*" dopo i nomi. Indicano che anche i file di configurazione di questi pacchetti saranno rimossi.
Come nel caso del metodo install, si può usare un simbolo per invertire il significato del metodo per un particolare pacchetto. Nel caso di remove se si aggiunge "+" alla fine del nome del pacchetto, il pacchetto sarà installato anziché essere rimosso.
# apt-get --purge remove gnome-panel nautilus+ Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 nautilus The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 2594kB will be used. Do you want to continue? [Y/n]
Notare che apt-get
elenca i pacchetti extra che saranno installati
(cioè i pacchetti di cui è necessaria l'installazione per il corretto
funzionamento dei pacchetti richiesti), i pacchetti che saranno rimossi e i
nuovi pacchetti che saranno installati (compresi, ancora una volta, i pacchetti
extra).
Gli aggiornamenti dei pacchetti sono un grande successo di APT. Possono essere realizzati con un singolo comando: apt-get upgrade. Si può usare questo comando sia per aggiornare i pacchetti della stessa distribuzione, sia per aggiornare a una nuova distribuzione, benché per questo scopo si consiglia: apt-get dist-upgrade; vedere Aggiornare a una nuova release, Sezione 3.5 per ulteriori dettagli.
È utile eseguire questo comando con l'opzione -u. Questa opzione forza APT a mostrare la lista completa dei pacchetti che saranno aggiornati, senza l'aggiornamento avverrà senza mostrare nulla. APT scaricherà la versione più recente di ogni pacchetto e li installerà nel giusto ordine. È importante eseguire sempre apt-get update prima di provare l'aggiornamento. A questo proposito consultare Aggiornare la lista dei pacchetti disponibili, Sezione 3.1. Osservare questo esempio:
# apt-get -u upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages have been kept back cpp gcc lilo The following packages will be upgraded adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded. Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used. Do you want to continue? [Y/n]
Il procedimento è molto semplice. Notare che nelle prime righe, apt-get informa che alcuni pacchetti saranno trattenuti (kept back). Questo significa che esistono nuove versioni di questi pacchetti ma che non saranno installate per qualche ragione. Motivi possibili sono la presenza di dipendenze che non possono essere soddisfatte (uno dei pacchetti da cui dipende non è disponibile per il download) o nuove dipendenze (il pacchetto ha aggiunto una nuova dipendenza nell'ultima versione).
Non c'è una soluzione semplice nel primo caso. Nel secondo caso è sufficiente lanciare apt-get install per il pacchetto in questione e le dipendenze saranno risolte. Una soluzione altrettanto valida è usare dist-upgrade. Controllare in Aggiornare a una nuova release, Sezione 3.5.
Questa caratteristica di APT permette di aggiornare l'intero sistema in una volta sola, sia attraverso internet che attraverso un CD (acquistato o scaricato come immagine ISO).
È usata anche quando ci sono delle modifiche alle relazioni fra i pacchetti installati. Con apt-get upgrade, questi pacchetti saranno lasciati intoccati (kept back).
Per esempio, supponiamo che si stia usando la release 0 della versione stable
di Debian e che abbiamo comprato un CD con la release 3. Si può usare APT per
aggiornare il sistema da questo nuovo CD. Si usa apt-cdrom
(guardare Aggiungere un CD-ROM al file
sources.list, Sezione 2.4) per aggiungere il CD al file
/etc/apt/sources.list e poi si esegue apt-get
dist-upgrade.
È importante notare che APT cerca sempre la versione più recente dei pacchetti. Quindi, se nel file /etc/apt/sources.list è elencato un archivio che contiene una versione di un pacchetto più recente di quella sul CD, APT vorrà scaricare il pacchetto da quell'archivio.
Nell'esempio mostrato in Aggiornamento dei pacchetti, Sezione 3.4, abbiamo visto che alcuni pacchetti possono essere trattenuti (kept back). Adesso questo problema verrà risolto con il metodo dist-upgrade:
# apt-get -u dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Done The following NEW packages will be installed: cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages have been kept back lilo The following packages will be upgraded adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded. Need to get 0B/7098kB of archives. After unpacking 3118kB will be used. Do you want to continue? [Y/n]
Adesso va osservato che alcuni pacchetti saranno aggiornati e altri nuovi
saranno installati (le nuove dipendenze dei pacchetti già installati). Notare
che lilo
continua a essere trattenuto, probabilmente ha qualche
altro problema che è più serio di una nuova dipendenza. Lo si può scoprire
eseguendo:
# apt-get -u install lilo Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages will be REMOVED: debconf-tiny The following NEW packages will be installed: cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages will be upgraded lilo 1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded. Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used. Do you want to continue? [Y/n]
Come si può notare sopra, la nuova versione di lilo
è in conflitto
con debconf-tiny
, questo significa che non può essere installato
(o aggiornato) senza rimuovere debconf-tiny
.
Per sapere quali pacchetti saranno rimossi o non-aggiornati si può usare:
# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Starting Starting 2 Investigating python1.5 Package python1.5 has broken dep on python1.5-base Considering python1.5-base 0 as a solution to python1.5 0 Holding Back python1.5 rather than change python1.5-base Investigating python1.5-dev Package python1.5-dev has broken dep on python1.5 Considering python1.5 0 as a solution to python1.5-dev 0 Holding Back python1.5-dev rather than change python1.5 Try to Re-Instate python1.5-dev Done Done The following packages have been kept back gs python1.5-dev 0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
In questo modo è facile vedere che il pacchetto python1.5-dev non può essere installato perché c'è una dipendenza non soddisfatta: python1.5.
Quando si installa un pacchetto APT recupera tutti i file necessari delle
sorgenti specificate in /etc/apt/sources.list, gli immagazzina in un archivio
locale (/var/cache/apt/archives/
) e poi procede con
l'installazione. Vedere Installazione dei pacchetti,
Sezione 3.2.
Con il tempo l'archivio locale cresce e può occupare molto spazio sul disco.
Fortunatamente APT fornisce gli strumenti per la gestione di questo archivio: i
metodi clean e autoclean di apt-get
.
apt-get clean
elimina qualunque cosa, tranne i file lock, dalle
directory /var/cache/apt/archives/
e
/var/cache/apt/archives/partial/
. Di conseguenza, se si volesse
reinstallare un pacchetto APT dovrà nuovamente scaricarlo.
apt-get autoclean
cancella solo i file dei pacchetti che non
possono più essere scaricati.
Il prossimo esempio mostra come lavora apt-get autoclean:
# ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm* logrotate_3.5.9-7_i386.deb logrotate_3.5.9-8_i386.deb gpm_1.19.6-11_i386.deb
Nella directory /var/cache/apt/archives ci sono due file che forniscono il
pacchetto logrotate
e uno che fornisce il pacchetto
gpm
.
# apt-show-versions -p logrotate logrotate/stable uptodate 3.5.9-8 # apt-show-versions -p gpm gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12
apt-show-versions
mostra che
logrotate_3.5.9-8_i386.deb
fornisce la versione aggiornata di
logrotate
, quindi il file logrotate_3.5.9-7_i386.deb
è inutile. Anche il file gpm_1.19.6-11_i386.deb
è inutile perché
è disponibile una versione più recente.
# apt-get autoclean Reading Package Lists... Done Building Dependency Tree... Done Del gpm 1.19.6-11 [145kB] Del logrotate 3.5.9-7 [26.5kB]
Infine, apt-get autoclean, rimuove solo i file inutili. Vedere Come aggiornare i pacchetti di una specifica distribuzione Debian, Sezione 3.9 per ulteriori informazioni su apt-show-versions.
dselect
è un programma che aiuta gli utenti a scegliere quali
pacchetti installare. È ritenuto piuttosto complicato e abbastanza
noioso, ma con la pratica si può acquisire familiarità con la sua interfaccia
basata su ncurses.
Una caratteristica di dselect è che sa usare la capacità che hanno i pacchetti Debian di "raccomandare" e "consigliare" l'installazione di altri pacchetti. Per avviare il programma, usare dselect da root, scegliere "apt" come metodo di accesso (non è obbligatorio, ma se non si sta usando un CD-ROM e si vuole scaricare i pacchetti da internet, è il miglior modo d'usare dselect).
Per approfondire l'uso di dselect, leggere la documentazione sul sito Debian
http://www.debian.org/doc/ddp
.
Dopo aver fatto le scelte con dselect, usare:
# apt-get -u dselect-upgrade
come nell'esempio sotto:
# apt-get -u dselect-upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: lbxproxy The following NEW packages will be installed: bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0 gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy util-linux-locales vacation xbill xplanet-images The following packages will be upgraded debian-policy 1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded. Need to get 7140kB of archives. After unpacking 16.3MB will be used. Do you want to continue? [Y/n]
Questo è quello che si ottiene esguendo apt-get dist-upgrade sullo stesso sistema:
# apt-get -u dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Done The following packages will be upgraded debian-policy 1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 421kB of archives. After unpacking 25.6kB will be freed. Do you want to continue? [Y/n]
Notare che molti dei pacchetti elencati sopra sono installati perché sono "consigliati" o "raccomandati" da altri pacchetti. Altri sono installati o rimossi (nell'esempio lbxproxy) per le scelte che sono state fatte nella lista dei pacchetti con dselect. Dselect può essere uno strumento davvero potente se usato insieme ad APT.
Alcune volte le persone vogliono usare una delle versioni Debian come distribuzione per il sistema principale e uno o più pacchetti di un altro ramo.
Per impostare qual è la versione di Debian principale è necessario modificare
la seguente riga del file /etc/apt/apt.conf
:
APT::Default-Release "versione";
Dove versione è la versione di Debian che si desidera usare come distribuzione principale. Le versioni che si possono usare sono stable, testing e unstable. Poi, per installare pacchetti di un'altra versione, si dovrà usare APT nel seguente modo:
# apt-get -t distribuzione install pacchetto
Per funzionare è necessario specificare nel file
/etc/apt/sources.list
fra le sorgenti per APT almeno una riga per
la distribuzione da cui si vuole prelevare il pacchetto e che il pacchetto sia
disponibile tramite quella fonte.
È anche possibile richiedere l'installazione di una specifica versione di un pacchetto usando la seguente sintassi:
# apt-get install pacchetto=versione
Per esempio, con la prossima riga è possibile installare la versione
2.2.4-1 del pacchetto nautilus
:
# apt-get install nautilus=2.2.4-1
IMPORTANTE: la versione "unstable" è la versione di Debian che contiene i nuovi pacchetti e i più recenti aggiornamenti. Questa distribuzione segue tutti i cambiamenti dei pacchetti, dai più piccoli ai più drastici che possono influenzare molti altri pacchetti o l'intero sistema. Per questo motivo, questa versione della distribuzione non dovrebbe essere usata da utenti inesperti o da chi necessita di una collaudata stabilità.
La distribuzione "testing" non è necessariamente migliore di "unstable", dato che non riceve rapidamente gli aggiornamenti di sicurezza. Per i server e per i sistemi di produzione si dovrebbe usare sempre la distribuzione "stable".
apt-show-versions
fornisce agli utenti delle distribuzioni miste
un modo sicuro per aggiornare i loro sistemi senza ottenere poi una
distribuzione meno stabile di quella che hanno in mente. Per esempio, è
possibile aggiornare solo i pacchetti di unstable eseguendo dopo aver
installato il pacchetto apt-show-versions
:
# apt-get install `apt-show-versions -u -b | grep unstable | cut -d ' ' -f 1`
Può capitare di modificare qualcosa in un pacchetto e che non si abbia voglia o tempo, di apportare questi cambiamenti a una nuova versione del programma. Oppure, per esempio, si vuole aggiornare la distribuzione alla 3.0, ma si vuole continuare a usare alcuni pacchetti nella versione presente nella Debian 2.2. Per far questo si può "fissare" questi pacchetti nella versione installata in modo che non saranno aggiornati.
Usare questo mezzo è semplice. Basta solo modificare il file /etc/apt/preferences.
Il formato è semplice:
Package: <pacchetto> Pin: <definizione del pin> Pin-Priority: <priorità del pin>
Per esempio, per mantenere il pacchetto sylpheed
che si è
modificato per usare "reply-to-list" nella versione 0.4.99 si
aggiunge:
Package: sylpheed Pin: version 0.4.99*
Notare che si è usato un * (asterisco). Questo è un "carattere jolly"; indica che questo "pin" è valido per tutte le versioni che iniziano con 0.4.99. Questo perché Debian numera i suoi pacchetti usando un "numero di revisione" e non si vuole impedire l'installazione delle revisioni successive. Così, per esempio, le revisioni 0.4.99-1 e 0.4.99-10 saranno installate non appena sono disponibili. Notare che se si è modificato il pacchetto non si vuole che questo accada.
La priorità del pin determina se un pacchetto che verifica le righe
"Packages:" e "Pin:" verrà installato; più è alta la
priorità e maggiori sono le possibilità che il pacchetto sia installato. Si
può leggere apt_preferences(7)
per una profonda discussione sulle
priorità, ma alcuni esempi possono rendere l'idea. Di seguito sono descritti
gli effetti di diversi valori del campo priorità per l'esempio precedente.
Un pin può specificare la versione (version), la release (release) o l'origine (origin) di un pacchetto.
Il pin su version, come abbiamo visto, ammette sia cifre che caratteri jolly per specificare più versioni contemporaneamente.
L'opzione release dipende dal file Release nell'archivio usato da APT o nel CD. Questa opzione non può essere usata se l'archivio che si usa non fornisce questo file. Si può controllare il contenuto dei file Release in /var/lib/apt/lists/. I parametri per release sono: a (archive), c (components), v (version), o (origin) e l (label).
Un esempio:
Package: * Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian Pin-Priority: 1001
In questo esempio abbiamo scelto la versione 2.2* (che può essere 2.2r2, 2.2r3; questi sono i "point release" che tipicamente includono le fix di sicurezza e altri importanti aggiornamenti), la versione stable, la sezione main (al posto di contrib o non-free) e come origine e etichetta Debian. Origine (o) definisce il nome della distribuzione: Debian per la Debian e Progeny per Progeny, per esempio. Un esempio del file Release:
$ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release Archive: stable Version: 2.2r3 Component: main Origin: Debian Label: Debian Architecture: i386
APT HOWTO
1.8.10 - Novembre 2004kov@debian.org