Come installare gli aggiornamenti solo da un repository specifico?


39

Come posso limitare gli aggiornamenti installati a quelli da un set specifico di repository? Questo è possibile?


Vuoi essere in grado di specificare il repository durante il runtime o dovrebbe essere più una cosa statica? Le due risposte sottostanti assumono quest'ultima opzione.
Tshepang,

Idealmente sarebbe durante il runtime. L'opzione statica è comunque sufficiente.
Ton van den Heuvel,

2
L'intestazione e l'aiuto effettivo richiesto sono diversi.
domenica

Risposte:


29

Usa Pinning

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

Per disabilitare gli aggiornamenti automatici dal repository repo, aggiungere un file
/etc/apt/preferences.d/repocon 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_preferenceso consultare il Wiki della community di Ubuntu .


3
E 'un peccato l'unica apt_preferences risposta è l'ultima ...
Robert Siemer

come scoprire quale versione proviene da quale repository?
Max N

2
@MaxN di solito troverai queste informazioni eseguendoapt-cache policy package-name
Anwar

Ciò non imporrà a un repository di non essere preso in considerazione durante l'aggiornamento. perché release n=reponon memorizzerà nella cache nessuno
Anwar,

35

È possibile specificare una versione con -topzione. Ad esempio, ho aggiunto il seguente repository /etc/apt/sources.listper installare l'ultima versione di Iceweasel:

deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

Come sapete, esiste un pacchetto identico iceweaselnel 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, " -tspecifica 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, ...)".


4
Come si vede nel apt-getmanuale, -tspecificare 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, ...)
SuB

1
@SuB Sì, hai ragione! Ho confuso il nome del repository con il rilascio!
vignettista

-t xenialfunziona per un singolo pacchetto. ma tutte le sue dipendenze verranno comunque recuperate da pacchetti superiori
Anwar,

10

Risposta breve

È necessario bloccare i repository da cui non si desidera installare con una priorità inferiore a 100. Il che significa (dalla apt_preferencepagina 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 Releasefile dei repository . Come ad esempio archive, label, release, versionecc 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.


Risposta lunga

Prima di procedere, dobbiamo conoscere alcune cose importanti sull'appuntamento. Quelli include

  1. Campi di Releasefile e mappatura apt-cache policyall'output

  2. Formato dei file delle preferenze di apt

  3. Utilizzo dei Releasecampi file per impostare la priorità

1. Campi del Releasefile e apt-cache policydell'output

Da wiki di Debian articolo

  • Descrizione
  • Etichetta
  • Origine
  • Versione
  • Suite
  • Nome in codice
  • componenti
  • architetture

Vedresti un output apt-cache policysimile 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 Releasefile.

  • Descrizione imposta la descrizione per un repository. Questo non è mostrato apt-cache policynell'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 Ubuntucome 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-securityecc, 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, universein Ubuntu. Nell'output viene mostrato come c=maino c=restrictedecc. La maggior parte dei PPA utilizza mainper questo campo, quindi non aiuta neanche a bloccare molto.

  • L'architettura riguarda l'architettura del sistema operativo. Mostrato come b=i386o b=amd64nell'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 policyoutput come n=xenialo 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 policynell'output che inizia con originindica l'origine Internet del repository. Può anche essere utilizzato per il pinning. Ma non dovrebbe essere mescolato con il campo dei Releasefile 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_preferencepagina man per questo.

2. Formato file pin

I file delle preferenze di pin o apt risiedono nella /etc/apt/preferences.dcartella. 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 xenialsuperiore a xenial-updates, useremo release a=xenial.

    Se vogliamo aggiungere la versione 5.0, useremo version 5.0qui. 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.

3. Utilizzo dei Releasecampi file per impostare la priorità

Ecco un esempio

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

In questo esempio, ai pacchetti dagli xenialarchivi viene data priorità più alta rispetto a xenial-updatese xenial-security.

Dopo il pinning, l'esecuzione di una apt-cache policy nautilusmostra che in effetti ha dato maggiore priorità a una versione inferiore xenialdall'archivio rispetto a una versione superiore xenial-updatesdall'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 xenialper impostazione predefinita. Pertanto, l'assegnazione di una priorità a=xenialsi 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 xenialdall'archivio del repository Ubuntu ufficiale e il PPA hanno la stessa priorità 1001, perché entrambi usano lo stesso valore Archivenel file Release. Per aggiungere correttamente, è necessario combinare più campi nel file Pin.


Qualche esempio

Pin un repository PPA

Per bloccare i pacchetti da un repository, dobbiamo indirizzarlo usando le informazioni trovate dal apt-cache policycomando. Abbiamo appena visto che a=xenialnon 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 Originvalore 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-glxdice 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

Appunta un repository quando mancano le informazioni sulla versione

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 originper 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_preferencela pagina di manuale per i dettagli.


Il pinning è completamente inutile se il pacchetto è più recente nel repository che stai cercando di evitare. Cioè, il più delle volte.
bviktor

7

Un'alternativa basata su gui sarebbe quella di aprire il centro software e selezionare Modifica> Sorgenti software ...

Sorgenti software con la scheda software Ubuntu selezionata

Sorgenti software con altra scheda software selezionata

tutto ciò che devi fare è deselezionare i repository da cui non desideri ricevere aggiornamenti.

Spero che sia di aiuto


5

La scelta ovvia è quella di modificare /etc/apt/sources.liste 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-getpagine 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).


1

Un'altra opzione della GUI è semplicemente scegliere l'origine nel gestore pacchetti Synaptic.

  1. Cerca il nome del pacchetto che desideri installare
  2. Fai clic sul pulsante Origine
  3. Scegli il repository da cui vuoi installare
  4. Scegli i pacchetti
  5. Applicare
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.