Jak mogę wybrać pakiety z PPA?

45

Czy istnieje sposób na wybieranie pakietów Cherry z repozytorium ppa, które dodajesz? To znaczy, aby wykluczyć niektóre z aktualizacji, włączając inne?

Na przykład chcę tylko pakiet przeglądarki chromu z tego repozytorium, ale nie innych. Więc nie chcę, sudo apt-get upgradeżeby inne ppa (oprócz przeglądarki chromu) instalowały się na moich istniejących, tylko tym.

Zdaję sobie sprawę, że jest to licencja na strzelanie sobie w stopę, jeśli źle odczytam zależności i wykluczę te, które są potrzebne do tych, które załączyłem, ale wiem na pewno, że w tym przypadku inne pakiety nie są zależnościami dla tego.

Czy to w ogóle możliwe? Może jest jakiś plik białej / czarnej listy lub coś takiego?

yuvilio
źródło
Przekazałem synaptic z trzech powodów: Ubuntu upuścił go jako aktualizator oprogramowania na korzyść Centrum oprogramowania Ubuntu, nie widziałem sposobu, aby Synaptic zatrzymał aktualizacje z ppa nad zainstalowanymi plikami (co było moim problemem), i wolą rozwiązanie wiersza poleceń niż GUI. W końcu znalazłem coś, co zadziałało (patrz moja odpowiedź poniżej).
yuvilio
2
Centrum oprogramowania służy do instalowania i usuwania oprogramowania, Menedżer aktualizacji służy do aktualizacji, mógłbyś użyć przypinania w Synaptic, aby inne pakiety nie zostały zaktualizowane, również dla nowego użytkownika, który nie chciałby zadzierać z terminalem Preferowany byłby GUI, oczywiście twoja odpowiedź jest właściwie poprawna.
Uri Herrera
Jest kilka rzeczy, których po prostu nie można zrobić za pośrednictwem Centrum oprogramowania (które są łatwe w Synaptic). I nie wszyscy (szczególnie nowicjusze) czują się komfortowo z wierszem poleceń.
Mrokii
@Mrokii Zgadzam się, że moje podejście nie jest dla początkujących. Odpowiedź Synaptyczna, którą napisałeś i na którą wskazał Uri Herrera, która, jak zakładam, działa, jest lepsza pod tym względem. Pozwolę innym, którzy spróbują, ocenić to.
yuvilio

Odpowiedzi:

61

Znalazłem jeden sposób, aby to zrobić.

Sztuczka polega na użyciu dwóch klauzul przypinających. Pierwszy nie zezwala na WSZYSTKIE pakiety z PPA, a drugi wybiera te, które chcesz.

W powyższym przykładzie najpierw dodaję ppa jak zwykle:

$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...

Teraz, jeśli uruchomię politykę apt-cache, pokaże mi, że dostępna jest nowsza wersja przeglądarki chromu i że zainstaluje się z aktualizacją, ponieważ ma ten sam priorytet (500), co moja obecna przeglądarka chromu.

$ sudo apt-cache policy chromium-browser
chromium-browser:
  Installed: 18.0.1025.168~r134367-0ubuntu0.12.04.1
  Candidate: 20.0.1132.47~r144678-0precise1+webapps3
  Version table:
     20.0.1132.47~r144678-0precise1+webapps3 0
        500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main amd64 Packages
 *** 18.0.1025.168~r134367-0ubuntu0.12.04.1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/universe amd64 Packages
        500 http://ppa.launchpad.net/chromium-daily/beta/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     18.0.1025.151~r130497-0ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
E: Unable to parse package file /etc/apt/preferences.d/webapps-preview-pin-400 (1)
$ 

To świetnie, o ile ten pakiet, ale nie chcę instalować innych w tym ppa (które mają również priorytet 500). W tej chwili, jeśli spróbuję zaktualizować, otrzymam więcej niż tylko pakiety chromu, które chcę z tego repozytorium:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  bamfdaemon gwibber gwibber-service gwibber-service-facebook gwibber-service-twitter indicator-appmenu libbamf0 libbamf3-0 shotwell
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg gwibber-service-identica indicator-messages indicator-status-provider-mc5
  indicator-status-provider-pidgin libindicator-messages-status-provider1
8 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Need to get 25.3 MB of archives.
After this operation, 5,034 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

Mogę więc powiedzieć aptowi, że chcę, aby wszystkie pakiety w tym ppa, w tym przypadku podgląd aplikacji internetowych, miały niższy priorytet, z wyjątkiem tych z „chromem” w nazwie. Mechanizmem tego jest przypinanie paczki

Plik tworzę w /etc/apt/preferences.d/ z dwoma klauzulami. Pierwszy mówi, że nadaj wszystkim pakietom ppa podglądu webapps niższy priorytet niż zwykły (tak, że nie są one preferowane, nawet jeśli mają wyższy numer wersji. Druga klauzula częściowo zastępuje pierwszy, mówiąc, że daj pakiety w ten ppa z „chromem” w nazwie ma ten sam priorytet co inne pakiety, aby został zainstalowany (dzięki temu, że ma wyższy numer wersji).

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  *chromium*
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

Aby zidentyfikować poprawny ciąg dla opcji „Pin: release”, możemy ponownie użyć polityki apt-cache.

$ apt-cache policy
...
500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main i386 Packages
    release v=12.04,o=LP-PPA-webapps-preview,a=precise,n=precise,l=preview,c=main
    origin ppa.launchpad.net
...

W przypadku wersji apt <0.8.14 należy wyraźnie określić przypięte pakiety, ponieważ symbole wieloznaczne nie działają:

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  chromium-browser chromium-codecs-ffmpeg chromium-browser-l10n chromium-codecs-ffmpeg-extra
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

A teraz, kiedy próbuję zaktualizować, otrzymuję tylko te pakiety, których chcę od tego ppa, a nie innych. Wszystko ładnie wybrane dla mnie:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.1 MB of archives.
After this operation, 5,026 kB of additional disk space will be used.
Do you want to continue [Y/n]?
yuvilio
źródło
5
dość skomplikowane, imho.
Mrokii
5
Nie zgadzam się, jest to dość proste dla tego, co ktoś lubi chce. I miło mieć wszystkie instrukcje dotyczące identyfikacji nazwy PIN ppa.
Nicholi,
Ta konkretna odpowiedź jest dla tych, którzy chcą mieć pewność, że apt zawsze będzie preferował pakiety określonego repozytorium. Jeśli chcesz jednorazowego rozwiązania, wypróbuj tę odpowiedź lub
Braiam
8

Za pomocą ?originselektora możesz również wybrać wersję, z której chcesz zainstalować :

Dopasowuje wersje pakietu, których pochodzenie pasuje do początku wyrażenia regularnego. Na przykład „!? Origin (debian)” znajdzie w twoim systemie wszelkie nieoficjalne pakiety (pakiety nie z archiwum Debiana).

W konkretnym przypadku możesz użyć:

sudo aptitude install !?origin(LP-PPA-webapps-preview) chromium

Lub możesz określić wersję za pomocą <packagename>=<version>:

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3
Braiam
źródło
5

Możesz faktycznie „wybrać” niektóre pakiety za pośrednictwem Synaptic i jest to bardzo łatwe. Działa to tak:

  • Jeśli chcesz to zrobić tylko dla niektórych PPA, wybierz „Pochodzenie” (lewy dolny róg) w oknie Synaptic, a następnie wybierz PPA, który chcesz zmienić

  • wybierz wszystkie pakiety, których nie chcesz już automatycznie aktualizować.

  • wybierz menu „Wersja pakietu / blokady”. Wszystkie wybrane pakiety nie będą już aktualizowane automatycznie, dopóki nie odblokujesz ich ponownie.

Mrokii
źródło