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 update
anschließ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 -i
nicht. 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 .
Antworten:
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.list
und die folgende/etc/apt/preferences
Datei angegeben:Der Wert 500 ist die Standardeinstellung für instabil. Also, lasst uns versuchen, Ice Wiesel zu überprüfen:
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:
quelle
sudo apt-get -u install kpcli/jessie
gibts mir noch316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.
mit deinen vorgeschlagenen prioritäten. Wenn ich das tueapt-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 ...Package: kpcli*
(anstattPackage: kpcli
) und dann einPackage: *
Pin: release o=Debian
Pin-Priority: -10
am 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!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
:Erstellen Sie dann zum Festlegen der Standardversion eine Datei, die Folgendes
/etc/apt/apt.conf.d/default-release
enthält:(In Wheezy gab es meiner Meinung
apt.conf.d
nach 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 kpcli
ohne dass Sie sich um das Festlegen von Prioritäten kümmern müssen.Hinweis: @amc in den Kommentaren darauf hingewiesen , dass , wenn Sie
apt
stattaptitude
, müssen Sie verwenden"stable"
alsDefault-Release
statt"jessie"
. Danke! (Natürlich können Sieaptitude
diese Einstellung auch verwenden.)quelle
The value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Pin: release a=wheezy
solltePin: release n=wheezy
vielleicht sein.Von der Manpage :
Das ist also richtig!
quelle