(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?
# 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 apt
gibt es hier keine kaputten Pakete. Also, was ist schief gelaufen? Das Problem ist, dass die Version, mit der libc6
die Unstable slrn
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 Nummer libc6
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
apt-get install slrn/unstable
bedeutet: benutze das Unstable slrn
aber für alle anderen Pakete nur die Versionen von Stable. Genauer gesagt werden Prioritätsnummern verwendet. Siehe man apt_preferences
fü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 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 (Unstable slrn
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:
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 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
.
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-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öchten slrn
, benötigen Sie die deb-src
Zeile für unstable, sonst funktioniert sie nicht. Beachten Sie, dass Sie deb
zum Herunterladen der Quellen keine entsprechenden Zeilen benötigen , apt-cache policy
diese Informationen jedoch verwenden. Wenn Sie also nicht über die entsprechenden deb
Zeilen verfügen , apt-cache policy
werden Ihnen die entsprechenden Versionen nicht angezeigt. Wenn Sie die deb
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.
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/changelog
Datei 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 debuild
aus der devtools
Packung.
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 debuild
sich die Build-Abhängigkeiten in der debian/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.
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-dep
besteht 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-dep
nicht 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/patches
Verzeichnis.
Eine ausführliche Erörterung dieser Themen ist in diesem Beitrag jedoch nicht vorgesehen.