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 update
a apt-get -u install kpcli/jessie
nastę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 -i
nie 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 .
Odpowiedzi:
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.list
następującym/etc/apt/preferences
pliku:Wartość 500 jest domyślna dla niestabilnej. Spróbujmy więc sprawdzić iceweasel:
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:
źródło
sudo apt-get -u install kpcli/jessie
wciąż daje mi316 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 ...Package: kpcli*
(a niePackage: kpcli
)Package: *
Pin: release o=Debian
Pin-Priority: -10
na 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!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
:Następnie, aby ustawić domyślną wersję, utwórz plik
/etc/apt/apt.conf.d/default-release
zawierający:(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 kpcli
nie musisz martwić się o przypinanie priorytetów.Uwaga: @amc wskazał w komentarzach, że jeśli używasz
apt
zamiastaptitude
, musisz używać"stable"
jakoDefault-Release
zamiast"jessie"
. Dziękuję Ci! (Oczywiście, możesz również użyćaptitude
tego ustawienia).źródło
The value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Pin: release a=wheezy
powinny byćPin: release n=wheezy
, może.Od strony man :
To prawda!
źródło