Una piccola guida per APT

Cosa significa APT?

APT è una abbreviazione per "Advanced Packaging Tool" (strumento avanzato di pacchettizzazione) ed è una collezione di programmi e script che aiutano sia l'amministratore del sistema (nel nostro caso, root) nell'installazione e la gestione dei file .deb sia, al contempo, il sistema stesso a sapere cosa c'è installato.

Sources List o sorgenti software

Il sistema "APT" necessita di un file di configurazione che contiene le informazioni riguardo alle locazioni dei pacchetti installabili ed aggiornabili, ci si riferisce comunemente ad esso come sources.list .

Le sorgenti sono contenute in una directory chiamata:
/etc/apt/sources.list.d/

Dentro la directory ci sono due file chiamati:
/etc/apt/sources.list.d/debian.list e
/etc/apt/sources.list.d/aptosid.list

Sono due perché si beneficia così di un facile (automatizzato) cambio dei mirror, e rende più sicuro rimpiazzare le liste.

Si può anche aggiungere un file personale /etc/apt/sources.list.d/*.list

Tutte le ISO aptosid usano in via predefinita le seguenti fonti software:

#aptosid
# Free University Berlin/ spline (Student Project LInux NEtwork), Germany
deb ftp://ftp.spline.de/pub/aptosid/debian/ sid main fix.main
#deb-src ftp://ftp.spline.de/pub/aptosid/debian/ sid main fix.main

Ulteriori indirizzi per programmi non liberi si possono trovare in queste liste sempre aggiornate aptosid.list e debian.list .:

#Debian
# Unstable
deb http://ftp.us.debian.org/debian/ unstable main contrib non-free
#deb-src http://ftp.us.debian.org/debian/ unstable main contrib non-free

# Testing
#deb http://ftp.us.debian.org/debian/ testing main contrib non-free
#deb-src http://ftp.us.debian.org/debian/ testing main contrib non-free

# Experimental
#deb http://ftp.us.debian.org/debian/ experimental main contrib non-free
#deb-src http://ftp.us.debian.org/debian/ experimental main contrib non-free

NOTA: In questo esempio ftp.us indica l'uso di depositi software USA. Si può modificare questo file, come root, per usare i depositi fisicamente più vicini, semplicemente cambiando il paese come ad esempio, da ftp.us a ftp.it o ftp.uk. La maggior parte dei paesi hanno dei mirror locali in modo da preservare la banda e migliorare la velocità.

Lista dei server Debian e stato attuale dei mirror.

Per riuscire a gestire le informazioni aggiornate sui pacchetti, APT usa un database. Esso contiene i pacchetti ed anche quali altri pacchetti sono necessari per poter funzionare (chiamati dipendenze). Il programma apt-get usa questo database mentre installa i pacchetti da scegliere per risolvere le dipendenze e garantire che quel dato pacchetto possa poi lavorare. L'aggiornamento del database viene esegito con il comando apt-get update.

# apt-get update
			(che dà come risultato)
Get:1 http://aptosid.com sid Release.gpg [189B]
Get:2 http://aptosid.com sid Release.gpg [189B]
Get:3 http://aptosid.com sid Release.gpg [189B]
Get:4 http://ftp.de.debian.org unstable Release.gpg [189B]
Get:5 http://aptosid.com sid Release [34.1kB]
Get:6 http://ftp.de.debian.org unstable Release [79.6kB]

Installare un nuovo pacchetto

Aggiornare pacchetti ed installarne di nuovi senza fermare X può causare problemi. Qualsiasi metodo di installazione dei pacchetti dentro X ha questo tipo di problema.

Finché qualsiasi pacchetto che si vuole installare non aggiorna altri pacchetti allora è sicuro installarlo senza fermare X. Tuttavia se l'installazione del pacchetto provoca anche l'aggiornamento di altri pacchetti si deve fare estrema attenzione al fatto che i pacchetti che verranno aggiornati non siano attualmente in uso, si deve fermare X prima di installare il pacchetto..

In caso di dubbi assicurarsi di abbandonare X come da istruzioni per il dist-upgrade prima di installare qualsiasi pacchetto Aggiornare un intero sistema installato - dist-upgrade - Panoramica .

Presumendo che il database di APT sia aggiornato e il nome del pacchetto sia conosciuto, allora il seguente comando installa un pacchetto chiamato qemu, per esempio, e tutte le sue dipendenze (più avanti si vedrà come cercare e trovare pacchetti).

# apt-get install qemu
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
  bochsbios openhackware proll vgabios
Recommended packages:
  debootstrap vde
The following NEW packages will be installed:
  bochsbios openhackware proll qemu vgabios
0 upgraded, 5 newly installed, 0 to remove and 20 not upgraded.
Need to get 4152kB of archives.
After unpacking 11.9MB of additional disk space will be used.
Do you want to continue [Y/n]? n

Cancellare un pacchetto

Allo stesso modo non dovrebbe sorprendere che il comando seguente disinstallerà un pacchetto, tuttavia non rimuoverà le dipendenze:

apt-get remove gaim
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
  gaim gaim-irchelper
0 upgraded, 0 newly installed, 2 to remove and 310 not upgraded.
Need to get 0B of archives.
After unpacking 4743kB disk space will be freed.
Do you want to continue [Y/n]?
(Reading database ... 174409 files and directories currently installed.)
Removing gaim-irchelper ...
Removing gaim ...

In questo caso i file di configurazione del pacchetto "gaim" (fondamentalmente come il suo setup) non verrà cancellato dal sistema. Si può utilizzarli nel caso si decida di installare nuovamente lo stesso pacchetto e si trova comodo utilizzare le stesse impostazioni.

Se invece si vogliono cancellare anche i file di configurazione, lanciare questo comando:

# apt-get --purge remove gaim
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
  gaim*
0 upgraded, 0 newly installed, 1 to remove and 309 not upgraded.
Need to get 0B of archives.
After unpacking 4678kB disk space will be freed.
Do you want to continue [Y/n]? Y
(Reading database ... 174405 files and directories currently installed.)
Removing gaim ...
Purging configuration files for gaim ...

Notare il * dopo il nome del pacchetto nella schermata di apt. L'asterisco indica che verranno rimossi anche i file di configurazione.

Tornare alla versione precedente o mettere in attesa un pacchetto

A volte è necessario ritornare ad una versione precedente di un pacchetto oppure tenerlo sospeso a causa di un difetto o di un problema insorto con l'ultima versione installata.

Tenere un pacchetto sospeso

echo package hold|dpkg --set-selections

Togliere la sospensione ad un pacchetto:

echo package install|dpkg --set-selections

Elencare i pacchetti sospesi:

dpkg --get-selections | grep hold

Tornare ad una versione precedente

Debian does not support downgrading packages. While it may work in simple cases, it could fail spectacularly for other packages. Please refer to Emergency downgrading.

Despite the fact that it is not supportable, downgrading has been known to work for simple packages. The steps for downgrading a simple package using kmahjongg as an example are:

  1. comment unstable sources in /etc/apt/sources.list.d/debian.list with a #
  2. Add testing sources in /etc/apt/sources.list.d/debian.list , for example:
    deb http://ftp.nl.debian.org/debian/ testing main contrib non-free
    
  3. apt-get update
    
  4. apt-get install kmahjongg/testing
    
  5. Put the newly installed package on hold with:
    echo kmahjongg hold|dpkg --set-selections
    
  6. comment <#>the testing sources in /etc/apt/sources.list.d/debian.list with and uncomment the unstable sources so that you get back to using unstable sources, then:
  7. apt-get update
    

Quando si vuole avere l'ultima versione del pacchetto, fare semplicemente questo:

echo kmahjongg install|dpkg --set-selections
apt-get update
apt-get install kmahjongg

apt-mark

apt-mark is a useful tool that shows you which packages are automatically or manually installed and offers the system administrator the opportunity to mark and hold packages that are not to be removed automatically. Read:

man apt-mark

Aggiornare un intero sistema installato - dist-upgrade - Panoramica

L'aggiornamento dell'intero sistema viene eseguito mediante il comando dist-upgrade. Si dovrebbe sempre controllare prima la voce "Current Warning" sul sito principale di aptosid, e controllare i "segnali di pericolo" ivi esposti riguardo ai pacchetti che il sistema vuole aggiornare ad una versione superiore (dist-upgrade, appunto). Se si vuole tenere un certo pacchetto o sospenderlo - hold - fare riferimento a Tornare alla versione precedente o mettere in attesa un pacchetto

Non è raccomandato fare solo un "upgrade" con debian sid.

La frequenza del dist-upgrade

Eseguire dist-upgrade abitudinalmente quando si può, idealmente ogni una o due settimane, almeno una volta al mese per essere al sicuro. Un dist-upgrade solo ogni 2 o tre mesi deve essere considerato fuori limite riguardo alla sicurezza. Per pacchetti non standard o autocompilati si deve prestare molta più attenzione con l'innalzamento di versione perché possono corrompere il sistema in ogni momento a causa di incompatibilità.

Dopo l'aggiornamento del database si possono vedere i pacchetti di cui sono disponibili nuove versioni: (prima installare apt-show-versions)

apt-show-versions -u
libpam-runtime/unstable upgradeable from 0.79-1 to 0.79-3
passwd/unstable upgradeable from 1:4.0.12-5 to 1:4.0.12-6
teclasat/unstable upgradeable from 0.7m02-1 to 0.7n01-1
libpam-modules/unstable upgradeable from 0.79-1 to 0.79-3.........

L'aggiornamento di un singolo pacchetto incluse le sue dipendenze può essere fatto (per esempio per gcc-4.0) con:

apt-get install gcc-4.0
Reading package lists... Done
Building dependency tree... Done
gcc-4.0 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and xxx not upgraded

Solo scaricamento

Un'opzione poco conosciuta per fare un controllo di quali pacchetti sono in un dist-upgrade è il flag -d:

apt-get update && apt-get dist-upgrade -d

Il -d permette di scaricare il dist-upgrade senza installarlo mentre si è in X da una console e consente di fare dist-upgrade in init 3 in un secondo momento. Questo permette anche di controllare avvisi della lista e saggiamente propone l'opzione di procedere o annullare come qui:

apt-get dist-upgrade -d
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  elinks-data
The following packages have been kept back:
  git-core git-gui git-svn gitk icedove libmpich1.0ldbl
The following packages will be upgraded:
  alsa-base bsdutils ceni configure-ndiswrapper debhelper
  discover1-data elinks file fuse-utils gnucash.........
35 upgraded, 1 newly installed, 0 to remove and 6 not upgraded.
Need to get 23.4MB of archives.
After this operation, 594kB of additional disk space will be used.
Do you want to continue [Y/n]?Y 

scegliendo'Y' (yes) i pacchetti saranno scaricati senza toccare il sistema installato.

Dopo che il 'dist-upgrade -d' ha scaricato i pacchetti, se si vuole completare effettivamente, subito o in un secondo tempo, seguire le seguenti istruzioni:

dist-upgrade - I passi da fare

MAI, MAI fare un dist-upgrade e nemmeno un upgrade mentre si è in X
Controllare sempre in "Current Warnings" sul sito principale di aptosid. Questi "segnali di pericolo" esistono a causa della natura instabile (Debian sid) e sono aggiornati giornalmente.
chiudere la sessione di KDE.
andare in modalità testo con Ctrl+Alt+F1
autenticarsi come root poi:

init 3
apt-get update
apt-get dist-upgrade
apt-get clean
init 5 && exit
MAI, MAI fare DIST-UPGRADE [o UPGRADE] con adept, synaptic o aptitude.

Se non si entra in init 3, ATTENZIONE!

Ragioni per non utilizzare altro che apt-get per il dist-upgrade

I gestori di pacchetti come adept, aptitude, synaptic e kpackage non sono in grado di tenere conto di un grande ammontare di variazioni che avvengono in sid (cambi di dipendenze, di nomi, degli script dei manutentori, ...).

Non per colpa degli sviluppatori degli strumenti di gestione dei pacchetti; gli sviluppatori scrivono strumenti eccellenti e favolosi per la branca stabile di Debian ma semplicemente non utilizzabili per le speciali esigenze di Debian sid.

Usare dunque ciò che si vuole per cercare un pacchetto ma utilizzare apt-get per installare/rimuovere/fare dist-upgrade.

I gestori di pacchetti come adept, aptitude, synaptic e kpackage sono come minimo non-deterministici (per una selezione complessa di pacchetti), miscelare questo fatto con una situazione in rapido cambiamento come la debian sid e anche peggio, con l'uso di depositi sofware esterni di discutibile qualità (che noi non raccomandiamo ma che sono una realtà sui sistemi degli utenti) e si capirà che si è sull'ordo del disastro.

L'altra cosa da notare è che questi tipi di gestori di pacchetti in modalità grafica sono in X, fare un dist-upgrade in X, (o anche un "upgrade" che non è racomandato), si finirà con il danneggiare il sistema oltre la possibilità di riparazione, forse non oggi o domani, ma si farà in tempo a vederlo.

apt-get invece fa strettamente ciò che gli si chiede, se c'è un qualsiasi danno si può definirlo con esattezza e fare il debug o riparare la causa, se apt-get volesse rimuovere mezzo sistema (a causa di transizioni di librerie) è il momento per l'amministratore di dare una occhiata severa al tutto.

È questa la ragione per cui le derivate debian usano apt-get e non gli altri gestori di pacchetti.

Cercare un pacchetto con apt-cache

Un altro comando molto utile nel sistema APT è apt-cache; esso cerca nel database APT e mostra informazioni riguardo ai pacchetti; ad esempio si può ottenere una lista di tutti i pacchetti che contengono o indicizzano "aptosid" e "manual" con:

$ apt-cache search aptosid manual
.......
aptosid-manual-common - the official aptosid manual - common files
aptosid-manual-es - the official Spanish aptosid manual
aptosid-manual-de - the official German aptosid manual
aptosid-manual-el - the official Greek aptosid manual
aptosid-manual - the official aptosid manual - all languages
aptosid-manual-pt-br - the official Brazilian Portuguese aptosid manual
aptosid-manual-en - the official English aptosid manual
aptosid-manual-reader - aptosid manual reader

Se si vogliono più informazioni su un certo pacchetto:

$ apt-cache show aptosid-manual-en
Package: aptosid-manual-en
Priority: optional
Section: doc
Installed-Size: 1088
Maintainer: Kel Modderman <kel@otaku42.de>
Architecture: all
Source: aptosid-manual
Version: 01.12.2007.06.03-1
Depends: aptosid-manual-common
Filename: pool/main/s/aptosid-manual/aptosid-manual-en_01.12.2007.06.03-1_all.deb
Size: 391222
MD5sum: 60f2175c3c5709745a4b4256ccc3c49d
SHA1: e275a0b27628b6aa210a4ced48d3646b438e78b8
SHA256: 2792580c7a091521301064180a1d0d8901f0a4af407b90432b9f8d8b6b3603ca
Description: the official en aptosid manual
 This manual is divided into common sections, for example, .......

Tutte le versioni installabili del pacchetto (che dipendono dal sources.list) possono essere mostrate digitando:

$ apt-cache policy aptosid-manual-en
aptosid-manual-en:
  Installed: (none)
  Candidate:01.12.2007.06.03-1
  Version table:
     01.12.2007.06.03-1 0
        500 http://aptosid.com sid/main Packages

Una completa descrizione del sistema APT può essere trovata su APT-HOWTO

Una descrizione completa del sistema APT può essere trovato in APT-HOWTO

Page last revised 10/05/2012 1330 UTC