Come posso limitare gli aggiornamenti installati a quelli da un set specifico di repository? Questo è possibile?
Come posso limitare gli aggiornamenti installati a quelli da un set specifico di repository? Questo è possibile?
Risposte:
Il pinning è un processo che ti consente di rimanere su una versione stabile di Ubuntu (o di qualsiasi altro sistema debian) mentre prendi i pacchetti da una versione più recente. - help.ubuntu.com
È possibile disabilitare gli aggiornamenti automatici da determinati repository senza rimuoverli completamente tramite i apt
criteri:
Per disabilitare gli aggiornamenti automatici dal repository repo
, aggiungere un file /etc/apt/preferences.d/repo
con il seguente contenuto:
Package: *
Pin: release n=repo
Pin-Priority: 50
Il che darà a tutti i pacchetti di questo repository una priorità inferiore rispetto ai pacchetti già installati (che hanno 100).
Per ulteriori informazioni man apt_preferences
o consultare il Wiki della community di Ubuntu .
apt-cache policy package-name
release n=repo
non memorizzerà nella cache nessuno
È possibile specificare una versione con -t
opzione. Ad esempio, ho aggiunto il seguente repository /etc/apt/sources.list
per installare l'ultima versione di Iceweasel:
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release
Come sapete, esiste un pacchetto identico iceweasel
nel repository Debian ufficiale. Se voglio installare Iceweasel da questa versione specifica, corro:
apt-get install -t squeeze-backports iceweasel
dalla pagina di manuale di apt-get:
-t, --target-release, --default-release
This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
apt_preferences(5) manual page.
Penso che questa sia una soluzione migliore.
AGGIORNAMENTO : Come menzionato @SuB nel commento, " -t
specifica il nome del repository non di rilascio. Non esiste un nome di repository in Ubuntu (a differenza di Linux basato su RedHat come RHEL, Fedora, CentOS, ...)".
apt-get
manuale, -t
specificare il nome della versione non del repository. Non esiste un nome di repository in Ubuntu (a differenza di Linux basato su RedHat come RHEL, Fedora, CentOS, ...)
-t xenial
funziona per un singolo pacchetto. ma tutte le sue dipendenze verranno comunque recuperate da pacchetti superiori
È necessario bloccare i repository da cui non si desidera installare con una priorità inferiore a 100. Il che significa (dalla apt_preference
pagina man)
100 <= P <500
provoca l'installazione di una versione a meno che non sia disponibile una versione appartenente a qualche altra distribuzione o la versione installata sia più recente
E per selezionare un repository da appuntare, useresti i campi dal Release
file dei repository . Come ad esempio archive
, label
, release
, version
ecc Specificando i valori di questi campi, è possibile selezionare con precisione un repository e assegnare la priorità preferita ad esso. Controlla la pagina apt_preference per maggiori dettagli.
Prima di procedere, dobbiamo conoscere alcune cose importanti sull'appuntamento. Quelli include
Campi di Release
file e mappatura apt-cache policy
all'output
Formato dei file delle preferenze di apt
Utilizzo dei Release
campi file per impostare la priorità
Release
file e apt-cache policy
dell'outputDa wiki di Debian articolo
Vedresti un output apt-cache policy
simile a questi
500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64
I valori in queste righe provengono dai Release
file.
Descrizione imposta la descrizione per un repository. Questo non è mostrato apt-cache policy
nell'output
Etichetta è l'etichetta del repository. Molti repository hanno etichette vuote. Viene mostrato l=<label>
nell'output.
Origine questo racconta l'origine del repository. Il repository ufficiale di Ubuntu ha Ubuntu
come valore. Mostrato come o=
nell'output
Versione è la versione di una distribuzione. Sono le 16.04 per Xenial. Mostrato come v=
nell'output
Suite è uguale a Archive . Da debian wiki è il nome della distribuzione di Debian a cui appartengono (o sono progettati per) i pacchetti in questa directory, ovvero stabile, test o instabile. . Per Ubuntu, questi sono release-updates
, release-security
ecc, ad esempio, xenial-updates
, xenial-security
. È mostrato in uscita come a=xenial
, a=xenial-security
. I PPA usano solo il nome della versione per questo, ecco perché non aiuta molto in Pinning.
Il componente racconta la questione delle licenze. E ' main
, multiverse
, restricted
, universe
in Ubuntu. Nell'output viene mostrato come c=main
o c=restricted
ecc. La maggior parte dei PPA utilizza main
per questo campo, quindi non aiuta neanche a bloccare molto.
L'architettura riguarda l'architettura del sistema operativo. Mostrato come b=i386
o b=amd64
nell'output
Nome in codice è il nome della versione della distribuzione. Per il 16.04 lo è xenial
. Per 14.04 lo è trusty
. Mostrato in apt-cache policy
output come n=xenial
o n=trusty
. È lo stesso per tutti i repository per una singola distribuzione di solito. Ecco perché non aiuta a bloccare molto.
L'altra riga apt-cache policy
nell'output che inizia con origin
indica l'origine Internet del repository. Può anche essere utilizzato per il pinning. Ma non dovrebbe essere mescolato con il campo dei Release
file Origin
. Quelli sono diversi.
Useremo questi valori per aggiungere un repository.
Quindi, come si usa il pinning 1 per limitare il repository?
Esistono diversi modi per controllare il pinning e solo un piccolo sottoinsieme è efficace per Ubuntu. Una spiegazione dettagliata va oltre lo scopo della risposta. Fare riferimento alla apt_preference
pagina man per questo.
I file delle preferenze di pin o apt risiedono nella /etc/apt/preferences.d
cartella. Ogni pinning contiene tre righe.
La prima riga inizia con Package:
e seguono i nomi dei pacchetti separati da virgola. Sono consentite espressioni regolari e globs
La seconda riga inizia con Pin:
e viene utilizzata come target di una serie di pacchetti.
Se vogliamo aggiungere pacchetti da un livello xenial
superiore a xenial-updates
, useremo release a=xenial
.
Se vogliamo aggiungere la versione 5.0, useremo version 5.0
qui. Sono ammessi i pattens globali.
O se vogliamo bloccare i pacchetti dall'origine http://archive.ubuntu.com
, useremo origin "archive.ubuntu.com"
. Nota, non scriviamo http://
protocollo lì.
La terza riga inizia con Pin-Priority:
e il suo valore è un numero. Il che significa la priorità degli elementi target sopra.
Release
campi file per impostare la prioritàEcco un esempio
Package: *
Pin: release a=xenial
Pin-Priority: 1001
In questo esempio, ai pacchetti dagli xenial
archivi viene data priorità più alta rispetto a xenial-updates
e xenial-security
.
Dopo il pinning, l'esecuzione di una apt-cache policy nautilus
mostra che in effetti ha dato maggiore priorità a una versione inferiore xenial
dall'archivio rispetto a una versione superiore xenial-updates
dall'archivio. Nota la Candidate:
linea.
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 100
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Ma, se vogliamo dare priorità anche ai pacchetti forniti da PPA, questo non funzionerà. Perché i PPA usano lo stesso nome di archivio xenial
per impostazione predefinita. Pertanto, l'assegnazione di una priorità a=xenial
si applica anche a quei pacchetti. Ad esempio (dopo aver abilitato PPA),
13:31 $ apt-cache policy nautilus
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.5-0ubuntu1~xenial1
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 1001
500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Ora la versione candidata proviene da un PPA. Entrambi i pacchetti xenial
dall'archivio del repository Ubuntu ufficiale e il PPA hanno la stessa priorità 1001
, perché entrambi usano lo stesso valore Archive
nel file Release. Per aggiungere correttamente, è necessario combinare più campi nel file Pin.
Per bloccare i pacchetti da un repository, dobbiamo indirizzarlo usando le informazioni trovate dal apt-cache policy
comando. Abbiamo appena visto che a=xenial
non aiuterà a individuare un repository. Dobbiamo utilizzare più campi insieme utilizzando la virgola in un file delle preferenze per indirizzare con precisione un repository.
Ad esempio, per impedire a tutti i pacchetti di http://ppa.launchpad.net/oibaf/graphics-drivers/
ppa, possiamo usare
Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10
Qui stiamo usando il valore del nome in codice e il Origin
valore del PPA. (Sebbene il valore del nome in codice non sia richiesto qui in realtà). A volte il repository può perdere questi valori. In questi casi, dovrebbero essere utilizzate alcune altre tecniche. L'output di apt-cache policy libgl1-mesa-glx
dice che funziona. Ha abbassato la priorità di tutti i pacchetti di questo PPA.
libgl1-mesa-glx:
Installed: 12.1~git1608200730.16ef7a~gd~x
Candidate: 12.1~git1608200730.16ef7a~gd~x
Version table:
*** 12.1~git1608200730.16ef7a~gd~x 100
-10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
11.2.0-1ubuntu2.1 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
11.2.0-1ubuntu2 500
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Ignora il fatto che è Candidato. Questo è successo, perché è già installato nel mio sistema . Controlla la priorità a destra
Se vogliamo aggiungere un repository le cui informazioni di rilascio mancano, come questo http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04
, dobbiamo usare un altro metodo. Dal momento che nessun altro repository utilizza tale origine, possiamo tranquillamente utilizzare origin
per bloccare questo repository.
Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10
Nota 1: questa origine è l'origine Internet, non quella che specifica il fornitore nel file di rilascio.
Nota 2: il Pin-Priority
numero ha un significato speciale. Controlla apt_preference
la pagina di manuale per i dettagli.
La scelta ovvia è quella di modificare /etc/apt/sources.list
e commentare tutti gli altri repository e quindi eseguirlo
apt-get update && apt-get upgrade && apt-get autoclean
E quindi rimuovere i commenti da sources.list
. Forse non è il modo migliore, ma almeno le apt-get
pagine man non specificano alcun modo per farlo.
Sulla nota correlata, ad esempio il processo di aggiornamento della distribuzione Ubuntu disabilita tutti i repository di terze parti durante l'aggiornamento (e non esegue solo alcune opzioni per escluderli temporaneamente).