Jak instalować aktualizacje tylko z określonego repozytorium?

39

Jak ograniczyć aktualizacje instalowane do tych z określonego zestawu repozytoriów? Czy to w ogóle możliwe?

Ton van den Heuvel
źródło
Czy chcesz mieć możliwość określania repozytorium podczas uruchamiania, czy powinno być bardziej statyczne? Te dwie odpowiedzi poniżej zakładamy drugą opcję.
tshepang
Idealnie byłoby w czasie wykonywania. Opcja statyczna jest jednak wystarczająca.
Ton van den Heuvel
2
Kierujesz się, a rzeczywista pomoc, o którą prosisz, jest inna.
sundar

Odpowiedzi:

29

Użyj przypinania

Przypinanie to proces, który pozwala pozostać w stabilnej wersji Ubuntu (lub dowolnego innego systemu debian) podczas pobierania pakietów z nowszej wersji. - help.ubuntu.com

Możesz wyłączyć automatyczne aktualizacje z niektórych repozytoriów bez całkowitego usuwania ich za pomocą aptzasad:

Aby wyłączyć automatyczne aktualizacje z repozytorium repo, dodaj plik
/etc/apt/preferences.d/repoo następującej treści:

Package: *
Pin: release n=repo
Pin-Priority: 50

Co da wszystkim pakietom z tego repozytorium niższy priorytet niż już zainstalowane pakiety (które mają 100).

Aby uzyskać więcej informacji man apt_preferenceslub sprawdź Wiki Wiki Ubuntu .

kynan
źródło
3
Szkoda, że ​​jedyną odpowiedzią na apt_preferences jest ostatnia ...
Robert Siemer
jak dowiedzieć się, która wersja pochodzi z którego repozytorium?
Max N
2
@MaxN zwykle znajdziesz te informacje, uruchamiającapt-cache policy package-name
Anwar
Nie spowoduje to, że repozytorium nie będzie brane pod uwagę podczas aktualizacji. bo release n=reponikogo nie zbuforuje
Anwar
35

Możesz określić wydanie z -topcją. Jako przykład dodałem następujące repozytorium, /etc/apt/sources.listaby zainstalować najnowszą wersję Iceweasel:

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

Jak wiecie, iceweaselw oficjalnym repozytorium Debiana znajduje się ten sam pakiet . Jeśli chcę zainstalować Iceweasel z tej konkretnej wersji, uruchamiam:

apt-get install -t squeeze-backports iceweasel

ze strony podręcznika 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.

Myślę, że to lepsze rozwiązanie.

AKTUALIZACJA : Jak wspomniano w komentarzu @SuB, -tokreśla wersję, a nie nazwę repozytorium. W Ubuntu nie ma nazwy repozytorium (w przeciwieństwie do Linuksa opartego na RedHat, takiego jak RHEL, Fedora, CentOS, ...)”.

rysownik
źródło
4
Jak widać w apt-getinstrukcji, należy -tpodać nazwę wydania, a nie repozytorium. W Ubuntu nie ma nazwy repozytorium (w przeciwieństwie do Linuksa opartego na RedHat, takiego jak RHEL, Fedora, CentOS, ...)
SuB
1
@SuB Tak, masz rację! Myliłem nazwę repozytorium z wydaniem!
rysownik
-t xenialdziała dla jednego pakietu. ale wszystkie jego zależności będą nadal pobierane z wyższych pakietów
Anwar,
11

Krótka odpowiedź

Musisz przypiąć repozytoria, z których nie chcesz instalować, z priorytetem mniejszym niż 100. Co oznacza (ze apt_preferencestrony man)

100 <= P <500
powoduje zainstalowanie wersji, chyba że dostępna jest wersja należąca do innej dystrybucji lub zainstalowana wersja jest nowsza

Aby wybrać repozytorium do przypięcia, użyjesz pól z Releasepliku repozytoriów . Takich jak archive, label, release, versionitd. Poprzez określenie wartości tych pól, można precyzyjnie wybrać repozytorium i przypisać preferowany pierwszeństwo do niego. Sprawdź stronę apt_preference, aby uzyskać więcej informacji.


Długa odpowiedź

Przed kontynuowaniem musimy dowiedzieć się czegoś ważnego na temat przypinania. Obejmuje to

  1. Pola Releaseplików i odwzorowanie na apt-cache policydane wyjściowe

  2. Format plików preferencji apt

  3. Używanie Releasepól plików do ustawiania priorytetu

1. Pola Releasepliku i apt-cache policywyniku

Z artykułu Wiki Debian

  • Opis
  • Etykieta
  • Pochodzenie
  • Wersja
  • Zestaw
  • Kryptonim
  • składniki
  • Architektury

Zobaczysz dane wyjściowe z apt-cache policytakich

 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

Wartości w tych wierszach pochodzą z Releaseplików.

  • Opis ustawia opis repozytorium. Nie jest to pokazywane w apt-cache policydanych wyjściowych

  • Oznacz to jest etykietą repozytorium. Wiele repozytoriów ma puste etykiety. Jest pokazany l=<label>na wyjściu.

  • Pochodzenie mówi o pochodzeniu repozytorium. Oficjalne repozytorium Ubuntu ma Ubuntutę wartość. Pokazane jak o=na wyjściu

  • Wersja jest wersją dystrybucji. Dla Xenial jest 16.04. Pokazane jak v=na wyjściu

  • Pakiet jest taki sam jak Archiwum . Z debian wiki jest to nazwa dystrybucji Debiana, do której pakiety w tym katalogu należą (lub są przeznaczone), tj. Stabilne, testujące lub niestabilne. . Dla Ubuntu, to są release-updates, release-securityitd. Na przykład xenial-updates, xenial-security. Jest pokazany na wyjściu jako a=xenial, a=xenial-security. Umowy PPA używają do tego tylko nazwy wydania, dlatego niewiele to pomoże w przypinaniu.

  • Komponent mówi o licencji. To main, multiverse, restricted, universew Ubuntu. Na wyjściu jest pokazany jako c=mainlub c=restricteditd. Większość PPA używa maintego pola, dlatego też nie pomaga zbyt mocno przypinać.

  • Architektura dotyczy architektury systemu operacyjnego. Pokazane jako b=i386lub b=amd64na wyjściu

  • Codename to nazwa wydania dystrybucji. Jest na 16.04 xenial. Jest na 14.04 trusty. Pokazane w apt-cache policydanych wyjściowych jako n=xeniallub n=trusty. Zwykle jest tak samo dla wszystkich repozytoriów dla jednej dystrybucji. Dlatego nie pomaga to w znacznym upinaniu.

Drugi wiersz apt-cache policywyjściowy rozpoczynający się od origininformuje o pochodzeniu internetowym repozytorium. Może być również stosowany do przypinania. Ale nie należy go mieszać z polem Releaseplików Origin. Te są różne.

Użyjemy tych wartości do przypięcia repozytorium.

Jak więc użyć przypinania 1 do ograniczenia repozytorium?

Istnieje kilka sposobów kontrolowania przypinania, a dla Ubuntu działa tylko niewielki podzbiór. Szczegółowe wyjaśnienie wykracza jednak poza zakres odpowiedzi. W tym celu zapoznaj się z apt_preferenceinstrukcją obsługi.

2. Format pliku PIN

Pliki preferencji pin lub apt znajdują się w /etc/apt/preferences.dfolderze. Każde przypięcie zawiera trzy linie.

  • Pierwszy wiersz zaczyna się od, Package:a po nim następują nazwy rozdzielone przecinkami. Wyrażenia regularne i globusy są dozwolone

  • Druga linia zaczyna się od Pin:i służy do celowania w zestaw pakietów.

    Jeśli chcemy przypiąć paczki z xenialwyższych niż xenial-updates, użyjemy release a=xenial.

    Jeśli chcemy przypiąć wersję 5.0, użyjemy version 5.0tutaj. Glob pattens są dozwolone.

    Lub jeśli chcemy przypiąć paczki z miejsca pochodzenia http://archive.ubuntu.com, użyjemy origin "archive.ubuntu.com". Uwaga: nie piszemy http://tam protokołu.

  • Trzeci wiersz zaczyna się od, Pin-Priority:a jego wartość jest liczbą. Co oznacza priorytet wyżej wymienionych elementów docelowych.

3. Używanie Releasepól plików do ustawienia priorytetu

Oto przykład

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

W tym przykładzie pakiety z xenialarchiwów mają wyższy priorytet niż xenial-updatesi xenial-security.

Po przypięciu uruchomienie programu apt-cache policy nautiluspokazuje, że rzeczywiście nadał wyższy priorytet niższej wersji z xenialarchiwum niż wyższej wersji z xenial-updatesarchiwum. Zwróć uwagę na Candidate:linię.

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

Ale jeśli chcemy nadać priorytet także pakietom dostarczonym przez PPA, to nie zadziała. Ponieważ PPA xenialdomyślnie używają tej samej nazwy archiwum . Tak więc przypisanie priorytetu a=xenialbędzie miało zastosowanie również do tych pakietów. Na przykład (po włączonym 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

Teraz wersja kandydacka pochodzi z PPA. Oba pakiety z xenialarchiwum oficjalnego repozytorium Ubuntu i PPA mają ten sam priorytet 1001, ponieważ oba używają tej samej wartości Archivew pliku Release. Aby pomyślnie przypiąć, musimy połączyć więcej pól w pliku Przypnij.


Kilka przykładów

Przypnij repozytorium PPA

Aby przypiąć paczki z repozytorium, musimy zaatakować go za pomocą informacji znalezionych w apt-cache policypoleceniu. Właśnie widzieliśmy, że a=xenialto nie pomoże wskazać repozytorium. Musimy używać wielu pól razem za pomocą przecinka w pliku preferencji, aby precyzyjnie celować w repozytorium.

Na przykład, aby zapobiec wszystkim pakietom z http://ppa.launchpad.net/oibaf/graphics-drivers/ppa, możemy użyć

Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10

Używamy tutaj wartości kryptonimu, a także Originwartości PPA. (Chociaż wartość kryptonimu nie jest tutaj wymagana). Czasami repozytorium może stracić tę wartość. W takich przypadkach należy zastosować inne techniki. Wynik apt-cache policy libgl1-mesa-glxmówi, że to działa. Obniżył priorytet wszystkich pakietów tego 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

Zignoruj ​​fakt, że jest to kandydat. Stało się tak, ponieważ jest już zainstalowany w moim systemie . Sprawdź priorytet po prawej stronie

Przypnij repozytorium, gdy brakuje informacji o wersji

Jeśli chcemy przypiąć repozytorium, którego brakuje informacji o wersji, takie jak ten http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04, musimy użyć innej metody. Ponieważ żadne inne repozytorium nie korzysta z tego źródła, możemy bezpiecznie użyć go origindo przypięcia tego repozytorium.

Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10

Uwaga 1: To źródło jest pochodzenia internetowego, a nie tego, które określa Dostawcę w pliku Release.

Uwaga 2: Pin-Priority liczba ma specjalne znaczenie. Sprawdź apt_preferencestronę podręcznika o szczegóły.

Anwar
źródło
7

Alternatywą opartą na gui byłoby otwarcie centrum oprogramowania i wybranie opcji edytuj> źródła oprogramowania ...

Źródła oprogramowania z wybraną kartą oprogramowania Ubuntu

Źródła oprogramowania z wybraną inną kartą oprogramowania

wszystko, co musisz zrobić, to odznaczyć repozytoria, od których nie chcesz aktualizacji.

Mam nadzieję że to pomoże

Allan
źródło
5

Oczywistym wyborem jest zmodyfikowanie /etc/apt/sources.listi skomentowanie wszystkich innych repozytoriów, a następnie uruchomienie

apt-get update && apt-get upgrade && apt-get autoclean

A następnie usuń komentarze z sources.list. Może nie jest to najlepszy sposób, ale przynajmniej apt-getstrony podręcznika nie określają żadnego sposobu, aby to zrobić.

Z uwagi na to, na przykład proces aktualizacji dystrybucji Ubuntu wyłącza wszystkie repozytoria stron trzecich podczas aktualizacji (i nie uruchamia tylko niektórych opcji, aby tymczasowo je wykluczyć).

Olli
źródło
1

Inną opcją GUI jest wybranie źródła w menedżerze pakietów Synaptic.

  1. Wyszukaj nazwę pakietu, który chcesz zainstalować
  2. Kliknij przycisk Origin
  3. Wybierz repozytorium, z którego chcesz zainstalować
  4. Wybierz pakiety
  5. Zastosować
woot
źródło