Jak mogę zainstalować nowsze wersje oprogramowania niż to, co zapewnia Debian?

26

Załóżmy, że chcę nowszej wersji oprogramowania niż dostępna dla mojej bieżącej wersji systemu operacyjnego, co mogę zrobić?

Sprawy do rozważenia:

  1. 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.
  2. 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.
  3. 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.

Faheem Mitha
źródło
Jest to ściśle związane z dystrybucją. Lepiej spraw, aby było to jedno pytanie na dystrybucję.
Gilles „SO- przestań być zły”
2
@Gilles Pytanie nie jest specyficzne dla dystrybucji. Myślę, że lepiej byłoby mieć jedno pytanie z odpowiedziami dla różnych dystrybucji.
Faheem Mitha
Jeden przykład tego, co działało, a co nie działało: Dla Debiana 8 chciałem MySQL 5.6. (Ale normalnie MySQL 5.5 jest instalowalny tylko dla Debiana 8. Potrzebowałem 5.6 do porównania z innymi rzeczami, które robiłem.) Próbowałem zainstalować backport 5.6, ale był zepsuty. Komunikat o błędzie wczytywania jakiegoś duplikatu pliku. Zgłosiłem to, ale co potem zrobić? Rozwiązanie: Odkryłem, że możesz pobrać MySQL 5.6 specjalnie dla Debian 8 bezpośrednio ze strony MySQL. To zadziałało, ALE ... przeczytaj komentarz OBEJŚCIE
Eliptyczny widok

Odpowiedzi:

33

(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. slrnNiestabilną 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 libc6którą slrnzostała skompilowana niestabilna wersja , jest inna (i ma wyższy numer wersji) niż wersja dostępna w stabilnej wersji Debiana. ( libc6jest 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 slrnwymaga wersji o wyższym numerze libc6niż 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, slrnale dla wszystkich innych pakietów używaj tylko wersji ze stabilnej. Mówiąc dokładniej, używa liczb priorytetowych. Zobacz man apt_preferencesszczegół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ą slrnzależ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 slrnmają 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 slrnjako 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-srcwiersze 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-srclinii dla niestabilnej, inaczej nie będzie działać. Zauważ, że nie potrzebujesz odpowiednich deblinii do pobrania źródeł, chociaż apt-cache policyużywa tych informacji, więc jeśli nie masz odpowiednich deblinii, apt-cache policynie pokaże ci odpowiednich wersji. Jeśli masz debwiersze, nie zapomnij przypiąć nowszych wersji za pomocą wpisu /etc/apt/preferenceslub podobnego. Na /etc/apt/preferencesprzykł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 updatepóź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/changelogpliku. 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 debuildz devtoolspaczki.

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 debuildpatrzy na Zależności kompilacji w debian/controlpliku 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-depjest 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-depnie 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/patcheskatalogu.

Jednak szczegółowe omówienie tych kwestii jest poza zakresem tego postu.

Faheem Mitha
źródło
Jest to naprawdę ogólne rozpowszechnianie (tylko to, że repozytoria kodu dla nowszych rzeczy mogą być nazywane inaczej, inaczej będziesz musiał pobrać rzeczy ze specjalnych miejsc). Sprawdź przewodniki swojej dystrybucji.
vonbrand
2

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/localużyciu stow, 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:

  1. Pobierz .tarplik itp /usr/local/src/. Do.

  2. Utwórz plik, /usr/local/packages/some_softwarektó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).

  3. Rozpakuj zawartość .tarpliku do /usr/local/tmp/some_software.

  4. Alternatywnie, jeśli kompilujesz z repozytorium, sprawdź repozytorium w odpowiednim podkatalogu (np. /usr/local/git/some_software) I tam skompiluj,

  5. cddo tego katalogu, spójrz README, INSTALLetc.

  6. W większości przypadków do configurepakietu dołączony jest skrypt autotools . Wywołaj za pomocą, ./configure --prefix /usr/local/stow/some_software-versionaby pliki zostały zainstalowane w tym podkatalogu. W przeciwnym razie przeczytaj Makefilei dowiedz się, jak ustawić ścieżkę dla zainstalowanych plików.

  7. Kompiluj z make.

  8. Zainstaluj za pomocą make install.

  9. cd /usr/local/stow, następnie stow some_software-version

  10. 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 ...-devpakiety z Debiana. Lub gccmoże narzekać na rzeczy, na gccktó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.

reż
źródło
Celem tego pytania, choć być może nie było to jasne, było opisanie sposobu instalowania pakietów oprogramowania dla Debiana. Może powinienem wyjaśnić pytanie. Czy stowtworzy pakiety Debiana? Na stronie podręcznika tak to nie wygląda.
Faheem Mitha
@FaheemMitha Stow nie wie o pakietach Debiana. Zarządza tylko dowiązaniami symbolicznymi z zestawu oddzielnych katalogów instalacyjnych do jednego katalogu.
Kusalananda
@FaheemMitha: Jeśli chcesz zmienić samodzielnie skompilowane oprogramowanie w pakiet Debiana , musisz sam go spakować, tak jak opiekun pakietów Debiana. Ale to zbyt duży problem, jeśli będziesz jedynym użytkownikiem, instalowanie go /usr/localjest znacznie prostsze i stowpomaga 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.
bezpośrednio
Jedną wielką zaletą jest pakowanie oprogramowania jako pakietu Debiana, nawet do użytku lokalnego: jeśli poprawnie opisasz zależności, zainstalowanie pakietu zapewni, że zależności pozostaną zainstalowane ...
Stephen Kitt
@StephenKitt: Jeśli oprogramowanie do pakowania kursów poprawnie jako pakiet Debian jest najlepszym rozwiązaniem. Minusem jest to, że trzeba zainwestować czas, aby odpowiednio go zapakować ...
2017