Wie kann ich neuere Softwareversionen als die von Debian bereitgestellten installieren?

26

Angenommen, ich möchte eine aktuellere Version der Software, als für meine aktuelle Version eines Betriebssystems verfügbar ist. Was kann ich tun?

Zu berücksichtigende Fälle:

  1. Es gibt halboffizielle / offizielle Quellen für zusätzliche Pakete, die für diese Version des Betriebssystems verfügbar sind. ZB backports.org für Debian oder PPAs für Ubuntu.
  2. Für diese Version des Betriebssystems sind keine neueren Versionen des Pakets verfügbar, für neuere Versionen des Betriebssystems sind jedoch neuere Versionen verfügbar. Dies ist der Standardfall für die Rückportierung.
  3. Es sind keine Paketversionen neuerer Versionen der Software verfügbar. Die verfügbaren Optionen umfassen das Packen der aktuelleren Version.

Per Kompilierung Lassen Sie sich eine Liste der kanonischen Q & A dies als ein Ort gedacht kanonische Antworten für die folgenden setzen. Antworten sollten wohl im Community-Wiki gemacht werden.

Faheem Mitha
quelle
Dies ist stark vertriebsspezifisch. Besser machen Sie es eine Frage pro Verteilung.
Gilles 'SO- hör auf böse zu sein'
2
@Gilles Die Frage ist nicht vertriebsspezifisch. Ich denke, es wäre besser, eine Frage mit Antworten für verschiedene Distributionen zu haben.
Faheem Mitha
Ein Beispiel dafür, was funktionierte und was nicht: Für Debian 8 wollte ich MySQL 5.6. (Aber normalerweise ist MySQL 5.5 nur für Debian 8 installierbar. Ich brauchte 5.6, um mit anderen Dingen, die ich tat, vergleichbar zu sein.) Ich habe versucht, den 5.6-Backport zu installieren, aber er war defekt. Eine Art doppelte Datei wird geladen Fehlermeldung. Ich habe es aber dann gemeldet, was zu tun ist? Die Lösung: Ich habe festgestellt, dass Sie MySQL 5.6 speziell für Debian 8 direkt von der MySQL-Site herunterladen können. Das hat funktioniert, ABER ... lesen Sie unbedingt den Abhilfe-Kommentar am Ende von [this] ( dev.mysql.com/doc/refman/5.6/en/linux-i
Elliptical view

Antworten:

33

(Wenn Sie Fragen / Kommentare zu dieser Antwort haben, fügen Sie bitte einen Kommentar hinzu. Wenn Sie genügend Repräsentanten haben, können Sie mich im Chat anpingen.)

Direktes Installieren von Binärpaketen von einer neueren Version von Debian - nicht die Antwort.

Angenommen, Sie führen eine Version einer Debian-basierten Distribution aus. Sie möchten eine aktuellere Version eines Pakets, als Ihnen zur Verfügung steht. Das erste, was jeder Anfänger versucht, um das Binärpaket direkt auf Ihrer Debian-Version zu installieren. Dies funktioniert möglicherweise, je nachdem, welche Version Sie verwenden und wie viel neuer das Paket ist. Im Allgemeinen wird dieses Verfahren nicht gut funktionieren.

Stellen Sie sich zum Beispiel den Fall vor, in dem versucht wird, ein Binärpaket von testing / unstable direkt auf stable zu installieren. Dies wird höchstwahrscheinlich nicht gut gehen, es sei denn, Testing / Unstable ist in diesem Moment sehr nahe an Stable. Der Grund liegt in der Natur einer Linux-basierten Binärdistribution wie Debian. Solche Betriebssysteme hängen stark von gemeinsam genutzten Bibliotheken ab, und diese Abhängigkeiten sind oft sehr stark versionsabhängig. oft viel mehr als nötig. Debian hat derzeit keine gute Möglichkeit, Versionsabhängigkeiten "eng" zu machen - eine Kurzform, die besagt, dass die Versionsabhängigkeit genau so restriktiv ist wie nötig.

Was bedeutet das für den Benutzer? Angenommen, Sie versuchen beispielsweise, slrnDebian Unstable auf Debian Stable zu installieren . Wie würde das aussehen?

# 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.

Trotz des Fehlers von aptgibt es hier keine kaputten Pakete. Also, was ist schief gelaufen? Das Problem ist, dass die Version, mit der libc6die Unstable slrnkompiliert wurde, anders ist (und eine höhere Versionsnummer hat) als die Version, die auf Debian Stable verfügbar ist. ( libc6ist die GNU C-Bibliothek. Die C-Bibliothek ist für jedes Unix-ähnliche Betriebssystem von zentraler Bedeutung, und die GNU C-Bibliothek ist die Version, die Linux-basierte Betriebssysteme im Allgemeinen verwenden.)

Daher slrnbenötigt der Unstable eine Version mit einer höheren Nummer libc6als für den Stable verfügbar ist. Beachten Sie, dass ein Paket, das mit einer höheren Version der Bibliothek kompiliert wurde, nicht unbedingt eine höhere Version dieser Bibliothek erfordert. Dies ist jedoch häufig der Fall.

Die Syntax

apt-get install slrn/unstable

bedeutet: benutze das Unstable slrnaber für alle anderen Pakete nur die Versionen von Stable. Genauer gesagt werden Prioritätsnummern verwendet. Siehe man apt_preferencesfür weitere Einzelheiten.

Das kann man auch

apt-get install -t unstable slrn

Dies funktioniert mit größerer Wahrscheinlichkeit, aber im Allgemeinen möchten Sie dies nicht tun. Warum?

Das heißt: Behandeln Sie alle Pakete im Stall vorübergehend gleichberechtigt mit den Paketen im Stall. Daher werden die slrnAbhängigkeiten der Unstable von Unstable gezogen, wenn sie eine höhere Versionsnummer haben, und dies wird im Allgemeinen der Fall sein. Dies schließt im Allgemeinen die GNU C-Bibliothek aus Gründen ein, die bereits erläutert wurden. Nun, dieser Ansatz wird im Allgemeinen "erfolgreich" sein, da die Abhängigkeiten per Definition erfüllt sind (Unstable slrnhat Abhängigkeiten, die in Unstable erfüllt sind), aber Sie erhalten eine Mischung von Paketen, die plötzlich gezwungen sind, mit Versionen von Bibliotheken zu laufen anders als für was sie gebaut wurden. Dies wird wahrscheinlich nicht gut enden.

Die Antwort lautet ... BACKPORTS!

Also, was ist der richtige Weg, um dies zu tun? Es geht darum, die Debian-Quellen neuerer Versionen auf Ihrem System wiederherzustellen, die im Volksmund als "Backporting" bekannt sind. Betrachten Sie die folgenden Fälle:

Es gibt halboffizielle / offizielle Quellen für zusätzliche Pakete, die für diese Version von Debian verfügbar sind.

Der erste Ort, an dem Sie nachsehen müssen, ist Debian Backports , die offizielle Site für Debian-Backports.

Für ein konkretes Beispiel:

Fügen Sie die entsprechende Backports-Zeile für Ihr Release und Update hinzu, um die neuen Pakete zu finden, und installieren Sie dann explizit etwas aus Backports (da Backports standardmäßig deaktiviert sind).

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

Dies wird die neueste stabile Version von git erhalten, die nützliche neuere Funktionen als die stabile Version von stretch enthält (zB 'include', mit der Sie mehrere Konfigurationsdateien kombinieren oder Ihren Benutzernamen für ~ / work / projects / vs ~ / personal / ändern können). Projekte /).

Ein weiterer Punkt, den man sich ansehen sollte, sind die verschiedenen PPAs von Ubuntu-Betreuern. Sie können nach "Paketname PPA" suchen.

Für diese Version des Betriebssystems sind keine neueren Versionen des Pakets verfügbar, für neuere Versionen / Releases des Betriebssystems sind jedoch neuere Versionen verfügbar. Dies ist der Standardfall für die Rückportierung.

Backporting bedeutet, dass Sie die Debian-Quellen von einer späteren Version von Debian auf der Version, die Sie ausführen, neu erstellen. Dieser Vorgang kann je nach Verpackung einfach oder kompliziert und schwierig sein. Hier finden Sie eine Übersicht über die Vorgehensweise.

Ein kurzes Backporting-Tutorial für Anfänger

Der Vollständigkeit halber gehe ich davon aus, dass Sie den aktuellen Debian-Stall betreiben, der momentan nicht ganz so gut ist. Ich werde das Paket slrnals Beispiel verwenden.

Beachten Sie zunächst, dass sich alle Debian-Paketdateien im debian/Unterverzeichnis des Quellverzeichnisses befinden.

Im ersten Schritt prüfen Sie, ob eine aktuellere Version verfügbar ist. Sie können dies mit tun 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

Wir möchten zurückportieren 1.0.1-10.

SCHRITT 1:

NB: Stellen Sie sicher, dass die deb-srcZeilen für die Quellversion, die Sie herunterladen möchten, in Ihrer angezeigt werden /etc/apt/sources.list. Wenn Sie beispielsweise die unstable-Version von herunterladen möchten slrn, benötigen Sie die deb-srcZeile für unstable, sonst funktioniert sie nicht. Beachten Sie, dass Sie debzum Herunterladen der Quellen keine entsprechenden Zeilen benötigen , apt-cache policydiese Informationen jedoch verwenden. Wenn Sie also nicht über die entsprechenden debZeilen verfügen , apt-cache policywerden Ihnen die entsprechenden Versionen nicht angezeigt. Wenn Sie die debZeilen haben, vergessen Sie nicht, die neueren Versionen mit einem Eintrag in /etc/apt/preferencesoder ähnlichem zu fixieren. Ein Eintrag /etc/apt/preferenceswie dieser (für unstable) funktioniert beispielsweise.

Package: *
Pin: release a=unstable
Pin-Priority: 50

Wenn Sie Zeilen hinzufügen /etc/apt/sources.list, vergessen Sie nicht, danach zu laufen apt-get update.

Laden Sie die Quellen für herunter slrn. Ein guter Ort ist /usr/local/src/slrn.

apt-get source slrn=1.0.1-10

SCHRITT 2:

Ändern Sie die Versionsnummer leicht, um Ihren Backport von der Upstream-Version zu unterscheiden. Ausführen dch -i, wodurch der debian/changelogDatei automatisch ein Eintrag hinzugefügt wird . Ändern Sie dann den Eintrag, um beispielsweise so auszusehen.

slrn (1.0.1-10.username) UNRELEASED; urgency=low

  * Backport to wheezy.

 -- User <user@domain>  Sun, 02 Feb 2014 23:54:13 +0530

SCHRITT 3:

Versuchen Sie, die Quellen zu erstellen. Wenn die für den Build erforderlichen Pakete nicht verfügbar sind, schlägt der Versuch fehl. Wechseln Sie in das Quellverzeichnis. Verwenden Sie debuildaus der devtoolsPackung.

cd slrn-1.0.1/
debuild -uc -us

Wenn die Build-Abhängigkeiten erfüllt sind, erstellen und produzieren die Quellen einige Debs auf der Ebene oberhalb des Quellverzeichnisses. in diesem Fall /usr/local/src/slrn.

SCHRITT 4:

Angenommen, die Build-Abhängigkeiten sind nicht erfüllt. Dann müssen Sie versuchen, die Build-Abhängigkeiten zu installieren. Dies funktioniert möglicherweise nicht, da die Abhängigkeiten für Ihre Version möglicherweise nicht verfügbar sind oder, falls verfügbar, möglicherweise nicht in der richtigen Version verfügbar sind.

NB: Es ist leider nicht ungewöhnlich, dass Debian-Pakete Versionen von Build-Abhängigkeiten erfordern, die höher als nötig sind. Es gibt keine automatisierte Möglichkeit in Debian, dies zu überprüfen, und oft ist es Paketbetreuern egal, solange es auf der entsprechenden Version / Release funktioniert. Seien Sie daher skeptisch gegenüber Abhängigkeitsversionen und verwenden Sie den gesunden Menschenverstand. Beispielsweise hängen weit verbreitete Pakete wie Python und die GNU-Tools nicht von sehr spezifischen Versionen ihrer Abhängigkeiten ab, unabhängig davon, was der Debian-Packager auflistet.

In jedem Fall können Sie versuchen, sie zu installieren

apt-get build-dep slrn=1.0.1-10

Wenn dies erfolgreich ist, versuchen Sie, das Paket erneut zu erstellen (SCHRITT 2). Wenn dies fehlschlägt, sind weitere Arbeiten erforderlich. Beachten Sie, dass Sie debuildsich die Build-Abhängigkeiten in der debian/controlDatei ansehen und diese bei Bedarf ändern können. Lassen Sie uns jetzt darüber sprechen. Hier sind die Build-Abhängigkeiten für 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

Eine Alternative zur Verwendung apt-get build-depbesteht darin, diese manuell zu installieren

apt-get install debhelper libslang2-dev ...

Wenn Sie anfangen, diese Werte in der Steuerdatei zu ändern, sollten Sie zu einer manuellen Installation wechseln, da dann apt-get build-depnicht mehr das Richtige getan wird.

Es sind keine Paketversionen neuerer Versionen der Software verfügbar. Die verfügbaren Optionen umfassen das Packen der aktuelleren Version.

In vielen Fällen kann die Verpackung aus früheren Versionen der Software in Verbindung mit neueren Quellen wiederverwendet werden. Dieser Ansatz kann zu Problemen führen, insbesondere wenn Patches, die auf frühere Versionen der Software angewendet wurden, hier möglicherweise nicht angewendet werden. Daher müssen sie möglicherweise mit den Quellen erneut synchronisiert werden. Das jetzt zum Standard gewordene Quellformat 3.0 (Quilt) verwendet Quilt, und Patches befinden sich im debian/patchesVerzeichnis.

Eine ausführliche Erörterung dieser Themen ist in diesem Beitrag jedoch nicht vorgesehen.

Faheem Mitha
quelle
Dies ist eine allgemeine Distribution (nur, dass die Code-Repositores für neuere Dinge anders aufgerufen werden können, oder Sie müssen Dinge von speziellen Orten abrufen). Überprüfen Sie die Anleitungen Ihrer Distribution.
Vonbrand
2

Eine Möglichkeit, die nicht nur in Debian immer funktioniert, besteht darin, die erforderliche Software selbst zu kompilieren. (Ich mache das seit Jahren auf Debian, sowohl als ich eine neuere Version brauchte, die verfügbar war, als auch als die Software überhaupt nicht zur Verfügung gestellt wurde).

Ich speichere lokal kompilierte Pakete in /use/localusing stow, wodurch ich alle Dateien, die sich auf ein Paket beziehen, in einem Unterverzeichnisbaum speichern und dann Symlinks zu diesem Baum erstellen kann. Das macht das Verwalten kompilierter Pakete einfach: Installierte Dateien kollidieren nicht mit von Debian bereitgestellten Dateien, und ich kann ein Paket mit einem Befehl entfernen.

Die Schritte zum Kompilieren und Installieren eines Pakets some_softwaresind normalerweise eine Variante der folgenden:

  1. .tarDatei etc. herunterladen in /usr/local/src/.

  2. Erstellen Sie eine Datei /usr/local/packages/some_software, die beschreibt, wo ich die Software heruntergeladen habe, was sie tut, welche Version sie hat und welche Schritte ich ausführen musste, um sie zu kompilieren (siehe unten).

  3. Entpacke den Inhalt der .tarDatei in /usr/local/tmp/some_software.

  4. Wenn Sie alternativ aus einem Repository kompilieren, überprüfen Sie das Repository in einem geeigneten Unterverzeichnis (z. B. /usr/local/git/some_software) und kompilieren Sie es dort.

  5. cdin dieses Verzeichnis schauen README, INSTALLetc.

  6. In den meisten Fällen enthält configuredas Paket ein Autotools-Skript . Rufen Sie mit auf, ./configure --prefix /usr/local/stow/some_software-versiondamit Dateien in diesem Unterverzeichnis installiert werden. Ansonsten lesen Sie Makefileund finden Sie heraus, wie Sie den Pfad für die installierten Dateien festlegen.

  7. Kompilieren mit make.

  8. Installieren Sie mit make install.

  9. cd /usr/local/stow, dann stow some_software-version

  10. Testen Sie, ob es funktioniert.

Oft funktioniert das Kompilieren nicht beim ersten Versuch: Das Paket benötigt möglicherweise Bibliotheken und die entsprechenden Include-Dateien, daher muss man die richtigen ...-devPakete von Debian installieren . Oder gccsich über Dinge beschweren, über die sich eine andere Version, über gccdie der Autor des verwendeten Pakets nicht beschwert, nicht beschwert. Manchmal muss man also Code lesen und reparieren, aber das kommt nicht allzu oft vor.

dirkt
quelle
Die Absicht dieser Frage war, obwohl dies vielleicht nicht klar war, zu beschreiben, wie Softwarepakete für Debian installiert werden. Vielleicht sollte ich die Frage klarer machen. Erstellt stowDebian-Pakete? Auf der Manpage sieht es nicht so aus.
Faheem Mitha
@FaheemMitha Stow kennt Debian-Pakete nicht. Es werden nur symbolische Links von einer Reihe separater Installationsverzeichnisse zu einem einzelnen Verzeichnis verwaltet.
Kusalananda
@FaheemMitha: Wenn Sie selbst kompilierte Software in ein Debian-Paket verwandeln möchten , müssen Sie diese wie einen Debian-Paketbetreuer selbst verpacken. Aber das ist zu viel Mühe, wenn Sie der einzige Benutzer sind. Die Installation /usr/localist erheblich einfacher und stowhilft bei der Verwaltung der dort gespeicherten Dateien. Oder anders ausgedrückt: Software muss nicht in einem Debian-Paket enthalten sein, um es unter Debian zu verwenden.
Dirkt
Es gibt einen großen Vorteil, Software als Debian-Paket zu verpacken, auch wenn sie nur lokal verwendet wird: Wenn Sie die Abhängigkeiten richtig beschreiben, wird durch die Installation eines Pakets sichergestellt, dass die Abhängigkeiten installiert bleiben ...
Stephen Kitt
@StephenKitt: Wenn die Kursverpackungssoftware richtig als Debian-Paket ist, ist das die überlegene Lösung. Der Nachteil ist, dass man die Zeit investieren muss, um es richtig zu verpacken ...
dirkt