Jak zainstalować pojedynczy pakiet z testowania Debiana lub niestabilny na stabilnym?

41

Chcę zainstalować pojedynczy pakiet (i jego zależności, ale tylko w takim stopniu, w jakim nie są one zadowalające w Wheezy) z Debian Jessie na moim systemie Wheezy, bez uaktualniania „wszystkiego i zlewu kuchennego” do wersji Jessie. W szczególności chciałbym zainstalować kpcli , który jest dostępny w pakiecie w Jessie, ale nie w Wheezy.

Wszystko, co znalazłem, wskazuje, że powinienem dodać repozytoria Jessie do mojej listy źródeł, ustawić przypinanie, aby wszystko było w porządku, i zabrać tylko jedną paczkę od jessie, a właściwie po prostu się ułoży. Jednak dla mnie to nie pasuje. Jeśli utworzę /etc/apt.d/sources.list.d/jessie.list z następującą zawartością:

deb ftp://ftp.debian.org/debian/ jessie main
deb-src ftp://ftp.debian.org/debian/ jessie main

a następnie utwórz /etc/apt/preferences.d/jessie za pomocą:

Package: *
Pin: release a=wheezy
Pin-Priority: 1001

Package: kpcli
Pin: release a=jessie
Pin-Priority: 450

i uruchamiam, apt-get -u updatea apt-get -u install kpcli/jessienastępnie oczekuję, że apt-get ściągnie kpcli i może garść innych pakietów od Jessie i pozostawi resztę mojego zainstalowanego systemu bez zmian. (Mój system to w pełni aktualna instalacja Wheezy.) Alternatywnie, jeśli mam zbyt niski priorytet pinów, nie spodziewałbym się, że nic nie zrobi. Zamiast tego w moim systemie apt-get chce zaktualizować kilkaset pakietów.

Co dokładnie jest potrzebne, aby zainstalować tylko ten jeden pakiet wersji Jessie, pozostawiając resztę mojego systemu Wheezy bez zmian?

Zauważ, że w tym konkretnym przypadku oprogramowanie jest napisane w Perlu, więc nie ma potrzeby kompilacji plików binarnych ani nic podobnego; istnieje jednak garść zależności modułu Perla. Dlatego jedną z możliwych alternatyw byłoby zainstalowanie .deb (pobranego ręcznie) przy użyciu czegoś, co tylko (1) pozwala na określenie pojedynczego, lokalnego archiwum .deb, które ma zostać zainstalowane dpkg -i, i (2) obsługuje zależności w inteligentny sposób , którego zwykły dpkg -inie ma. Jednak w przypadku wszystkich wyszukiwań, które przeprowadziłem kilkakrotnie i nie udało mi się znaleźć prostego w obsłudze przewodnika, jak to zrobić, ogólne rozwiązanie (takie, które działa również dla binarnych, skompilowanych pakietów) byłoby świetne .

CVn
źródło
4
Zwykłym sposobem radzenia sobie z tym jest backporting - przebudowa pakietu ze źródeł Debiana na Wheezy. Pakiet, którego używasz, wygląda na perl (lub przynajmniej zależy od niego), więc prawdopodobnie nie jest trudno go cofnąć. Jeśli chcesz uzyskać więcej informacji, powiedz to. Prawdopodobnie mógłbym przedstawić przewodnik, jeśli naprawdę tego potrzebujesz.
Faheem Mitha

Odpowiedzi:

15

Dla każdego wpisu (stabilny, testowy, niestabilny) masz priorytet pin 500. Nie powinieneś używać pin> 1000. Używam 1001 tylko wtedy, gdy chcę coś obniżyć. Mam testy + sid + wpisy eksperymentalne określone w /etc/apt/sources.listnastępującym /etc/apt/preferencespliku:

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 130

Wartość 500 jest domyślna dla niestabilnej. Spróbujmy więc sprawdzić iceweasel:

# apt-cache policy iceweasel
iceweasel:
  Installed: (none)
  Candidate: 17.0.10esr-1~deb7u1
  Version table:
     26.0-1 0
        130 http://ftp.pl.debian.org/debian/ experimental/main amd64 Packages
     24.2.0esr-1 0
        500 http://ftp.pl.debian.org/debian/ sid/main amd64 Packages
     17.0.10esr-1~deb7u1 0
        900 http://ftp.pl.debian.org/debian/ testing/main amd64 Packages

Tak więc, gdybym próbował zainstalować iceweasel, zostałby pobrany z gałęzi testowania, ponieważ ma najwyższy priorytet.

Spróbuj zmienić priorytety, aby:

Package: *
Pin: release a=wheezy
Pin-Priority: 900

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910
Michaił Morfikow
źródło
sudo apt-get -u install kpcli/jessiewciąż daje mi 316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.sugerowane priorytety. Jeśli to zrobię apt-cache policy perl(jeden z pakietów, który chce zaktualizować), pokazuje 5.18.1-5 jako kandydata na priorytecie 500 i zainstalował 5.14.2-21 + deb7u1 również na priorytecie 500. Wygląda prawie jak z jakiegokolwiek powodu, apt nie odbiera priorytetów ...
CVn
OK, mam coś. Wygląda na to, że podstęp polegał na użyciu Package: kpcli*(a nie Package: kpcli) Package: * Pin: release o=Debian Pin-Priority: -10na końcu. Oczywiście istnieją twarde zależności prowadzące do wersji Perla dostępnych tylko w Jessie, która z kolei potrzebuje nowszej biblioteki libc6! Szczerze mówiąc, nie zamierzam iść tą drogą, ale to przynajmniej dało mi wynik, którego szukałem. Dziękuję Ci!
CVn
25

Istnieje sposób, aby to zrobić bez użycia przypinania / priorytetów. Zamiast tego możesz określić, z której wersji domyślnej będą instalowane pakiety, które będą następnie używane, chyba że określono inaczej przy użyciu parametru docelowego wydania. Działa to w ten sam sposób, jeśli chcesz zainstalować tylko wybrane pakiety z np. Backportów.

Pokażę to przy instalowaniu pakietów ze Stretcha do Jessie, ponieważ są one obecnie stabilne / testujące, ale działa to tak samo, jak przy instalowaniu pakietów Jessie w Wheezy, tak jak pierwotnie zapytano.

Najpierw dodaj stretch jako repozytorium, np. W /etc/apt/sources.list.d/stretch.list:

deb http://ftp.debian.org/debian stretch main

Następnie, aby ustawić domyślną wersję, utwórz plik /etc/apt/apt.conf.d/default-releasezawierający:

APT::Default-Release "jessie";

(W Wheezy, myślę, apt.conf.dże nie istniał i trzeba by go umieścić /etc/apt/apt.conf).

Następnie instalacja pakietu z testów jest tak prosta, że aptitude -t stretch install kpclinie musisz martwić się o przypinanie priorytetów.

Uwaga: @amc wskazał w komentarzach, że jeśli używasz aptzamiast aptitude, musisz używać "stable"jako Default-Releasezamiast "jessie". Dziękuję Ci! (Oczywiście, możesz również użyć aptitudetego ustawienia).

Florian Jacob
źródło
… Wygląda to na naprawdę sprytny sposób na zrobienie tego. Dlaczego nie jest to oficjalnie akceptowane?
JamesTheAwesomeDude
1
RozumiemThe value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Steven Penny
1
musisz użyć „stabilnego” / „testowania” / itp. zamiast „jessie” / „stretch” dla wersji domyślnej i podczas korzystania z apt
amc
6

Pin: release a=wheezypowinny być Pin: release n=wheezy, może.

Od strony man :

Poniższy rekord przypisuje wysoki priorytet wszystkim wersjom pakietu należącym do dowolnej dystrybucji, której nazwa kodowa to „jessie”.

           Package: *
           Pin: release n=jessie
           Pin-Priority: 900

To prawda!

użytkownik65646
źródło
3
czy to nie zainstalowałoby WSZYSTKICH pakietów od jessy?
rubo77