Aptitude: Paket nicht entfernen, wenn Abhängigkeit verletzt

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Kermit24
Beiträge: 315
Registriert: 29.04.2006 14:44:39

Aptitude: Paket nicht entfernen, wenn Abhängigkeit verletzt

Beitrag von Kermit24 » 04.11.2011 11:14:22

Hallo,
ich nutze nun schon seit einigen Jahren debian und stehe mit dem Paketsystem immer noch auf Kriegsfuss....

Wie muss ich ein Paket mit kaputten Abhängigkeiten in aptitude markieren, damit aptitude es nicht mehr automatisch entfernen will? Es geht um ein Fremdpaket, dass das pseudo-Paket 'kdelibs' erwartet, welches bei meinem wheezy/sid aber offenbar nicht mehr gibt. Habe mir dpkg einfach die Abhängigkeiten ignoriert und das Programm läuft einwandfrei. Aptitude will es jedoch ständig wegen der verletzten Abhängigkeiten entfernen. Diese Funktion von Aptitude mag ja innerhalb des debian-repository sinnvoll sein. Aber von Fremdpaketen soll es bitte die Finger lassen.
Also kann ich die Pakete irgendwie in aptitude gesondert markieren, dass sie nicht mehr entfernt werden sollen?

Danke im voraus,
Kermit

uname
Beiträge: 12495
Registriert: 03.06.2008 09:33:02

Re: Aptitude: Paket nicht entfernen, wenn Abhängigkeit verle

Beitrag von uname » 04.11.2011 11:42:31

Sehr viel Ahnung von der Paketverwaltung habe ich auch nicht. Du könntest aber selbst ein Pseudopaket "kdelibs" erstellen, welches dann selbst keine Abhängigkeiten mehr hat. Alternativ könntest du natürlich auch das Fremdpaket (Deb-File) auseinandernehmen, die Abhängigkeit in der CONTROL-Datei rauswerfen und das Zeug wieder zusammenbauen. Leider weiß ich ncht wie das geht, vielleicht mit "dpkg-deb". Auch kannst du vielleicht in /var/lib/apt/lists eine Volltextsuche nach "kdelibs" durchführen und mal manuell etwas verändern. Mit etwas Pech fehlt jedoch der Eintrag, da es vielleicht keine wirkliche Paketliste ist oder wenn doch wird die Datei vielleicht wieder überschrieben. Auch weiß ich nicht ob auf der Ebene vielleicht noch Prüfsummen dir dann die Paketverwaltung endgültig zerlegen. Aber ein Versuch wäre es vielleicht wert.

Nachtrag:

Laut
http://debianforum.de/forum/viewtopic.php?t=123254
könnte es vielleicht auch mit Apt-Pinning gehen wobei dein Fall etwas anders gelagert ist, da das Paket ja gar nicht existiert.

Benutzeravatar
hikaru
Moderator
Beiträge: 13975
Registriert: 09.04.2008 12:48:59

Re: Aptitude: Paket nicht entfernen, wenn Abhängigkeit verle

Beitrag von hikaru » 04.11.2011 13:10:47

Es gibt Debiankdelibs in Squeeze. Falls das Paket keine Konflikte mit Wheezy-Paketen hat (ich fürchte das hat es) dann kannst du einfach das Squeeze-Paket in Wheezy installieren.
Falls das, wie vermutet, nicht klappt musst du an den Abhängigkeiten rumschrauben. Dazu hast du im Wesentlichen zwei Möglichkeiten:

1. Entferne die kdelibs-Abhängigkeit aus deinem Fremdpaket:
Dazu entpackst du dein Fremdpaket mit dem Entpacker deiner Wahl, entpackst dort das control.tar.gz, editierst die Datei control und schmeißt aus der Depends-Zeile das kdelibs-Paket raus.
Danach baust du das ganze Paket wieder mit dpkg-deb -b zusammen.
Diesen Weg würde ich gehen wenn sich dein Fremdpaket so gut wie nicht verändert.

2. Erstelle ein virtuelles Paket das nichts weiter macht als diese Abhängigkeit bereitzustellen:
Das habe ich auch noch nicht gemacht. Was dazu wirklich nötig ist kann ich dir aus dem Stehgreif daher nicht sagen. Was du auf jeden Fall machen musst ist in der control-Datei das anzugeben:

Code: Alles auswählen

Provides: kdelibs
Bei den Abhängigkeiten und Architekturen solltest du möglichst großzügig sein, denn hier bringen Einschränkungen nichts. Das ganze data.tar.gz-Unterarchiv brauchst du hier nicht.
Diesen Weg würde ich wählen wenn sich das Fremdpaket häufig ändert.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Aptitude: Paket nicht entfernen, wenn Abhängigkeit verle

Beitrag von cosmac » 04.11.2011 19:39:30

hi,
hikaru hat geschrieben:2. Erstelle ein virtuelles Paket das nichts weiter macht als diese Abhängigkeit bereitzustellen:
für den Zweck gibt es Debianequivs, das ist ein Bausatz mit Schritt-für-Schritt-Anleitung (siehe /usr/share/doc/equivs und man equivs-build). Eine Beispiel-Control-Datei sieht z.B. so aus:

Code: Alles auswählen

Section: web
Package: webserver-dummy
Provides: httpd
Description: Webserver dummy package
 This package provides dpkg with the information that
 there is a local webserver installed.
 .
 Installing dwww, man2html etc. won't bug you to
 install apache any more
Beware of programmers who carry screwdrivers.

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Aptitude: Paket nicht entfernen, wenn Abhängigkeit verle

Beitrag von r900 » 04.11.2011 19:59:14

So ein dummy-Paket zu erstellen ist nicht besonders schwierig. Du erstellst zuerst mal eine Datei 'control' mit folgendem Inhalt:

Code: Alles auswählen

Package: kdelibs-dummy
Version: 1.0
Maintainer: root@localhost
Architecture: all
Provides: kdelibs
Conflicts: kdelibs
Description: Dummy package
Und dann:

Code: Alles auswählen

$ mkdir -p kdelibs-dummy/DEBIAN
$ mv control kdelibs-dummy/DEBIAN/
$ cd kdelibs-dummy
$ dpkg-deb -b . ../kdelibs-dummy.deb
Und das war's auch schon. Ich würde aber eher empfehlen die Abhängigkeiten des Fremdpaketes zu ändern.

Code: Alles auswählen

$ ar x <paket.deb> control.tar.gz
$ mkdir DEBIAN
$ cd DEBIAN
$ tar xzf ../control.tar.gz
$ vim control
$ tar czf ../control.tar.gz .
$ cd ..
$ ar r <paket.deb> control.tar.gz
Was die einzelnen Kommandos jeweils bewirken kannst du ja über man erfahren, Aber so ist es am schnellsten beschrieben ohne langwierige Erklärungen. Falls du vim nicht kennst kannst du natürlich auch einen beliebigen text-editor verwenden um den Eintrag kdelibs in der control-Datei zu entfernen.

Kermit24
Beiträge: 315
Registriert: 29.04.2006 14:44:39

Re: Aptitude: Paket nicht entfernen, wenn Abhängigkeit verle

Beitrag von Kermit24 » 05.11.2011 15:47:06

Hallo,
erst mal danke für die Antworten. Ich habe das kdelibs-dummy Paket installiert mit kleinen Anpassunge:
1. Musste noch die Version-Zeile in der config-Datei anpassen, dass er >=4:3.5.5 in der Abhängigkeit verlangt hat
2. In der config-Datei muss statt "Package: kdelibs-dummy" "Package: kdelibs" stehen. Sonst bekomme ich immer noch den Abhängigkeitsfehler.

Das zweite Fremdpaket verlangt als Abhängigkeit kdelibs4. Das als Pseudo-Paket zu erzeugen klappt aber leider nicht so wie beschrieben mit kdelibs. Wenn ich das mache und installieren möchte bekomme ich die Meldung:

Code: Alles auswählen

`--# dpkg -i kdelibs4.deb 
dpkg: Betreffend kdelibs4.deb, welches kdelibs4 enthält:
 kdelibs-data kollidiert mit kdelibs4
  kdelibs4 (Version 4:3.5.5) soll installiert werden.
  kdelibs4 liefert kdelibs4 und wird installiert.
dpkg: Fehler beim Bearbeiten von kdelibs4.deb (--install):
 Kollidierende Pakete - kdelibs4 wird nicht installiert
Fehler traten auf beim Bearbeiten von:
 kdelibs4.deb
Das Paket kdelibs4 gibt es leider auch nicht mehr in wheezy/sid:

Code: Alles auswählen

Keine Kandidatsversion für »kdelibs4« gefunden
Es werden keine Pakete installiert, aktualisiert oder entfernt.
0 Pakete aktualisiert, 0 zusätzlich installiert, 0 werden entfernt und 1442 nicht aktualisiert.
Muss 0 B an Archiven herunterladen. Nach dem Entpacken werden 0 B zusätzlich belegt sein.
Die folgenden Pakete haben verletzte Abhängigkeiten:
  pikloops: Hängt ab von: kdelibs4 (>= 4:3.2.3-3.sarge.1), welches ein virtuelles Paket ist.
            Hängt ab von: libqt3c102-mt (>= 3:3.3.3), welches ein virtuelles Paket ist.
Die folgenden Aktionen werden diese Abhängigkeiten auflösen:

     Entferne die folgenden Pakete:
1)     pikloops   
Wieso scheren sich die Entwickler so wenig um Abwärtskompatibilität. Die alten Programme laufen noch alle, lassen sich aber wegen dem besch... Paketsystem einfach nicht mehr installieren.

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Aptitude: Paket nicht entfernen, wenn Abhängigkeit verle

Beitrag von r900 » 05.11.2011 18:17:02

Ich wundere mich aber auch über die Zeile "kdelibs-data kollidiert mit kdelibs4".. kdelibs-data gibt es laut packages.debian.org auch nicht in wheezy. Hast du das aus squeeze installiert?

Wenn ein Paket eine bestimmte Version eines anderen Paketes verlangt werden virtuelle Pakete ignoriert. Deshalb funktionierte die Variante mit "Provides: kdelibs" wohl nicht.

Ich zitiere mich mal ausnahmsweise selbst.
r900 hat geschrieben: Ich würde aber eher empfehlen die Abhängigkeiten des Fremdpaketes zu ändern.
Siehst ja selbst dass diese Sache mit virtuellen Paketen Probleme machen kann. Die Paketverwaltung versucht halt das System sauber zu halten und deine Bestrebungen gehen dem irgendwie entgegen :wink:
Die Fremdpakete zu ändern halte ich generell für die sauberste Lösung.

Antworten