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ń: 29211

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

  • 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

OSnews Wykop Blip Flaker Kciuk Śledzik Facebook Identi.ca Twitter del.icio.us Google Bookmarks