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 per la sicurezza.
Finalmente, vediamo quello che stavate aspettando! Con il file sources.list pronto e l'elenco dei pacchetti disponibili aggiornato, tutto quello che bisogna 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 help -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]
La versione di APT usata per la creazione di questo documento è la 0.5.3, che è la versione presente in unstable ("sid") al momento della scrittura. Se si ha questa versione installata, si ha un'altra funzionalità a disposizione: è possibile usare una riga di comando simile a questa apt-get install package/distribution per installare un pacchetto di una specifica distribuzione, oppure apt-get install package=version. Per esempio:
# apt-get install nautilus/unstable
installerà nautilus dalla distribuzione "unstable" sempre che si abbia "stable" o "testing". I valori ammessi per "distribution" sono stable, testing e unstable.
Si può preferire l'uso dell'opzione -t per sceglire la
distribuzione, obbligando apt-get
a favorire questa distribuzione
quando risolve le dipendenze.
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 questa ragione, questa versione della distribuzione non dovrebbe essere usata da utenti inesperti o da chi necessita di una collaudata stabilità.
La distribuzione "testing" riguardo alla stabilità è un po' meglio di "unstable", ma per sistemi di produzione è meglio usare la distribuzione "stable".
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 ad una nuova distribuzione, benché per questo scopo si preferisca: apt-get dist-upgrade; vedere Aggiornare ad 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 ci informa che alcuni pacchetti saranno 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 ad 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. Per farlo 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 kept back. Adesso risolveremo questo problema 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 ad essere kept back. Probabilmente
ha qualche altro problema che è più serio di una nuova dipendenza. Lo possiamo
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 fonti
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 recuperlo.
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
ed 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.97_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. Controllate Come aggiornare i pacchetti di una specifica distribuzione, Sezione 3.9 per ulteriori informazioni su apt-show-versions.
dselect
è un programma che aiuta gli utenti a selezionare 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 della 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 è necessario, ma se non si sta usando un CD-ROM e si vuole scaricare i pacchetti da internet, è il miglior modo d'usare dselect.
Per capire meglio 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 otteniamo lanciando 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 abbiamo fatto nella lista dei pacchetti con dselect. Dselect può essere uno strumento davvero potente se usato insieme ad APT.
Le persone spesso usano la distribuzione testing perché è più stabile di unstable e più aggiornata di stable. Comunque, gli utenti che vogliono usare l'ultima versione di certi pacchetti ma che preferiscono non affidare i loro sistemi a unstable hanno la possibilità di lavorare su sistemi testing/unstale misti. Allo stesso modo, gli utenti più conservativi potrebbero desiderare di lavorare su sistemi stable/testing misti.
Per farlo, si aggiunga la seguente riga in /etc/apt/apt.conf
APT::Default-Release "testing";
Poi, quando si vorrà installare i pacchetti di unstable, sarà sufficiente usare l'opzione -t:
# apt-get -t unstable install packagename
Non scordatevi che per usare pacchetti di un'altra versione di Debian, è
necessario aggiungere un nuovo archivio per i pacchetti binari al file
/etc/apt/sources.list
. Nel caso dell'esempio, si devono
aggiungere le righe per un archivio della distribuzione unstable
in aggiunta a quelle di testing.
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:
# apt-get install `apt-show-versions -u -b | grep unstable`
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: <package> Pin: <pin definition> Priority: <pin's priority>
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). Questa è una "wildcard"; 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 vogliamo che questo accada.
Il campo Priority è opzionale; se non specificato, ha come valore predefinito 989.
Vediamo come funzionano le priorità dei pin. Una priorità minore di 0 indica che il pacchetto non dev'essere installato. Le priorità comprese tra 0 e 100 denotano pacchetti non installati e che non hanno versioni disponibili. Questi non entreranno nel processo di scelta della versione. Priorità 100 è assegnata a un pacchetto nella versione installata così che, per permettere la sua sostituzione con una nuova versione, l'aggiornamento dovrà avere priorità superiore a 100.
Le priorità sopra a 100 indicano che il pacchetto può essere installato. Tipicamente, la versione installata di un pacchetto è cambiata solo con l'aggiornamento a una versione più recente. Qualunque priorità fra 100 e 1000 (compreso) indicano questo tipo di comportamento. Un pacchetto con questa priorità non verrà retrocesso a una versione disponibile ma meno recente. Per esempio, se si ha sylpheed 0.5.3 installato e si definisce un pin su sylpheed 0.4.99 con priorità 999, il pacchetto 0.4.99 non sarà installato per soddisfare il pin. Per far retrocedere un pacchetto, e assecondare il pin, questo deve avere una priorità maggiore di 1000.
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 wildcard per specificare più versioni contemporaneamente.
L'opzione release dipende dal file Release dell'archivio usato da APT o del 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 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 i fix per la 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.4 - Aprile 2003kov@debian.org