Jak ograniczyć aktualizacje instalowane do tych z określonego zestawu repozytoriów? Czy to w ogóle możliwe?
Jak ograniczyć aktualizacje instalowane do tych z określonego zestawu repozytoriów? Czy to w ogóle możliwe?
Odpowiedzi:
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ą apt
zasad:
Aby wyłączyć automatyczne aktualizacje z repozytorium repo
, dodaj plik /etc/apt/preferences.d/repo
o 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_preferences
lub sprawdź Wiki Wiki Ubuntu .
apt-cache policy package-name
release n=repo
nikogo nie zbuforuje
Możesz określić wydanie z -t
opcją. Jako przykład dodałem następujące repozytorium, /etc/apt/sources.list
aby zainstalować najnowszą wersję Iceweasel:
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release
Jak wiecie, iceweasel
w 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, „ -t
okreś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, ...)”.
apt-get
instrukcji, należy -t
podać nazwę wydania, a nie repozytorium. W Ubuntu nie ma nazwy repozytorium (w przeciwieństwie do Linuksa opartego na RedHat, takiego jak RHEL, Fedora, CentOS, ...)
-t xenial
działa dla jednego pakietu. ale wszystkie jego zależności będą nadal pobierane z wyższych pakietów
Musisz przypiąć repozytoria, z których nie chcesz instalować, z priorytetem mniejszym niż 100. Co oznacza (ze apt_preference
strony 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 Release
pliku repozytoriów . Takich jak archive
, label
, release
, version
itd. 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.
Przed kontynuowaniem musimy dowiedzieć się czegoś ważnego na temat przypinania. Obejmuje to
Pola Release
plików i odwzorowanie na apt-cache policy
dane wyjściowe
Format plików preferencji apt
Używanie Release
pól plików do ustawiania priorytetu
Release
pliku i apt-cache policy
wynikuZ artykułu Wiki Debian
Zobaczysz dane wyjściowe z apt-cache policy
takich
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 Release
plików.
Opis ustawia opis repozytorium. Nie jest to pokazywane w apt-cache policy
danych 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 Ubuntu
tę 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-security
itd. 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
, universe
w Ubuntu. Na wyjściu jest pokazany jako c=main
lub c=restricted
itd. Większość PPA używa main
tego pola, dlatego też nie pomaga zbyt mocno przypinać.
Architektura dotyczy architektury systemu operacyjnego. Pokazane jako b=i386
lub b=amd64
na wyjściu
Codename to nazwa wydania dystrybucji. Jest na 16.04 xenial
. Jest na 14.04 trusty
. Pokazane w apt-cache policy
danych wyjściowych jako n=xenial
lub n=trusty
. Zwykle jest tak samo dla wszystkich repozytoriów dla jednej dystrybucji. Dlatego nie pomaga to w znacznym upinaniu.
Drugi wiersz apt-cache policy
wyjściowy rozpoczynający się od origin
informuje o pochodzeniu internetowym repozytorium. Może być również stosowany do przypinania. Ale nie należy go mieszać z polem Release
plikó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_preference
instrukcją obsługi.
Pliki preferencji pin lub apt znajdują się w /etc/apt/preferences.d
folderze. 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 xenial
wyższych niż xenial-updates
, użyjemy release a=xenial
.
Jeśli chcemy przypiąć wersję 5.0, użyjemy version 5.0
tutaj. 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.
Release
pól plików do ustawienia priorytetuOto przykład
Package: *
Pin: release a=xenial
Pin-Priority: 1001
W tym przykładzie pakiety z xenial
archiwów mają wyższy priorytet niż xenial-updates
i xenial-security
.
Po przypięciu uruchomienie programu apt-cache policy nautilus
pokazuje, że rzeczywiście nadał wyższy priorytet niższej wersji z xenial
archiwum niż wyższej wersji z xenial-updates
archiwum. 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 xenial
domyślnie używają tej samej nazwy archiwum . Tak więc przypisanie priorytetu a=xenial
bę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 xenial
archiwum oficjalnego repozytorium Ubuntu i PPA mają ten sam priorytet 1001
, ponieważ oba używają tej samej wartości Archive
w pliku Release. Aby pomyślnie przypiąć, musimy połączyć więcej pól w pliku Przypnij.
Aby przypiąć paczki z repozytorium, musimy zaatakować go za pomocą informacji znalezionych w apt-cache policy
poleceniu. Właśnie widzieliśmy, że a=xenial
to 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 Origin
wartoś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-glx
mó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
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 origin
do 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_preference
stronę podręcznika o szczegóły.
Oczywistym wyborem jest zmodyfikowanie /etc/apt/sources.list
i 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-get
strony 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ć).