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:
- 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.
- 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.
- 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.
Antworten:
(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,
slrn
Debian Unstable auf Debian Stable zu installieren . Wie würde das aussehen?Trotz des Fehlers von
apt
gibt es hier keine kaputten Pakete. Also, was ist schief gelaufen? Das Problem ist, dass die Version, mit derlibc6
die Unstableslrn
kompiliert wurde, anders ist (und eine höhere Versionsnummer hat) als die Version, die auf Debian Stable verfügbar ist. (libc6
ist 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
slrn
benötigt der Unstable eine Version mit einer höheren Nummerlibc6
als 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
bedeutet: benutze das Unstable
slrn
aber für alle anderen Pakete nur die Versionen von Stable. Genauer gesagt werden Prioritätsnummern verwendet. Sieheman apt_preferences
für weitere Einzelheiten.Das kann man auch
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
slrn
Abhä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 (Unstableslrn
hat 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:
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).
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.
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
slrn
als 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
.Wir möchten zurückportieren
1.0.1-10
.SCHRITT 1:
NB: Stellen Sie sicher, dass die
deb-src
Zeilen 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öchtenslrn
, benötigen Sie diedeb-src
Zeile für unstable, sonst funktioniert sie nicht. Beachten Sie, dass Siedeb
zum Herunterladen der Quellen keine entsprechenden Zeilen benötigen ,apt-cache policy
diese Informationen jedoch verwenden. Wenn Sie also nicht über die entsprechendendeb
Zeilen verfügen ,apt-cache policy
werden Ihnen die entsprechenden Versionen nicht angezeigt. Wenn Sie diedeb
Zeilen haben, vergessen Sie nicht, die neueren Versionen mit einem Eintrag in/etc/apt/preferences
oder ähnlichem zu fixieren. Ein Eintrag/etc/apt/preferences
wie dieser (für unstable) funktioniert beispielsweise.Wenn Sie Zeilen hinzufügen
/etc/apt/sources.list
, vergessen Sie nicht, danach zu laufenapt-get update
.Laden Sie die Quellen für herunter
slrn
. Ein guter Ort ist/usr/local/src/slrn
.SCHRITT 2:
Ändern Sie die Versionsnummer leicht, um Ihren Backport von der Upstream-Version zu unterscheiden. Ausführen
dch -i
, wodurch derdebian/changelog
Datei automatisch ein Eintrag hinzugefügt wird . Ändern Sie dann den Eintrag, um beispielsweise so auszusehen.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
debuild
aus derdevtools
Packung.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
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
debuild
sich die Build-Abhängigkeiten in derdebian/control
Datei ansehen und diese bei Bedarf ändern können. Lassen Sie uns jetzt darüber sprechen. Hier sind die Build-Abhängigkeiten für slrn.Eine Alternative zur Verwendung
apt-get build-dep
besteht darin, diese manuell zu installierenWenn Sie anfangen, diese Werte in der Steuerdatei zu ändern, sollten Sie zu einer manuellen Installation wechseln, da dann
apt-get build-dep
nicht mehr das Richtige getan wird.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/patches
Verzeichnis.Eine ausführliche Erörterung dieser Themen ist in diesem Beitrag jedoch nicht vorgesehen.
quelle
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/local
usingstow
, 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_software
sind normalerweise eine Variante der folgenden:.tar
Datei etc. herunterladen in/usr/local/src/
.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).Entpacke den Inhalt der
.tar
Datei in/usr/local/tmp/some_software
.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.cd
in dieses Verzeichnis schauenREADME
,INSTALL
etc.In den meisten Fällen enthält
configure
das Paket ein Autotools-Skript . Rufen Sie mit auf,./configure --prefix /usr/local/stow/some_software-version
damit Dateien in diesem Unterverzeichnis installiert werden. Ansonsten lesen SieMakefile
und finden Sie heraus, wie Sie den Pfad für die installierten Dateien festlegen.Kompilieren mit
make
.Installieren Sie mit
make install
.cd /usr/local/stow
, dannstow some_software-version
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
...-dev
Pakete von Debian installieren . Odergcc
sich über Dinge beschweren, über die sich eine andere Version, übergcc
die der Autor des verwendeten Pakets nicht beschwert, nicht beschwert. Manchmal muss man also Code lesen und reparieren, aber das kommt nicht allzu oft vor.quelle
stow
Debian-Pakete? Auf der Manpage sieht es nicht so aus./usr/local
ist erheblich einfacher undstow
hilft 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.