Wie installiere ich ein einzelnes Paket von Debian Testing oder Unstable auf Stable?

41

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

Alles, was ich gefunden habe, deutet darauf hin, dass ich die Jessie-Repositorys zu meiner Quellenliste hinzufügen, das Fixieren einstellen sollte, um alles auf Trab zu halten und nur das einzelne Paket von Jessie zu nehmen. 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 dann erstelle /etc/apt/preferences.d/jessie mit:

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

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

und laufen apt-get -u updateanschließend apt-get -u install kpcli/jessie, dann erwarte ich , dass apt-get zu ziehen in kpcli und vielleicht eine kleine Handvoll anderer Pakete von Jessie, und lassen Sie den Rest meiner installierten System unberührt. (Bei meinem System handelt es sich um eine vollständig aktualisierte Installation von Wheezy.) Wenn die PIN-Priorität zu niedrig ist, kann ich auch davon ausgehen, dass keine Änderungen vorgenommen werden. Vielmehr möchte apt-get auf meinem System mehrere hundert Pakete upgraden.

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 in binär oder ähnliches erforderlich ist. Es gibt jedoch eine Handvoll Perl-Modulabhängigkeiten. Daher besteht eine mögliche Alternative darin, die .deb-Datei (manuell heruntergeladen) mit etwas zu installieren, das nur (1) die Angabe eines einzigen zu installierenden lokalen .deb-Archivs ermöglicht dpkg -i, und (2) Abhängigkeiten auf intelligente Weise behandelt , welche Ebene dpkg -inicht. Bei all den Suchen, die ich mehrmals durchgeführt habe und bei denen ich keine einfach zu befolgende Anleitung dafür gefunden habe, wäre eine generische Lösung (eine, die auch für binäre, kompilierte Pakete funktioniert) großartig .

ein CVn
quelle
4
Die übliche Art, dies zu handhaben, ist das Backportieren - das Neuerstellen des Pakets aus den Debian-Quellen auf Wheezy. Das Paket, das Sie verwenden, scheint Perl zu sein (oder hängt zumindest davon ab), daher ist das Backportieren wahrscheinlich nicht schwierig. Wenn Sie weitere Informationen wünschen, sagen Sie dies bitte. Ich könnte wahrscheinlich eine Komplettlösung anbieten, wenn Sie sie wirklich brauchen.
Faheem Mitha

Antworten:

15

Für jeden Eintrag (stabil, testend, instabil) haben Sie eine PIN-Priorität von 500. Sie sollten keine PIN> 1000 verwenden. Ich verwende 1001 nur, wenn ich ein Downgrade durchführen möchte. Ich habe Testing + Sid + experimentelle Einträge in /etc/apt/sources.listund die folgende /etc/apt/preferencesDatei 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 die Standardeinstellung für instabil. Also, lasst uns versuchen, Ice Wiesel 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 vom Testzweig heruntergeladen, da es die höchste Priorität hat.

Versuchen Sie, die Prioritäten zu ändern:

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

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910
Mikhail Morfikov
quelle
sudo apt-get -u install kpcli/jessiegibts mir noch 316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.mit deinen vorgeschlagenen prioritäten. Wenn ich das tue apt-cache policy perl(eines der Pakete, die aktualisiert werden sollen), wird 5.18.1-5 als Kandidat für Priorität 500 angezeigt und 5.14.2-21 + deb7u1 ebenfalls für Priorität 500 installiert. Es sieht fast so aus, aus welchem ​​Grund auch immer. Apt nimmt nicht die Prioritäten ...
ein CVn
OK, ich habe etwas. Sieht aus wie der Trick zu verwenden war Package: kpcli*(anstatt Package: kpcli) und dann ein Package: * Pin: release o=Debian Pin-Priority: -10am Ende. Dann gibt es natürlich harte Abhängigkeiten, die dazu führen, dass Perl-Versionen nur in Jessie verfügbar sind, das wiederum eine neuere libc6 benötigt! Ich bin ehrlich gesagt nicht im Begriff, diesen Weg zu gehen, aber das hat mir zumindest das Ergebnis gebracht, nach dem ich gesucht habe. Danke!
ein Lebenslauf vom
25

Es gibt tatsächlich eine Möglichkeit, dies zu tun, ohne überhaupt Pinning / Prioritäten zu verwenden. Stattdessen können Sie angeben, von welchem ​​Standard-Release Sie Pakete installieren. Dieses Release wird dann verwendet, sofern mit dem Parameter target release nichts anderes angegeben wird. Dies funktioniert genauso, wenn Sie nur ausgewählte Pakete von zB Backports installieren möchten.

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

Zuerst füge stretch als Repository hinzu, zB in /etc/apt/sources.list.d/stretch.list:

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

Erstellen Sie dann zum Festlegen der Standardversion eine Datei, die Folgendes /etc/apt/apt.conf.d/default-releaseenthält:

APT::Default-Release "jessie";

(In Wheezy gab es meiner Meinung apt.conf.dnach keinen und Sie müssten diesen Ausschnitt einfügen /etc/apt/apt.conf).

Das Installieren eines Pakets aus dem Test ist dann so einfach wie aptitude -t stretch install kpcliohne dass Sie sich um das Festlegen von Prioritäten kümmern müssen.

Hinweis: @amc in den Kommentaren darauf hingewiesen , dass , wenn Sie aptstatt aptitude, müssen Sie verwenden "stable"als Default-Releasestatt "jessie". Danke! (Natürlich können Sie aptitudediese Einstellung auch verwenden.)

Florian Jacob
quelle
… Das sieht nach einem wirklich raffinierten Weg aus. Warum wird das nicht offiziell akzeptiert?
JamesTheAwesomeDude
1
Ich versteheThe value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Steven Penny
1
Sie müssen "stable" / "testing" / etc. anstelle von "jessie" / "stretch" für die Standardversion und bei Verwendung von apt
amc
6

Pin: release a=wheezysollte Pin: release n=wheezyvielleicht sein.

Von der Manpage :

Der folgende Datensatz weist allen Paketversionen, die zu einer Distribution mit dem Codenamen "jessie" gehören, eine hohe Priorität zu.

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

Das ist also richtig!

user65646
quelle
3
würde das nicht ALLE pakete von jessy installieren ?
Rubo77