Ein trivial widersprüchliches Paket foo kann durch Ausführen dazu gebracht werden, mit bar zu arbeiten dpkg --force-conflicts -i foo
. Aber irgendwann ist es Zeit für ein Upgrade und 'apt-get'-Objekte:
% apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
foo : Conflicts: bar but 0.2-1 is installed
E: Unmet dependencies. Try using -f.
Kann apt-get optimiert / gezwungen werden, den (ziemlich festen) Konflikt zu tolerieren und dann zu aktualisieren?
(Quickie Existenzbeweis: uninstall foo , dann aktualisieren, installieren Sie dann foo wie vor Deshalb ist es. Ist möglich, ist die Frage nach dem geringsten Aufwand Mechanismus zu finden.)
Ein Beispiel, aber bei dieser Frage geht es nicht um zwei bestimmte Pakete.
Seit einigen Jahren hat GNU parallel einen trivialen Konflikt mit Moretutils ; jedes bietet / usr / bin / parallel . dpkg kann das Zusammenleben erzwingen:
# assume 'moreutils' is already installed, and 'parallel' is in
# apt's cache directory.
dpkg --force-conflicts -i /var/cache/apt/archives/parallel_20141022+ds1-1_all.deb
Dadurch wird eine Umleitung erstellt und die moreutils- Version in /usr/bin/parallel.moreutils umbenannt . Beide Programme funktionieren, bis der Benutzer ein Upgrade durchführt.
Ich habe eine -o- Option ausprobiert , aber das hat keinen Frieden gebracht:
apt-get -o Dpkg::Options::="--force-conflicts" install parallel moreutils
Mögliche -o Optionen sind jedoch Hunderte ...
--forcing
Dinge sind im Allgemeinen eine schlechte Idee, wenn Sie nicht wissen, was Sie tun.dpkg
undapt
sind eindeutig unzufrieden mit der aktuellen Situation. Und die einzige Möglichkeit, Probleme zu beheben, besteht darin, nicht beide Pakete installiert zu haben. Dies ist kein guter Weg, um sie zu beruhigen, und der Versuch, dies zu tun, führt nirgendwo hin.Antworten:
Da OP in den Kommentaren zu Gilles 'Antwort nach einer Liste von Befehlen gefragt hat (mit denen die relevanten Metadaten des Pakets geändert werden können), ist hier:
Dies unter der Annahme, dass die Konfliktzeile nur
moreutils
einen Eintrag enthält (und ohne Versionsbeschränkungen), wie dies bei meiner Installation der Fall war. Verwenden Sie andernfalls'/^Conflicts:/s/\(, \)\?moreutils\( [^,]\+\)\?//'
als zweitessed
Skript nur den relevanten Teil der Zeile und unterstützen Sie Versionsbeschränkungen.Ihr installiertes Paket wird nicht durch neuere Versionen aus dem Repository überschrieben, und Sie müssen diesen Vorgang für jedes Update des parallelen GNU-Pakets manuell wiederholen, wenn Sie dieses Paket auf dem neuesten Stand halten möchten.
quelle
apt upgrade
beschwert sich aber über die Parallele (die gleiche Version wie die gerade optimierte .deb)been kept back
. Dies ist jedoch eine Verbesserung derdpkg --force-conflicts
Methode, bei der jedes Upgrade eines der Programme bricht - die phk- Methode ermöglicht jedes zweite Upgrade.Ein Konflikt zwischen Paketen ist an und für sich schädlich. Wenn Sie
dpkg
die Installation der in Konflikt stehenden Pakete erzwingen , kann dies keinen weiteren Schaden verursachen , wenn der Konflikt ohne triftigen Grund deklariert wurde, die Pakete jedoch weiterhin in Konflikt stehen. APT arbeitet hart daran, Konflikte bei der Installation von Paketen zu lösen, und es gibt keine Liste von Konflikten, die ignoriert werden müssen. Sie können dies nicht lösen, indem Sie verschiedene Optionen an Folgendes übergebendpkg
: Das Problem besteht darin, dass die Konflikte den eigenen Job von APT unmöglich machen.Installieren Sie niemals widersprüchliche Pakete, es sei denn, es handelt sich um einen vorübergehenden Status, um aus einer Situation herauszukommen, in der APT ausfällt. Führen Sie APT erst aus, wenn Sie mit gearbeitet haben
dpkg
, um aus der Konfliktsituation herauszukommen.Wenn Sie widersprüchliche Pakete installieren möchten, ändern Sie diese zuerst, um die
Conflict:
Deklaration zu entfernen , und lösen Sie zusätzlich zu den Problemen, die die Konfliktdeklaration motiviert haben.quelle
Conflict:
Deklaration zu entfernen "?control
Datei bearbeiten , oder ändern Sie das Binärpaket, indem Sie es entpacken, bearbeitencontrol
und neu packen.sed
(oder etwas Ähnliches) anstelle eines GUI- Editors. Das Ziel ist ein relativ narrensicherer Einzeiler, soweit dies möglich ist.