Sagen Sie der Eignung, zerbrochenes Paket zu ignorieren

9

Ich habe einen Amsynth von Lucid in Karmic installiert mit:

dpkg --force-depends-version -i amsynth_1.2.2-1_i386.deb

Der Grund für die Installation der Lucid-Version ist, dass die Karmic-Version 3 Jahre alt ist und auf meinem Computer abstürzt. Das Lucid Amsynth-Paket hängt von neueren Versionen von libatk1 und libjack0 ab als Karmic, aber ich dachte, ich würde ein Risiko eingehen, und Amsynth läuft gut.

Aptitude versucht jedoch, Amsynth jedes Mal zu deinstallieren, wenn ich ein Upgrade durchführe. Ich glaube, ich habe es geschafft, es auf Eis zu legen, aber jetzt bricht die Eignung ab. Wie kann ich die Eignung erkennen, das zerbrochene Paket zu ignorieren und weiterzumachen?


quelle
Im Moment habe ich es gerade deinstalliert. Ich werde es jedes Mal neu installieren, wenn ich es erneut benötige. Es dauert nicht lange, bis es mich genug nervt, um es erneut zu kompilieren.
Wenn Sie etwas aus einer neueren Version benötigen und neuere Bibliotheken benötigen, können Sie diese normalerweise entweder einfach mitziehen oder das Quellpaket herunterladen und auf Ihrem System neu erstellen. Ich bin jedoch auf diesen Versuch gestoßen, ein Paket eines Drittanbieters zu verwenden, und dann werden die Hacks benötigt.
Jan Hudec

Antworten:

7

Wenn Sie das Programm über eine Deb-Datei und dpkg installiert haben, können Sie die Abhängigkeiten der installierten .deb-Datei auch manuell ändern. Ich wurde einmal zu diesem extremen Maß getrieben ...

ar x foo.deb
vim control.tar.xz  # see below
ar r foo.deb control.tar.xz
dpkg -i foo.deb

und dpkg kennt die abhängigkeiten von foo nicht mehr. In vim müssen Sie ./control auswählen (ich verwende vim zum Lesen gepackter Dateien - entpacken und verwenden Sie einen anderen Editor und packen Sie neu, wenn Sie möchten) und die unerwünschten Abhängigkeiten aus der Zeile entfernen

Depends: foo bar
skunk_michi
quelle
1
Du bist besser dran dpkg-debals ar. arist ein dpkg-Implementierungsdetail, das sich in Zukunft ändern kann.
jmtd
Vielen Dank, diese Lösung hat bei mir funktioniert, aber wenn ich ein apt-get-Upgrade durchführe, wird die Meldung "Die folgenden Pakete wurden zurückgehalten: numptyphysics: i386" angezeigt (apt-get dist-upgrade sagt nichts aus). Ist diese Nachricht normal und können wir sie nicht loswerden?
Taufe
7

Bei den Ubuntuforums gibt es eine gehackte Lösung . Die Lösung von ~ quack ist besser, aber mehr Arbeit.

Ich konnte auf Google nichts dazu finden, außer das Kompilieren Ihres eigenen "Dummy-Pakets" (unmöglich, ohne die defekten Pakete zu deinstallieren. Es sei denn, Sie haben das Glück, bereits über die Tools zu verfügen), aber das Durchsuchen meiner eigenen Festplatte hat mir geholfen die Antwort schließlich!

Für alle, die wissen möchten, wie man ein Paket in synaptic / aptitude / apt-get "aufbricht", ohne es zu deinstallieren.

Notieren Sie sich zunächst das installierte Paket und die Pakete, von denen es abhängt, geben ihm einen fehlerhaften Status. Angenommen, ich habe eine Installation von Äpfeln erzwungen, was von dem veralteten Paket abhängt, das sich nicht im Repository befindet:

In einem Terminaltyp Code:

sudo gedit /var/lib/dpkg/status

Durchsuchen Sie die Datei nach Äpfeln, bis Sie Folgendes finden:

Code:

Package: apples
Status: install ok installed
Priority: optional
Section: libs
Installed-Size: 316
Maintainer:
Architecture: i386
Source: applesauce
Version: 1.0.10-1
Depends: packageA, packageB, obsolete
Description: Apples on your desktop!

Entfernen Sie veraltete aus der Zeile Abhängig: Speichern Sie die Datei, und fertig. Hoffe das hilft einigen Leuten.

Iain
quelle
ick. Gute Entdeckung, aber ich bin kein Fan davon, den Paketmanager anzulügen (was im Wesentlichen das ist, was dieser Hack tut). Es ist besser, APT überhaupt nicht zu verwenden, als herumzulaufen und es wohl oder übel zu brechen. Aus diesem Grund ist das Kompilieren eigener Pakete eine gute Sache - keine kaputten Abhängigkeiten und keine Lüge gegenüber Ihrem Paketmanager.
Quacksalber Quijote
Ich habe kein Problem damit, den Paketmanager anzulügen, zumal ich in einigen Monaten das Betriebssystem neu installieren werde, aber ich konnte die Datei, auf die im Thread verwiesen wird, nicht finden.
Seltsam. Es sollte da sein. Versuchen Sie "cd / var / lib / dpkg" und dann "sudo nano status".
Iain
1
Der Link funktioniert nicht mehr. Genau aus diesem Grund werden Antworten, die nur auf Links basieren, hier verpönt. Wenn Sie hier erklären würden, wäre es die richtige Antwort.
Jan Hudec
Ich weiß nicht, ob dies dauerhaft ist oder nicht, aber es scheint bisher eine anständige Lösung für die Installation von Paketen zu sein, die starke Abhängigkeiten von nicht mehr verfügbaren Java-Versionen aufweisen.
Krispy
2

Deaktivieren Sie im Abschnitt " Einstellungen " von aptitude (Strg-T, um in das Menü zu gelangen; unter "Optionen") die Option im Abschnitt "Abhängigkeitsbehandlung" mit der Meldung " Beschädigte Pakete vor dem Installieren oder Entfernen automatisch reparieren" . Das sollte dazu führen, dass aptitude nicht mehr versucht, das Paket jedes Mal zu reparieren, wenn Sie andere Pakete ändern.

Als dauerhaftere Lösung sollten Sie die Quellpakete für das von Ihnen installierte Lucid Amsynth- Paket sowie die Quellpakete für libatk1 und libjack0 abrufen und Ihr eigenes aktualisiertes Paket erstellen. Abhängig davon, was diese Bibliotheken sonst noch verwendet, müssen Sie möglicherweise auch andere Pakete aktualisieren, aber Sie können wahrscheinlich nur mit diesen davonkommen. (Dies ist im Wesentlichen das Backportieren dieser Pakete von Lucid nach Karmic. Sie sollten das Karmic-Backports-Repository oder die PPAs überprüfen, um festzustellen, ob dies bereits jemand getan hat. Wenn Ihre neuen Pakete funktionieren, sollten Sie sie an Karmic-Backports senden, damit andere sie verwenden können. )

Quacksalber
quelle
Danke, ich habe Ihren ersten Vorschlag ausprobiert, aber es schien keinen Unterschied zu machen. Updates würden einfach abgebrochen. Ich habe auch versucht, es zu kompilieren, bevor ich versuchte, das Lucid-Paket zu installieren, hatte aber kein Glück damit. Ich könnte es in Zukunft noch einmal versuchen.