(Jeśli masz pytania / komentarze dotyczące tej odpowiedzi, dodaj komentarz. Lub, jeśli masz wystarczającą liczbę przedstawicieli, możesz pingować mnie na czacie.)
Bezpośrednie instalowanie pakietów binarnych z nowszej wersji Debiana - nie odpowiedź.
Załóżmy, że korzystasz z jakiejś wersji dystrybucji opartej na Debianie. Chcesz nowszej wersji pakietu, niż jest dostępna. Pierwszą rzeczą, którą każdy początkujący próbuje to zrobić, aby zainstalować pakiet binarny bezpośrednio w twojej wersji Debiana. Może to działać lub nie, w zależności od używanej wersji i tego, o ile nowszy jest pakiet. Ogólnie ta procedura nie będzie działać dobrze.
Rozważmy na przykład przypadek, w którym próbuje się zainstalować pakiet binarny z wersji testowej / niestabilnej bezpośrednio na stabilnym. Najprawdopodobniej nie pójdzie to dobrze, chyba że testowanie / niestabilność zdarzy się bardzo blisko stabilnego w tym momencie. Powód ma związek z naturą dystrybucji binarnej opartej na Linuksie, takiej jak Debian. Takie systemy operacyjne w dużym stopniu zależą od bibliotek współdzielonych, a te zależności są często bardzo ściśle zależne od wersji; często o wiele bardziej niż to konieczne. Debian nie ma obecnie dobrego sposobu na „ściśnięcie” zależności między wersjami - to skrótowy stwierdzenie, że zależność wersji jest tak restrykcyjna, jak to konieczne.
Co to oznacza dla użytkownika? Załóżmy na przykład, że próbujesz zainstalować np. slrn
Niestabilną wersję Debiana do wersji stabilnej Debiana. Jak by to wyglądało?
# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.
Pomimo błędu spowodowanego przez apt
, nie ma tutaj uszkodzonych pakietów. Co poszło nie tak? Problem polega na tym, że wersja, z libc6
którą slrn
została skompilowana niestabilna wersja , jest inna (i ma wyższy numer wersji) niż wersja dostępna w stabilnej wersji Debiana. ( libc6
jest biblioteką GNU C.) Biblioteka C jest centralna dla każdego systemu operacyjnego podobnego do Uniksa, a biblioteka GNU C jest wersją powszechnie używaną w systemach operacyjnych Linux.)
Dlatego niestabilna slrn
wymaga wersji o wyższym numerze libc6
niż dostępna dla wersji stabilnej. Zauważ, że ponieważ pakiet został skompilowany z wyższą wersją biblioteki, niekoniecznie wymaga wyższej wersji tej biblioteki, ale często tak jest.
Składnia
apt-get install slrn/unstable
oznacza: użyj niestabilnej, slrn
ale dla wszystkich innych pakietów używaj tylko wersji ze stabilnej. Mówiąc dokładniej, używa liczb priorytetowych. Zobacz man apt_preferences
szczegóły.
Można też zrobić
apt-get install -t unstable slrn
Jest to o wiele bardziej prawdopodobne, ale na ogół nie chcesz tego robić. Czemu?
Oznacza to: tymczasowo traktuj wszystkie pakiety w niestabilnych na równi z pakietami w stabilnym. Dlatego pociągnie to za sobą slrn
zależności niestabilnej od niestabilnej, jeśli mają wyższy numer wersji, i ogólnie będą. Zazwyczaj będzie to obejmować bibliotekę GNU C z powodów już wyjaśnionych. Teraz to podejście na ogół „zakończy się sukcesem”, ponieważ zależności zostaną z definicji spełnione (niestabilne slrn
mają zależności, które są zaspokojone w niestabilnej), ale kończy się to mieszanką pakietów, które nagle zmuszone są do uruchomienia z wersjami bibliotek różnią się od tego, do czego zostały zbudowane. To prawdopodobnie nie skończy się dobrze.
Odpowiedź brzmi ... WSPARCIE!
Więc jaki jest właściwy sposób to zrobić? Ma to na celu odbudowanie źródeł Debiana nowszych wersji w twoim systemie, popularnie zwanych „backportingiem”. Rozważ następujące przypadki:
Istnieją półoficjalne / oficjalne źródła dodatkowych pakietów dostępnych dla tej wersji Debiana.
Pierwsze miejsce do zobaczenia to Debian Backports , która jest oficjalną stroną dla backportów Debiana.
Konkretny przykład:
Dodaj odpowiedni wiersz backportów dla swojej wersji i aktualizacji, aby znaleźć nowe pakiety, a następnie jawnie zainstaluj coś z backportów (ponieważ backporty są domyślnie wyłączone).
echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git
Spowoduje to uzyskanie najnowszej stabilnej wersji git, która ma użyteczne nowsze funkcje niż stabilna dołączona do stretch (np. „Include”, która pozwala łączyć wiele plików konfiguracyjnych lub zmieniać nazwę użytkownika dla ~ / work / projects / vs ~ / personal / projektowanie/).
Innym miejscem do obejrzenia są różne umowy PPA opracowane przez opiekunów Ubuntu. Możesz wyszukać „nazwa pakietu PPA”.
Nie ma już najnowszych wersji pakietu dostępnych dla tej wersji systemu operacyjnego, ale są nowsze wersje dostępne dla nowszych wersji / wydań systemu operacyjnego. Jest to standardowy przypadek backportowania.
Backporting oznacza, że przebudowujesz źródła Debiana z późniejszej wersji Debiana na uruchomioną wersję. Ta procedura może być łatwa lub zaangażowana i trudna w zależności od opakowania. Oto zarys tego, jak to zrobić.
Krótki samouczek dotyczący backportingu dla początkujących
Dla konkretności założę, że korzystasz z bieżącej stabilnej wersji Debiana, która jest obecnie świszcząca. Użyję tego pakietu slrn
jako przykładu.
Po pierwsze, zauważ, że wszystkie pliki pakietów Debiana znajdują się w debian/
podkatalogu katalogu źródłowego.
Pierwszym krokiem jest sprawdzenie, czy dostępna jest nowsza wersja. Możesz to zrobić za pomocą apt-cache policy
.
apt-cache policy slrn
slrn:
Installed: 1.0.0~pre18-1.3
Candidate: 1.0.0~pre18-1.3
Version table:
1.0.1-10 0
50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
*** 1.0.0~pre18-1.3 0
500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
100 /var/lib/dpkg/status
1.0.0~pre18-1.1 0
500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages
Chcielibyśmy cofnąć się 1.0.1-10
.
KROK 1:
Uwaga: Upewnij się, że deb-src
wiersze wersji źródłowej, którą chcesz pobrać, pojawią się w Twoim pliku /etc/apt/sources.list
. Na przykład, jeśli chcesz pobrać niestabilną wersję slrn
, potrzebujesz deb-src
linii dla niestabilnej, inaczej nie będzie działać. Zauważ, że nie potrzebujesz odpowiednich deb
linii do pobrania źródeł, chociaż apt-cache policy
używa tych informacji, więc jeśli nie masz odpowiednich deb
linii, apt-cache policy
nie pokaże ci odpowiednich wersji. Jeśli masz deb
wiersze, nie zapomnij przypiąć nowszych wersji za pomocą wpisu /etc/apt/preferences
lub podobnego. Na /etc/apt/preferences
przykład taki wpis (dla niestabilnych) będzie działał.
Package: *
Pin: release a=unstable
Pin-Priority: 50
Jeśli dodasz linie /etc/apt/sources.list
, nie zapomnij uruchomić apt-get update
później.
Pobierz źródła dla slrn
. Dobrym miejscem jest /usr/local/src/slrn
.
apt-get source slrn=1.0.1-10
KROK 2:
Zmień nieznacznie numer wersji, aby odróżnić swój backport od wcześniejszej wersji. Uruchom dch -i
, który automatycznie doda wpis do debian/changelog
pliku. Następnie zmień wpis, aby na przykład wyglądał tak:
slrn (1.0.1-10.username) UNRELEASED; urgency=low
* Backport to wheezy.
-- User <user@domain> Sun, 02 Feb 2014 23:54:13 +0530
KROK 3:
Próba zbudowania źródeł. Jeśli pakiety wymagane do kompilacji nie są dostępne, próba się nie powiedzie. Zmień katalog na katalog źródłowy. Użyj debuild
z devtools
paczki.
cd slrn-1.0.1/
debuild -uc -us
Jeśli zależności kompilacji są spełnione, źródła będą kompilować i generować debaty na poziomie powyżej katalogu źródłowego; w tym przypadku /usr/local/src/slrn
.
KROK 4:
Załóżmy, że zależności kompilacji nie są spełnione. Następnie musisz spróbować zainstalować zależności kompilacji. Może to działać lub nie, ponieważ zależności mogą nie być dostępne dla Twojej wersji lub, jeśli są dostępne, mogą nie być dostępne w odpowiedniej wersji.
Uwaga: Niestety pakiety Debiana nie są rzadkością, aby wymagać wersji zależności kompilacji, które są wyższe niż to konieczne. W Debianie nie ma zautomatyzowanego sposobu, aby to sprawdzić i często opiekunom pakietów nie przejmuje się tak długo, jak działa w odpowiedniej wersji / wydaniu. Dlatego sceptycznie podchodź do wersji zależności i kieruj się zdrowym rozsądkiem. Na przykład szeroko stosowane pakiety, takie jak Python i narzędzia GNU, nie będą zależeć od bardzo specyficznych wersji ich zależności, niezależnie od tego, co zawiera lista programów pakujących Debiana.
W każdym razie możesz spróbować zainstalować je w ten sposób
apt-get build-dep slrn=1.0.1-10
Jeśli to się powiedzie, spróbuj ponownie zbudować pakiet (KROK 2). Jeśli zawiedzie, konieczna jest dalsza praca. Zauważ, że debuild
patrzy na Zależności kompilacji w debian/control
pliku i możesz je zmienić w razie potrzeby. Porozmawiajmy teraz o tym. Oto zależności kompilacji dla slrn.
Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews
Alternatywą dla użycia apt-get build-dep
jest zainstalowanie ich ręcznie, wykonując
apt-get install debhelper libslang2-dev ...
Jeśli zaczniesz zmieniać te wartości w pliku sterującym, powinieneś przełączyć się na instalację ręczną, ponieważ apt-get build-dep
nie będzie to już właściwe.
Brak dostępnych pakietów nowszych wersji oprogramowania. Dostępne opcje to spakowanie nowszej wersji.
W wielu przypadkach można ponownie wykorzystać opakowanie z wcześniejszych wersji oprogramowania w połączeniu z nowszymi źródłami. Takie podejście może napotykać problemy, w szczególności łatki zastosowane do wcześniejszych wersji oprogramowania mogą nie mieć tutaj zastosowania, więc może być konieczne ponowne zsynchronizowanie ich ze źródłami. Format źródłowy 3.0 (kołdra), który staje się teraz standardem, wykorzystuje kołdrę, a łatki znajdują się w debian/patches
katalogu.
Jednak szczegółowe omówienie tych kwestii jest poza zakresem tego postu.