Czy można zezwolić tylko na określone pakiety aktualizacji z PPA

19

Powiedzmy, że dodałem PPA, który ma pakiet X, którego chcę, ale także pakiet Y, z którego nie chcę korzystać ani otrzymywać aktualizacji. Jak mogę, z tego samego PPA, otrzymywać aktualizacje dla określonego pakietu, ale odmawiać aktualizacji z tego samego PPA dla innych pakietów.

Przykład krok po kroku byłby dobry, ponieważ zdarzyło mi się to w kilku PPA, które mają konkretny pakiet, którego chcę, ale także dodają całą masę innych, których nie chcę jeszcze aktualizować.

Luis Alvarado
źródło

Odpowiedzi:

16

Użyłbyś tak zwanego „przypinania”

Zakładając, że instalujesz pakiet foo z PPA, prawie na pewno będziesz musiał zainstalować również zależności z ppa.

Ale jeśli istnieją inne programy, możesz określić, które repozytorium ma być używane do przypinania.

Zobacz przypinanie wiki Ubuntu

Istnieje przykład przypinania ppa na tej stronie

https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA

Ze strony wiki:

Aby aktualizacja apt-get była jak najbardziej bezbolesna, ustaw niższy priorytet PIN na PPA, to powstrzyma instalację niechcianych wersji pakietów. Raz ustawione, pakiety z PPA ubuntu-mozilla-dzienny zawsze przegrywają w jakiejkolwiek konkurencji z pakietami z innych repozytoriów, nawet jeśli mają wyższą wersję.

Utwórz plik /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

Dodaj do pliku:

Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400

Użyj następujących poleceń, przed i po, aby sprawdzić, czy Priorytet Pin został zaktualizowany.

apt-cache policy

apt-cache policy firefox-3.5
Pantera
źródło
7

Przede wszystkim, jeśli omyłkowo zaktualizowałeś już pakiety z PPA, zapoznaj się z tą odpowiedzią: /ubuntu//a/142808/103117, w szczególności rozdział dotyczący korzystania z ppa-purge. Ponieważ miałem już zaktualizowane pakiety, a apt-get nie obniży wersji niezależnie od priorytetów, najłatwiej jest najpierw wyczyścić wszystkie zaktualizowane pakiety, następnie ustalić priorytety, a następnie ponownie dodać PPA i zaktualizować tylko te pakiety, które chcesz.

Aby uzyskać pełne wyjaśnienie systemu priorytetów / przypinania, patrz man apt_preferences.

Jeśli pakiet jest dostępny z wielu źródeł, każdemu z nich zostanie przypisany priorytet i możesz to zobaczyć za pomocą apt-cache policy <package name>. Na przykład używam PPA o nazwie nathan-renniewaldock / ppa / ubuntu i nie chcę stąd instalować mysql-server-5.5 (mój „pakiet Y”). Więc mogę sprawdzić moją obecną sytuację za pomocą:

rob@frodo:~$ apt-cache policy mysql-server-5.5
mysql-server-5.5:
  Installed: 5.5.27-1~ppa1~precise
  Candidate: 5.5.27-1~ppa1~precise
  Version table:
 *** 5.5.27-1~ppa1~precise 0
        500 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

Ponieważ więc wszystko ma priorytet 500, zgodnie ze stroną podręcznika wybierana jest ta o najwyższym numerze wersji.

Jeśli na przykład chcesz zainstalować tylko ddclient („pakiet X”), ale nie żaden inny pakiet, chcesz zmniejszyć priorytet dla wszystkich pakietów w PPA z wyjątkiem ddclient. Utwórz plik o nazwie /etc/apt/preferences.d/nathan-preferences. Zauważ, że wszystkie pliki w tym katalogu są odczytywane i istnieją pewne zasady dotyczące nazwy pliku (musi zawierać tylko znaki alfanumeryczne, myślniki, myślniki i nie może mieć rozszerzenia ani kończyć się na .pref).

Najpierw musimy wiedzieć, jak rozpoznać naszą umowę PPA. apt-cache policyKomenda własnej dispays informacji na temat wszystkich źródeł. Wiem, że mój PPA ma w nazwie „nathan”, więc:

$ apt-cache policy | grep nathan
400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main i386 Packages
     release v=12.04,o=LP-PPA-nathan-renniewaldock,a=precise,n=precise,l=PPA,c=main

Interesującą częścią jest „o = LP-PPA-nathan-renniewaldock”, którego używamy w pliku /etc/apt/preferences.d/nathan-prefs w następujący sposób:

Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400

Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500

To ustawia wszystko w PPA na priorytet 400, a następnie przywraca domyślną wartość 500 dla ddclient. Teraz mogę sprawdzić, czy zadziałało:

$ apt-cache policy ddclient
ddclient:
  Installed: 3.8.0-11.4ubuntu1
  Candidate: 3.8.1-0~ppa1~precise
  Package pin: 3.8.1-0~ppa1~precise
  Version table:
     3.8.1-0~ppa1~precise 500
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 3.8.0-11.4ubuntu1 500
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
        100 /var/lib/dpkg/status

Więc ddclient ma priorytet 500, co jest taki sam jak oryginalny pakiet Ubuntu, ale zostanie zainstalowany z PPA nathan, ponieważ jest to wyższa wersja. Teraz upewnijmy się, że inne pakiety nie zostaną zainstalowane:

$ apt-cache policy mysql-server
mysql-server:
  Installed: 5.5.24-0ubuntu0.12.04.1
  Candidate: 5.5.24-0ubuntu0.12.04.1
  Version table:
     5.5.27-1~ppa1~precise 0
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

W tym przypadku pakiet od nathan PPA ma priorytet 400, który jest niższy niż Ubuntu, więc nawet jeśli jest w wyższej wersji, nie zostanie zaktualizowany. Możemy to sprawdzić za pomocą:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  ddclient
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 77.7 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue [Y/n]?

Ponieważ tylko pakiet, który chcę zaktualizować, z przyjemnością mogę powiedzieć „tak”.

Rob Fisher
źródło