it-swarm.com.de

Wie installiere ich ein einzelnes Paket aus Debian-Tests oder instabil auf Stable?

Ich möchte ein einzelnes Paket (und seine Abhängigkeiten, aber nur in dem Maße, in dem diese in Wheezy nicht zufriedenstellend sind) von Debian Jessie auf meinem Wheezy-System installieren, ohne "alles und das Spülbecken" auf die Jessie-Versionen zu aktualisieren. Insbesondere möchte ich kpcli installieren, das in Jessie, aber nicht in Wheezy verfügbar ist.

Alles, was ich gefunden habe, deutet darauf hin, dass ich die Jessie-Repositorys zu meiner Quellenliste hinzufügen, das Fixieren so einstellen sollte, dass alles auf Hochtouren bleibt und nur das einzelne Paket von Jessie genommen wird, und es wird so ziemlich einfach zusammenpassen. Es passt jedoch nicht zu mir. Wenn ich /etc/apt.d/sources.list.d/jessie.list mit folgendem Inhalt erstelle:

deb ftp://ftp.debian.org/debian/ jessie main
deb-src ftp://ftp.debian.org/debian/ jessie main

und erstellen Sie dann /etc/apt/preferences.d/jessie mit:

Package: *
Pin: release a=wheezy
Pin-Priority: 1001

Package: kpcli
Pin: release a=jessie
Pin-Priority: 450

und Renn apt-get -u update gefolgt von apt-get -u install kpcli/jessie, dann erwarte ich, dass apt-get kpcli und vielleicht eine kleine Handvoll anderer Pakete von Jessie einholt und den Rest meines installierten Systems unberührt lässt. (Mein System ist eine vollständig aktuelle Installation von Wheezy.) Wenn ich alternativ die Pin-Priorität zu niedrig habe, würde ich erwarten, dass sie nichts bewirkt. Vielmehr möchte apt-get auf meinem System mehrere hundert Pakete aktualisieren.

Was genau wird benötigt, um nur dieses eine Paket einer Jessie-Version zu installieren, während der Rest meines Wheezy-Systems unberührt bleibt?

Beachten Sie, dass in diesem speziellen Fall die Software tatsächlich in Perl geschrieben ist, sodass keine Kompilierung zu Binärdateien oder Ähnlichem erforderlich ist. Es gibt jedoch eine Handvoll Perl-Modulabhängigkeiten. Eine mögliche Alternative wäre daher die Installation der .deb (manuell heruntergeladen) mit etwas, das nur (1) die Angabe eines einzelnen lokalen .deb-Archivs ermöglicht, das installiert werden soll, wie dpkg -i und (2) behandeln Abhängigkeiten auf intelligente Weise, was dpkg -i nicht. Bei all den Suchen, die ich mehrmals durchgeführt habe und keine einfach zu befolgende Anleitung dazu gefunden habe, wäre eine generische Lösung (eine, die auch für binäre, kompilierte Pakete funktioniert) großartig .

41
a CVn

Für jeden Eintrag (stabil, testend, instabil) haben Sie Pin-Priorität 500. Sie sollten Pin> 1000 nicht verwenden. Ich verwende 1001 nur, wenn ich etwas herabstufen möchte. Ich habe Test + Sid + experimentelle Einträge in /etc/apt/sources.list Und der folgenden /etc/apt/preferences Datei angegeben:

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 130

Der Wert 500 ist Standard für instabil. Versuchen wir also, iceweasel zu überprüfen:

# apt-cache policy iceweasel
iceweasel:
  Installed: (none)
  Candidate: 17.0.10esr-1~deb7u1
  Version table:
     26.0-1 0
        130 http://ftp.pl.debian.org/debian/ experimental/main AMD64 Packages
     24.2.0esr-1 0
        500 http://ftp.pl.debian.org/debian/ sid/main AMD64 Packages
     17.0.10esr-1~deb7u1 0
        900 http://ftp.pl.debian.org/debian/ testing/main AMD64 Packages

Wenn ich also versuchen würde, iceweasel zu installieren, würde es aus dem Testzweig heruntergeladen, da es die höchste Priorität hat.

Versuchen Sie, die Prioritäten zu ändern in:

Package: *
Pin: release a=wheezy
Pin-Priority: 900

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910
15

Es gibt tatsächlich eine Möglichkeit, dies zu tun, ohne Pinning/Prioritäten zu verwenden. Stattdessen können Sie angeben, von welcher Standardversion Sie Pakete installieren, die dann verwendet werden, sofern nicht anders angegeben, indem Sie den Zielversionsparameter verwenden. Dies funktioniert genauso, wenn Sie nur ausgewählte Pakete von z. Backports.

Ich werde dies für die Installation von Paketen von Stretch in Jessie zeigen, da dies die aktuellen Stable/Tests sind, aber es funktioniert genauso für die Installation von Jessie-Paketen in Wheezy, wie es ursprünglich gefragt wurde.

Fügen Sie zunächst Stretch als Repository hinzu, z. im /etc/apt/sources.list.d/stretch.list:

deb http://ftp.debian.org/debian stretch main

Um die Standardversion festzulegen, erstellen Sie eine Datei wie /etc/apt/apt.conf.d/default-release enthält:

APT::Default-Release "jessie";

(In Wheezy denke ich apt.conf.d existierte nicht und Sie müssten dieses Snippet in /etc/apt/apt.conf).

Dann ist die Installation eines Pakets aus dem Test so einfach wie aptitude -t stretch install kpcli ohne dass Sie sich Gedanken über das Festlegen von Prioritäten machen müssen.

Hinweis : @amc hat in den Kommentaren darauf hingewiesen, dass Sie apt anstelle von aptitude verwenden müssen, um "stable" wie Default-Release Anstatt von "jessie". Vielen Dank! (Natürlich können Sie mit dieser Einstellung auch aptitude verwenden.)

25
Florian Jacob

Pin: release a=wheezy sollte sein Pin: release n=wheezy, könnte sein.

Aus der Manpage :

Der folgende Datensatz weist allen Paketversionen, die zu einer Distribution gehören, deren Codename "jessie" lautet, eine hohe Priorität zu.

           Package: *
           Pin: release n=jessie
           Pin-Priority: 900

Das ist also richtig!

6
user65646