Załóżmy, że chcę nowszej wersji oprogramowania niż dostępna dla mojej bieżącej wersji systemu operacyjnego, co mogę zrobić?
Sprawy do rozważenia:
- Istnieją półoficjalne / oficjalne źródła dodatkowych pakietów dostępnych dla tej wersji systemu operacyjnego. Np. Backports.org dla Debiana lub PPA dla Ubuntu.
- Nie ma już najnowszych wersji pakietu dostępnych dla tej wersji systemu operacyjnego, ale są nowsze wersje dostępne dla nowszych wersji systemu operacyjnego. Jest to standardowy przypadek backportowania.
- Brak dostępnych pakietów nowszych wersji oprogramowania. Dostępne opcje to spakowanie nowszej wersji.
Per Let's skompiluj listę kanonicznych pytań i odpowiedzi, ponieważ jest to miejsce, w którym można umieścić kanoniczne odpowiedzi na następujące pytania. Odpowiedzi powinny być prawdopodobnie wiki społeczności.
Odpowiedzi:
(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?Pomimo błędu spowodowanego przez
apt
, nie ma tutaj uszkodzonych pakietów. Co poszło nie tak? Problem polega na tym, że wersja, zlibc6
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 numerzelibc6
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
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. Zobaczman apt_preferences
szczegóły.Można też zrobić
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 (niestabilneslrn
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:
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).
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”.
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
.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
, potrzebujeszdeb-src
linii dla niestabilnej, inaczej nie będzie działać. Zauważ, że nie potrzebujesz odpowiednichdeb
linii do pobrania źródeł, chociażapt-cache policy
używa tych informacji, więc jeśli nie masz odpowiednichdeb
linii,apt-cache policy
nie pokaże ci odpowiednich wersji. Jeśli maszdeb
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ł.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
.KROK 2:
Zmień nieznacznie numer wersji, aby odróżnić swój backport od wcześniejszej wersji. Uruchom
dch -i
, który automatycznie doda wpis dodebian/changelog
pliku. Następnie zmień wpis, aby na przykład wyglądał tak: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
zdevtools
paczki.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
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 wdebian/control
pliku i możesz je zmienić w razie potrzeby. Porozmawiajmy teraz o tym. Oto zależności kompilacji dla slrn.Alternatywą dla użycia
apt-get build-dep
jest zainstalowanie ich ręcznie, wykonującJeś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.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.
źródło
Jednym ze sposobów, który zawsze działa, nie tylko w Debianie, jest samodzielne skompilowanie niezbędnego oprogramowania. (Robię to od lat na Debianie, zarówno wtedy, gdy potrzebowałem nowszej dostępnej wersji, jak i gdy oprogramowanie w ogóle nie było dostarczane).
Przechowywać lokalnie skompilowane pakiety w
/use/local
użyciustow
, co pozwala mi zachować wszystkie pliki związane z pakietem w podkatalogu drzewa, a następnie dokonać dowiązania do tego drzewa. To sprawia, że zarządzanie skompilowanymi pakietami jest łatwe: zainstalowane pliki nie kolidują z plikami dostarczonymi przez Debiana i mogę usunąć pakiet za pomocą jednego polecenia.Powiedzmy
some_software
, że kroki, aby skompilować i zainstalować pakiet , są zwykle następującymi wariantami:Pobierz
.tar
plik itp/usr/local/src/
. Do.Utwórz plik,
/usr/local/packages/some_software
który opisuje, gdzie pobrałem oprogramowanie, co robi, jaka jest wersja, i który zawiera uwagi, co musiałem zrobić, aby go skompilować (patrz poniżej).Rozpakuj zawartość
.tar
pliku do/usr/local/tmp/some_software
.Alternatywnie, jeśli kompilujesz z repozytorium, sprawdź repozytorium w odpowiednim podkatalogu (np.
/usr/local/git/some_software
) I tam skompiluj,cd
do tego katalogu, spójrzREADME
,INSTALL
etc.W większości przypadków do
configure
pakietu dołączony jest skrypt autotools . Wywołaj za pomocą,./configure --prefix /usr/local/stow/some_software-version
aby pliki zostały zainstalowane w tym podkatalogu. W przeciwnym razie przeczytajMakefile
i dowiedz się, jak ustawić ścieżkę dla zainstalowanych plików.Kompiluj z
make
.Zainstaluj za pomocą
make install
.cd /usr/local/stow
, następniestow some_software-version
Sprawdź, czy to działa.
Często kompilacja nie działa przy pierwszej próbie: pakiet może wymagać bibliotek i odpowiednich plików dołączanych, więc trzeba zainstalować prawidłowe
...-dev
pakiety z Debiana. Lubgcc
może narzekać na rzeczy, nagcc
które nie narzeka inna wersja, której używał autor pakietu. Czasami więc trzeba czytać i naprawiać kod, ale to nie zdarza się zbyt często.źródło
stow
tworzy pakiety Debiana? Na stronie podręcznika tak to nie wygląda./usr/local
jest znacznie prostsze istow
pomaga zarządzać przechowywanymi tam plikami. Lub inaczej: oprogramowanie nie musi znajdować się w pakiecie Debiana, aby można go było używać w systemie Debian.