Priorytety pakietów (apt-pinning, pin-priority)
Kategoria: Artykuły, etykiety: system, apt
Dodany: 2011-07-31 11:49
(zmodyfikowany: 2011-08-02 11:08)
Przez: ArnVaker
Wyświetleń: 30871
Priorytety pakietów można ustawić w pliku /etc/apt/preferences, ewentualnie w plikach znajdujących się w katalogu /etc/apt/preferences.d. Wyjątkiem jest opcja „target release”, którą ustawia się w pliku /etc/apt/apt.conf, ewentualnie w pliku znajdującym się w katalogu /etc/apt/apt.conf.d. Po co zmieniać domyślne wartości? Najczęściej korzysta się z takiej możliwości jeżeli używa się repozytoriów zawierających te same pakiety, ale w różnych wersjach, np. mieszając gałąź testową z gałęzią niestabilną. Ustawienie własnych priorytetów daje większą kontrolę nad tym jakie wersje pakietów będą domyślnie instalowane, a jakie np. po wyraźnym wskazaniu ich z wiersza poleceń.
Spis treści:
- Domyślnie używane wartości
- Wartość „Target Release”
- Pierwszeństwo wyboru wersji pakietu
- Jak APT interpretuje wartości
- Ustawienia Pin-Priority
- Wyrażenia regularne
- Ułatwienia przy ustawianiu Pin-Priority
Domyślnie używane wartości
1 — Wartość 1 otrzymują pakiety pochodzące z repozytoriów zawierających w pliku „Release” wpis „NotAutomatic: yes”. Przykładem takiego repozytorium jest oficjalne repozytorium experimental Debiana.
100 — Wartość 100 stosowana jest w dwóch przypadkach:
Otrzymują ją pakiety pochodzące z repozytoriów zawierających w pliku „Release” wpisy „NotAutomatic: yes” oraz „ButAutomaticUpgrades: yes”. Przykładem takiego repozytorium jest repozytorium z backportami dla wersji stabilnej.
Otrzymują ją aktualnie zainstalowane pakiety. Jeżeli zainstalowany pakiet dostępny jest również w jakimś repozytorium, otrzymuje też wartość przypisaną do danego repozytorium. Jeżeli jednak nie jest nigdzie dostępny, otrzymuje wyłącznie wartość 100.
500 — Standardowo pakiety dostępne w repozytoriach otrzymują wartość 500 — poza przypadkami omówionymi powyżej oraz repozytoriami oznaczonymi jako „target release”.
990 — Pakiety pochodzące z repozytoriów oznaczonych jako „target release” otrzymują wartość 990.
Wartość „Target Release”
Zdefiniowanie „target release” ustawia pakietom wartość 990. Opcję tę można zdefiniować na dwa sposoby:
- Bezpośrednio z wiersza poleceń. Przykłady:
aptitude -t unstable install pakiet
apt-get -t testing install pakiet
- Dodając odpowiedni wpis do pliku /etc/apt/apt.conf (lub pliku w katalogu /etc/apt/apt.conf.d). Przykłady:
APT::Default-Release "stable";
APT::Default-Release "squeeze";
APT::Default-Release "6.0*";
Definiując „target-release” można użyć wersji, nazwy kodowej lub wersji wydania.
Pierwszeństwo wyboru wersji pakietu
- APT nie cofa pakietów — nie instaluje starszej wersji aktualnie zainstalowanego pakietu — jeżeli nie jest o to wyraźnie poproszony. Poprosić można np. przez ustawienie priorytetu powyżej 1000 lub wskazanie konkretnej wersji pakietu do instalacji.
- Pierwszeństwo ma pakiet z najwyższym priorytetem.
- Jeżeli kilka wersji pakietu ma taki sam priorytet, instalowana jest najnowsza z nich.
Jak APT interpretuje wartości
P < 0 — Wersja pakietu nie zostanie zainstalowana.
0 < P < 100 — Wersja pakietu zostanie zainstalowana tylko jeżeli pakiet nie jest aktualnie zainstalowany.
100 <= P < 500 — Wersja pakietu zostanie zainstalowana, chyba że dostępna jest wersja pochodząca z innego repozytorium (o domyślnej wartości 500) lub aktualnie zainstalowana jest nowsza wersja pakietu.
500 <= P < 990 — Wersja pakietu zostanie zainstalowana, chyba że dostępna jest wersja pochodząca z repozytorium oznaczonego jako „target release” lub aktualnie zainstalowana jest nowsza wersja pakietu.
990 <= P <= 1000 — Wersja pakietu zostanie zainstalowana nawet jeśli dostępna jest wersja pochodząca z repozytorium oznaczonego jako „target release”, chyba że zainstalowana jest nowsza wersja pakietu.
P > 1000 — Wersja pakietu zostanie zainstalowana nawet jeśli wymaga to jego cofnięcia.
Ustawienia Pin-Priority
- Ustawienia Pin-Priority są ustawieniami globalnymi — są honorowane przez wszystkie menedżery pakietów.
- Mogą być stosowane ogólnie dla wszystkich pakietów — gdy w polu „Package” użyta zostanie gwiazdka.
- Mogą odnosić się do konkretnego pakietu/pakietów — gdy w polu „Package” wymienione zostaną nazwy pakietów.
- Opcja „target-release” ma pierwszeństwo przed ogólnymi ustawieniami z pliku /etc/apt/preferences.
- Ustawienia z /etc/apt/apt.conf nadpisują ustawienia z plików w /etc/apt/apt.conf.d.
- Ustawienia z /etc/apt/preferences nadpisują ustawienia z plików w /etc/apt/preferences.d.
- Kolejność ma znaczenie — np. wpis znajdujący się wyżej w pliku /etc/apt/preferences nadpisuje wpis znajdujący się niżej w tym samym pliku. Oczywiście dotyczy to sytuacji gdy wpisy odnoszą się do tych samych pakietów.
Ustawienia w oparciu o wersję
Przykładowy wpis:
Package: perl
Pin: version 5.8*
Pin-Priority: 1001
Wpis ustawia wartość 1001 wszystkim wersjom pakietu perl rozpoczynającym się od „5.8”, niezależnie z jakiego repozytorium pochodzą. Nowsza wersja (np. zaczynająca się od „5.9”) nie zostanie zainstalowana nawet jeśli będzie dostępna, chyba że miałaby ustawiony jeszcze wyższy priorytet.
Kolejne pakiety mogą zostać podane w tej samej linii — każdy oddzielony spacją, można też dla każdego utworzyć osobny wpis. Wersja pakietu/pakietów może być podana dokładnie lub jej część może zostać zastąpiona gwiazdką.
Ustawienia w oparciu o źródło pochodzenia
Przykładowy wpis:
Package: *
Pin: origin ftp.de.debian.org
Pin-Priority: 980
Wpis ustawia wartość 980 wszystkim wersjom pakietów pochodzącym z serwera „ftp.de.debian.org”, niezależnie od sekcji w jakiej się znajdują, nazwy kodowej, etykiety repozytorium itd.
Nazwa serwera może zostać podana dokładnie lub jej część może zostać zastąpiona gwiazdką. Przykładowo poniższy wpis ustawi wartość 110 wszystkim pakietom pochodzącym z serwerów, których nazwa zawiera ciąg znaków „backports”:
Package: *
Pin: origin *backports*
Pin-Priority: 110
W przypadku lokalnego repozytorium utworzonego za pomocą dpkg-scanpackages można użyć wpisu:
Package: *
Pin: origin ""
Pin-Priority: 991
Wpis ustawia wartość 991 wszystkim wersjom pakietów pochodzącym z takiego repozytorium.
Ustawienia w oparciu o plik „Release”
Ustawienia te odnoszą się do wpisów znajdujących się w pliku „Release” danego repozytorium, przykładowo aktualnie dla repozytorium wersji stabilnej wygląda on tak:
Origin: Debian
Label: Debian
Suite: stable
Version: 6.0.2.1
Codename: squeeze
Date: Sun, 26 Jun 2011 09:04:52 UTC
Architectures: amd64 armel i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
Components: main contrib non-free
Description: Debian 6.0.2.1 Released 26 June 2011
Opcje z których można skorzystać przy ustawianiu Pin-Priority to:
- „Origin” — pochodzenie, użycie:
Pin: release o=Debian
- „Label” — etykieta, użycie:
Pin: release l=Debian
- „Suite” — wersja, użycie:
Pin: release a=stable
- „Version” — wersja wydania, użycie:
Pin: release v=6.0.2.1
- „Codename” — nazwa kodowa, użycie:
Pin: release n=squeeze
- „Component” — sekcja repozytorium, użycie:
Pin: release c=main
Opcje można łączyć — oddzielając je przecinkami — lub skorzystać z tylko jednej z nich. Jeżeli opcje zostaną połączone, ustawiona wartość Pin-Priority zostanie przypisana tylko pakietom, które spełniają wszystkie z wymienionych warunków.
Przykładowe wpisy:
Package: *
Pin: release a=stable
Pin-Priority: 900
Package: *
Pin: release o=Debian
Pin-Priority: -10
Wpis ustawia wartość 900 wszystkim pakietom z wersji „stable”, jednocześnie zabrania instalacji innych pakietów z repozytorium Debiana. Kolejność ma znaczenie — gdyby zamienić sekcje miejscami, wpis zabraniałby instalacji wszystkich pakietów z repozytorium Debiana i ustawiał wartość 900 pakietom z wersji „stable”, ale tylko pochodzącym z zewnętrznych repozytoriów.
Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 102
Wpis ustawia wartość 102 pakietom pochodzącym z oficjalnego repozytorium experimental Debiana. Wartość pakietów pochodzących z nieoficjalnych repozytoriów experimental nie zostanie zmieniona.
Package: *
Pin: release o=Debian Mozilla Team,c=iceweasel-beta
Pin-Priority: 720
Package: *
Pin: release o=Debian Mozilla Team,c=iceweasel-aurora
Pin-Priority: 710
Wpis ustawia wartość 720 pakietom pochodzącym z sekcji „iceweasel-beta” repozytorium „Debian Mozilla Team” oraz wartość 710 pakietom pochodzącym z sekcji „iceweasel-aurora” tego samego repozytorium.
Wyrażenia regularne
Od wersji 0.18.4 APT obsługuje wyrażenia regularne także w nazwach pakietów oraz poszczególnych opcjach ustawień opartych o plik „Release”. Przykładowo poniższy wpis ustawia wartość 500 pakietom pochodzącym z repozytorium experimental, których nazwa zaczyna się słowem „gnome” lub zawiera słowo „kde”.
Package: gnome* /kde/
Pin: release n=experimental
Pin-Priority: 500
Ułatwienia przy ustawianiu Pin-Priority
Przydatne są zwłaszcza dwa polecenia, pierwszym jest:
apt-cache policy
Użyte bez żadnych argumentów wyświetla listę wszystkich dostępnych sekcji we wszystkich używanych repozytoriach wraz z aktualnymi wartościami Pin-Priority. Od razu widać dokładnie jakie jest źródło pochodzenia pakietów z tego repozytorium oraz jakich opcji można użyć przy ustawianiu wartości w oparciu o plik „Release”.
Fragment wyniku odnoszący się do sekcji „main” omawianego wcześniej repozytorium wersji stabilnej wygląda tak:
500 http://ftp.de.debian.org/debian/ stable/main amd64 Packages
release v=6.0.2.1,o=Debian,a=stable,n=squeeze,l=Debian,c=main
origin ftp.de.debian.org
Drugim przydatnym poleceniem jest polecenie:
apt-cache policy pakiet
Łatwo można się dzięki niemu dowiedzieć jakie wersje danego pakietu są aktualnie dostępne, z jakich repozytoriów i sekcji pochodzą, jakie wartości są im przypisane, a także jaka jego wersja jest zainstalowana, a jaka kandydująca.
Przykładowy wynik:
mplayer2:
Zainstalowana: 1:2.0~git20110718-0.3
Kandydująca: 1:2.0~git20110718-0.3
Tabela wersji:
*** 1:2.0~git20110718-0.3 0
990 http://www.debian-multimedia.org/ unstable/main amd64 Packages
100 /var/lib/dpkg/status
1:2.0~git20110422-0.1 0
980 http://www.debian-multimedia.org/ testing/main amd64 Packages
2.0-134-g84d8671-2 0
920 http://ftp.de.debian.org/debian/ experimental/main amd64 Packages
Więcej informacji dostępnych jest jak zawsze w podręcznikach systemowych:
man 5 apt_preferences
oraz:
man 5 apt.conf