Il file delle preferenze di APT, /etc/apt/preferences e i file frammento nella directory /etc/apt/preferences.d/ possono essere usati per controllare quale versione verrà selezionata per l'installazione.
Quando il file sources.list(5) contiene riferimenti a più di una distribuzione, potrebbero essere disponibili per l'installazione diverse versioni di un pacchetto (ad esempio stable e testing). APT assegna una priorità a ciascuna versione che è disponibile. Tenendo in considerazione i limiti imposti dalle dipendenze, apt-get seleziona per l'installazione la versione con la più alta priorità. Le preferenze di APT scavalcano le priorità che APT assegna in modo predefinito alle versioni dei pacchetti, dando perciò all'utente il controllo su quale venga selezionata per l'installazione.
Quando il file sources.list(5) contiene riferimenti a più di una fonte, potrebbero essere disponibili più istanze della stessa versione di un pacchetto. In questo caso apt-get scarica l'istanza elencata per prima nel file sources.list(5). Le preferenze di APT non hanno effetto sulla scelta dell'istanza, ma solo sulla scelta della versione.
Le preferenze sono uno strumento potente nelle mani di un amministratore di sistema, ma possono anche diventare il suo incubo peggiore se usate con poca cautela! APT non mette in dubbio le preferenze scelte, perciò impostazioni sbagliate possono avere come risultato pacchetti non installabili o decisioni sbagliate durante l'aggiornamento dei pacchetti. Se vengono mescolati più rilasci di distribuzione può sorgere un numero ancora più grande di problemi, se non si sono capiti bene i concetti spiegati nei prossimi paragrafi. I pacchetti inclusi in uno specifico rilascio non sono testati (e perciò non sempre funzionano come atteso) in rilasci più vecchi o più nuovi, o insieme ad altri pacchetti da altri rilasci. Ci si consideri avvertiti.
Notare che i file nella directory /etc/apt/preferences.d vengono analizzati in ordine alfanumerico crescente e i loro nomi devono conformarsi alle seguenti convenzioni: non devono avere estensione o avere estensione "pref", e possono contenere solo caratteri alfanumerici, trattini (-), trattini bassi (_) e punti (.). In caso contrario APT stampa un messaggio che informa che un file è stato ignorato, a meno che tale file non corrisponda ad un modello nell'elenco di configurazione Dir::Ignore-Files-Silently, nel qual caso viene ignorato in modo silenzioso.
Se non c'è alcun file di preferenze o non c'è nel file una voce applicabile ad una versione particolare, allora la priorità assegnata a quella versione è la priorità della distribuzione a cui essa appartiene. È possibile distinguere una distribuzione, il «rilascio obiettivo», che riceve in modo predefinito una priorità maggiore delle altre distribuzioni. Il rilascio obiettivo può essere impostato nella riga di comando di apt-get o nel file di configurazione di APT, /etc/apt/apt.conf. Notare che questa impostazione ha precedenza rispetto a qualsiasi priorità generale sia stata impostata nel file /etc/apt/preferences descritto in seguito, ma non rispetto a pacchetti per cui è specificatamente indicato un pin. Per esempio,
apt-get install -t testing un-pacchetto
APT::Default-Release "stable";
Se il rilascio obiettivo è stato specificato, allora APT usa il seguente algoritmo per impostare le priorità delle versioni di un pacchetto. Assegna:
priorità 1
priorità 100
priorità 500
priorità 990
Se il rilascio obiettivo non è stato specificato, allora APT assegna semplicemente la priorità 100 a tutte le versioni di pacchetto installate e la priorità 500 a tutte le versioni di pacchetto non installate, tranne le versioni che provengono da archivi che, nei loro file Release, sono contrassegnati come «NotAutomatic: yes»; queste ultime versioni hanno priorità 1, oppure priorità 100 se sono in aggiunta contrassegnate come «ButAutomaticUpgrades: yes».
Per determinare quale versione di un pacchetto installare APT applica poi le seguenti regole, elencate in ordine di precedenza.
In una situazione tipica, la versione installata di un pacchetto (priorità 100) non è così recente come una delle versioni disponibili dalle fonti elencate nel file sources.list(5) (priorità 500 o 990). Quindi il pacchetto viene aggiornato quando viene eseguito apt-get install un-pacchetto o apt-get upgrade.
Più raramente, la versione installata di un pacchetto è più recente di qualsiasi altra versione disponibile. Il pacchetto non viene retrocesso quando viene eseguito apt-get install un-pacchetto o apt-get upgrade.
A volte la versione installata di un pacchetto è più recente di quella che appartiene al rilascio obiettivo, ma non così recente come la versione che appartiene a qualche altra distribuzione. Un tale pacchetto verrà di fatto aggiornato quando viene eseguito apt-get install un-pacchetto o apt-get upgrade, perché almeno una delle versioni disponibili ha una priorità più alta di quella installata.
APT understands a field called Phased-Update-Percentage which can be used to control the rollout of a new version. It is an integer between 0 and 100.
A system's eligibility to a phased update is determined by seeding random number generator with the package source name, the version number, and /etc/machine-id, and then calculating an integer in the range [0, 100]. If this integer is larger than the Phased-Update-Percentage, the version is pinned to 1, and thus held back. Otherwise, normal policy rules apply.
In case you have multiple systems that you want to receive the same set of updates, you can set APT::Machine-ID to a UUID such that they all phase the same, or set APT::Get::Never-Include-Phased-Updates or APT::Get::Always-Include-Phased-Updates to true such that APT will never/always consider phased updates.
Il file delle preferenze di APT permette all'amministratore di sistema di controllare l'assegnazione delle priorità. Il file consiste di uno o più record su più righe, separati da righe vuote. I record possono avere una tra due forme: una forma specifica e una forma generica.
Package: perl Pin: version 5.20* Pin-Priority: 1001
Queste voci in forma generica nel file di preferenze di APT si applicano solo ai gruppi di pacchetti. Per esempio, il record seguente assegna una priorità alta a tutte le versioni di pacchetto disponibili dal sito locale.
Package: * Pin: origin "" Pin-Priority: 999
Un avvertimento: la parola chiave usata in questo caso è «origin» e può essere usata per indicare un nome host. Il record seguente assegna una priorità alta a tutte le versioni disponibili dal server identificato dal nome host «ftp.de.debian.org»
Package: * Pin: origin "ftp.de.debian.org" Pin-Priority: 999
Questo non deve essere confuso con l'Origine di una distribuzione come indicata in un file Release. Ciò che segue il tag «Origin:» in un file Release non è un indirizzo Internet, ma un nome di autore o produttore, come «Debian» o «Ximian».
Il record seguente assegna una priorità bassa a tutte le versioni di pacchetto che appartengono ad una qualsiasi distribuzione il cui nome di archivio è «unstable».
Package: * Pin: release a=unstable Pin-Priority: 50
Il record seguente assegna una priorità alta a tutte le versioni di pacchetto che appartengono ad una qualsiasi distribuzione il cui nome in codice è «bookworm».
Package: * Pin: release n=bookworm Pin-Priority: 900
Il record seguente assegna una priorità alta a tutte le versioni di pacchetto che appartengono ad un qualsiasi rilascio il cui nome di archivio è «stable» e il cui numero di versione del rilascio è «11».
Package: * Pin: release a=stable, v=11 Pin-Priority: 500
L'effetto dell'operatore virgola è simile ad un «AND» nella logica: tutte le condizioni devono essere soddisfatte affinche il pin faccia corrispondenza. Esiste una sola eccezione: per ciascun tipo di condizione (come due condizioni «a»), solo l'ultima di queste condizioni viene controllata.
APT permette anche di impostare priorità di pin usando espressioni glob(7) ed espressioni regolari racchiuse tra sbarre («/»). L'esempio seguente assegna, ad esempio, la priorità 500 a tutti i pacchetti da experimental il cui nome inizia con gnome (indicato con un'espressione in stile glob(7)) oppure contiene la parola kde (indicato in forma di espressione regolare estesa POSIX racchiusa tra sbarre).
Package: gnome* /kde/ Pin: release a=experimental Pin-Priority: 500
Di norma queste espressioni possono essere utilizzate ovunque c'è una stringa. Perciò il pin seguente assegna la priorità 990 a tutti i pacchetti provenienti da un rilascio il cui nome inizia con hirsute.
Package: * Pin: release n=hirsute* Pin-Priority: 990
Se un'espressione regolare viene usata in un campo Package, il comportamento è equivalente a quello che si otterrebbe se l'espressione regolare fosse sostituita da un elenco di tutti i nomi di pacchetto a cui corrisponde. Non è chiaro se questo comportamento verrà modificato in futuro; perciò si dovrebbero sempre indicare per primi i pin con caratteri jolly, in modo che i pin specifici successivi abbiano precedenza su di essi. Il modello «*» in un campo Package non viene considerato come un'espressione glob(7).
APT supports pinning by source packages. To pin by a source package, prepend "src:" to the package name.
For example, to pin all binaries produced by the apt source package of this APT's version to 990, you can do:
Package: src:apt Pin: version 2.1.20 Pin-Priority: 990
Source package pinning can be combined with regular expressions and glob patterns, and can also take a binary architecture.
For example, let's pin all binaries for all architectures produced by any source package containing apt in its name to 990:
Package: src:*apt*:any Pin: version * Pin-Priority: 990
Le priorità (P) assegnate nel file delle preferenze di APT devono essere rappresentate da interi positivi o negativi. Vengono interpretate nel modo seguente (semplificando le cose):
P >= 1000
990 <= P < 1000
500 <= P < 990
100 <= P < 500
0 < P < 100
P < 0
P = 0
Il primo record in forma specifica, che corrisponde ad una versione di pacchetto disponibile, determina la priorità della versione del pacchetto. In caso contrario, la priorità del pacchetto viene definita come il valore massimo di tutte le priorità definite da record in forma generica che corrispondono alla versione. I record definiti usando modelli nel campo Pin diversi da «*» sono trattati come record in forma specifica.
Per esempio, supponendo che il file di preferenze di APT contenga i tre record descritti in precedenza:
Package: perl Pin: version 5.20* Pin-Priority: 1001 Package: * Pin: origin "" Pin-Priority: 999 Package: * Pin: release unstable Pin-Priority: 50
Allora:
Le posizioni elencate nel file sources.list(5) dovrebbero fornire i file Packages e Release che descrivono i pacchetti disponibili in quelle posizioni.
Il file Packages si trova normalmente nella directory .../dists/nome-dist/componente/arch: per esempio, .../dists/stable/main/binary-i386/Packages. È costituito da una serie di record su più righe, uno per ogni pacchetto disponibile in tale directory. In ciascun record solo due righe sono rilevanti per l'impostazione delle priorità di APT:
la riga Package:
la riga Version:
Il file Release si trova normalmente nella directory .../dists/nome-dist: ad esempio, .../dists/stable/Release o .../dists/bullseye/Release. Consiste di un record su più righe che si applica a tutti i pacchetti nell'albero di directory sottostante alla directory genitrice. A differenza di ciò che avviene per il file Packages, quasi tutte le righe in un file Release sono importanti per l'impostazione delle priorità di APT:
la riga Archive: o Suite:
Pin: release a=stable
la riga Codename:
Pin: release n=bookworm
la riga Version:
Pin: release v=11 Pin: release a=stable, v=11 Pin: release 11
la rigaComponent:
Pin: release c=main
la riga Origin:
Pin: release o=Debian
la riga Label:
Pin: release l=Debian
Tutti i file Packages e Release recuperati dalle posizioni elencate nel file sources.list(5) sono memorizzati nella directory /var/lib/apt/lists o nel file indicato dalla variabile Dir::State::Lists nel file apt.conf. Per esempio, il file debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release contiene il file Release recuperato dal sito debian.lcs.mit.edu per i file dell'architettura binary-i386 nella componente contrib della distribuzione unstable.
Ogni record nel file delle preferenze di APT può iniziare opzionalmente con una o più righe che cominciano con la parola Explanation:. Ciò fornisce un posto dove mettere commenti.
Il seguente file di preferenze di APT fa sì che APT assegni una priorità più alta di quella predefinita (500) a tutte le versioni di pacchetto che appartengono alla distribuzione stable, e una priorità eccezionalmente bassa alle versioni di pacchetto che appartengono alle altre distribuzioni Debian.
Explanation: Disinstallare o non installare ogni versione di Explanation: pacchetto originata da Debian che non sia nella Explanation: distribuzione stable Package: * Pin: release a=stable Pin-Priority: 900 Package: * Pin: release o=Debian Pin-Priority: -10
Con un file sources.list(5) adatto e il file di preferenze descritto sopra, uno qualsiasi dei seguenti comandi farà sì che APT aggiorni il sistema alle versioni più recenti di stable.
apt-get install nome-pacchetto apt-get upgrade apt-get dist-upgrade
Il seguente comando farà sì che APT aggiorni il pacchetto specificato alla versione più recente nella distribuzione testing; il pacchetto non verrà successivamente aggiornato a meno di non usare nuovamente questo comando.
apt-get install pacchetto/testing
Il seguente file di preferenze di APT fa sì che APT assegni una priorità alta alle versioni di pacchetto nella distribuzione testing, una priorità più bassa alle versioni di pacchetto nella distribuzione unstable, e una priorità eccezionalmente bassa alle versioni di pacchetto nelle altre distribuzioni Debian.
Package: * Pin: release a=testing Pin-Priority: 900 Package: * Pin: release a=unstable Pin-Priority: 800 Package: * Pin: release o=Debian Pin-Priority: -10
Con un file sources.list(5) adatto e il file di preferenze descritto sopra, uno qualsiasi dei seguenti comandi farà sì che APT aggiorni il sistema alle versioni più recenti di testing.
apt-get install nome-pacchetto apt-get upgrade apt-get dist-upgrade
Il comando seguente farà sì che APT aggiorni il pacchetto specificato alla più recente versione nella distribuzione unstable. Successivamente, apt-get upgrade aggiornerà il pacchetto alla versione più recente in testing, se è più nuova di quella installata, altrimenti alla più recente versione in unstable se è più recente di quella installata.
apt-get install pacchetto/unstable
Il seguente file delle preferenze di APT farà sì che APT assegni una priorità più alta di quella predefinita (500) a tutte le versioni di pacchetto che appartengono alla distribuzione con il nome in codice specificato, e una priorità eccezionalmente bassa alle versioni di pacchetto che appartengono ad altre distribuzioni, nomi in codice e archivi Debian. Notare che con questa preferenza, APT segue la migrazione di un rilascio dall'archivio testing a stable e successivamente a oldstable. Se si vuole seguire il progresso, ad esempio, di testing indipendentemente dai cambi di nome in codice si devono usare le configurazioni negli esempi precedenti.
Explanation: Disinstallare o non installare qualsiasi versione di pacchetto Explanation: originata da Debian che non sia nella distribuzione con Explanation: nome in codice bookworm o sid Package: * Pin: release n=bookworm Pin-Priority: 900 Explanation: Debian unstable ha sempre il nome in codice side Package: * Pin: release n=sid Pin-Priority: 800 Package: * Pin: release o=Debian Pin-Priority: -10
Con un file sources.list(5) adatto e il file di preferenze descritto sopra, uno qualsiasi dei seguenti comandi farà sì che APT aggiorni il sistema alle versioni più recenti nel rilascio con nome in codice bookworm.
apt-get install nome-pacchetto apt-get upgrade apt-get dist-upgrade
Il comando seguente farà sì che APT aggiorni il pacchetto specificato alla più recente versione nella distribuzione sid. Successivamente, apt-get upgrade aggiornerà il pacchetto alla versione più recente in bookworm, se è più nuova di quella installata, altrimenti alla più recente versione in sid se è più recente di quella installata.
apt-get install pacchetto/sid
/etc/apt/preferences
/etc/apt/preferences.d/
apt-get(8) apt-cache(8) apt.conf(5) sources.list(5)
m[blue]Pagina dei bug di APTm[][1]. Se si desidera segnalare un bug in APT, vedere /usr/share/doc/debian/bug-reporting.txt o il comando reportbug(1).
Traduzione in italiano a cura del Team italiano di localizzazione di Debian <debian-l10n-italian@lists.debian.org>. In particolare hanno contribuito Eugenia Franzoni (2000), Hugh Hartmann (2000-2012), Gabriele Stilli (2012), Beatrice Torracca (2012, 2014, 2015).
Notare che questa versione tradotta del documento può contenere parti non tradotte. Ciò è voluto, per evitare di perdere contenuti quando la traduzione non è aggiornata rispetto all'originale.
Team APT