[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ successivo ]

APT HOWTO
Capitolo 3 - Gestione dei pacchetti


3.1 Aggiornare la lista dei pacchetti disponibili

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.

E' una buona idea eseguire questo comando regolarmente per avere un sistema informato su possibili aggiornamenti dei pacchetti, in particolare sugli aggiornamenti della sicurezza.


3.2 Installazione dei pacchetti

Finalmente, vediamo quello che stavate aspettando! Con il file sources.list pronto e l'elenco dei pacchetti disponibili aggiornato, tutto quello che biosgna 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:

     [root]@[/] # 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 altri pacchetti oltre a quelli specificati per soddisfare una dipendenza.

Le seguenti opzioni di apt-get possono essere utili:

     -h  This help text.
     -d  Download only - do NOT install or unpack archives
     -f  Attempt to continue if the integrity check fails
     -s  No-act. Perform ordering simulation
     -y  Assume Yes to all queries and do not prompt
     -u  Show a list of upgraded packages as well

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 linea 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:

     [root]@[/] # 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 reinstallare la stessa versione di un pacchetto, si può usare l'opzione --reinstall, in questo modo:

     [root]@[/] # 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: si può usare una linea 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.

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 che devono funzionare è meglio usare la distribuzione `stable'.


3.3 Rimozione dei pacchetti

Se non si vuoli più usare un pacchetto, lo si può rimuovere dal sistema usando APT. Per farlo eseguire: apt-get remove package. Per esempio:

     [root]@[/] # 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:

     [root]@[/] # 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]

I `*' dopo i nomi indicano che 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.

     [root]@[/] # 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 si necessita 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).


3.4 Aggiornamento dei pacchetti

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.

E' 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. E' 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:

     [root]@[/] # 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 linee, 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 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.


3.5 Aggiornare ad una nuova release

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).

E' 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 stabile 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.

E' 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.

     [root]@[/] # 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:

     [root]@[/] # 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.


3.6 Usare APT insieme a dselect

dselect è un programma che aiuta gli utenti a selezionare i pacchetti per l'installazione. E' ritenuto piuttosto complicato e abbastanza noioso, ma con la pratica si può acquisire familiarità con la sua interfaccia basata su console-ncurses.

Una caratteristica di dselect è che sa usare della capacità che hanno i pacchetti Debian di "raccomandare" e "suggerire" l'installazione di altri pacchetti. Per eseguire il programma, usare dselect da root. Scegliere `apt' come metodo di accesso. Non è necessario, ma se non si sta usando un CD-ROM e 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:

     [root]@[/] # 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:

     [root]@[/] # 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 "suggested" o "recommended" 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.


3.7 Come tenere una specifica versione di un pacchetto installata (i pin)

Può capitare di modificare qualcosa in un pacchetto e che non hai 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>
     Pin-Priority: <pin's priority>

Per esempio, per mantenere il pacchetto sylpheed che si è modificato per usare "reply-to-list" nella versione 0.4.99. Aggiungo:

     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 voglio impedire l'installazione delle revisioni successive. Così, per esempio, le revisioni 0.4.99-1 e 0.4.99-10 saranno installate non appena saranno disponibili. Notare che se è modificato il pacchetto non vogliamo che questo accada.

Il campo Pin-Priority è opzionale; se non specificato, ha come valore di default 989.

Vediamo come funzionano le priorità dei pin. Una priorità minore di 0 indica che il pacchetto non dovrebbe 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 sarà declassato 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 rendere un pacchetto declassabile, e assecondare il pin, questo deve avere una priorità maggiore di 1000.

Il concetto della declassabilità può avere formidabili applicazioni: supponiamo di aver aggiornato la versione stable alla versione testing e che siamo pentiti di questa scelta (forse perché testing non è abbastanza testata per i nostri scopi). Si può definire un pin, usando una wildcard al posto del nome del pacchetto, per tornare indietro alla stabile. Per esempio:

     Package: *
     Pin: release a=stable
     Pin-Priority: 1001

Infine, un apt-get -u dist-upgrade declasserà il sistema alla versione stabile.

Un pin può specificare la versione (version), la release (release) o l'origine (origin).

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 modello 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

[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ successivo ]

APT HOWTO

1.7.6 - Gennaio 2002
Gustavo Noronha Silva kov@debian.org