Wie behebe ich eine defekte libxml2-dev-Abhängigkeit von Debian mit apt?

8

Wenn ich sudo apt-get upgrademeine Debian Squeeze-Installation ausführe , wird folgende Fehlermeldung angezeigt:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
 libxml2-dev : Depends: libxml2 (= 2.7.8.dfsg-2+squeeze3) but 2.7.8.dfsg-2+squeeze5 is installed
E: Unmet dependencies. Try using -f.

Ich bin nicht sicher, was "Squeeze3" gegenüber "Squeeze5" bedeutet, aber es ist das einzige, was sich im libxml2-Paket unterscheidet.

Wenn ich "sudo apt-get install -f" versuche, erhalte ich:

The following extra packages will be installed:
  libxml2-dev
The following packages will be upgraded:
  libxml2-dev
1 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
108 not fully installed or removed.
Need to get 0 B/830 kB of archives.
After this operation, 69.6 kB disk space will be freed.
Do you want to continue [Y/n]? Y
(Reading database ... 96842 files and directories currently installed.)
Preparing to replace libxml2-dev 2.7.8.dfsg-2+squeeze3 (using .../libxml2-dev_2.7.8.dfsg-2+squeeze5_amd64.deb) ...
Unpacking replacement libxml2-dev ...
dpkg: error processing /var/cache/apt/archives/libxml2-dev_2.7.8.dfsg-2+squeeze5_amd64.deb (--unpack):
 unable to install new version of `./usr/include/libxml2': No such file or directory
configured to not write apport reports
                                      dpkg-deb: subprocess paste killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/libxml2-dev_2.7.8.dfsg-2+squeeze5_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ein ähnlicher Fehler tritt bei auf sudo apt-get upgrade -f.

Meine /etc/apt/sources.list ist derzeit:

deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free
deb http://ftp.debian.org/debian/ squeeze-updates main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free

Wie behebe ich das? Vielen Dank!

Jonathan
quelle
2
squeeze3ist die dritte Patch-Version für Squeeze, squeeze5ist die fünfte. Sie sind Teil der Versionsnummer. Die Versionen für die Bibliothek und die Entwicklungsdateien müssen genau übereinstimmen. Es ist normal, dass APT möchte, dass Sie laufen apt-get install -f. Was nicht normal ist, ist, dass das Upgrade von libxml2-devfehlschlägt. Existiert das Verzeichnis /usr/include/libxml2? Sind die Berechtigungen angemessen? Ist genügend Speicherplatz vorhanden?
Gilles 'SO - hör auf böse zu sein'
@ Gilles Ah, die Berechtigungen sind durcheinander: ls -lsagt, dass es nicht zugreifen kann libxml2(auch nicht als root) und es gibt ?Markierungen anstelle aller Berechtigungsinformationen. Zur Beantwortung befördern? Ich bin mir nicht sicher, wie ich das beheben soll, aber ich kann meinen Gastgeber untersuchen / mit ihm sprechen.
Jonathan

Antworten:

5

squeeze3ist die dritte Patch-Version für Squeeze, squeeze5ist die fünfte. Sie sind Teil der Versionsnummer. Die Versionen für die Bibliothek und die Entwicklungsdateien müssen genau übereinstimmen. Daher möchte APT, dass Sie ausgeführt werden, apt-get install -fwenn Ihr System über inkonsistente Versionen verfügt.

Was nicht normal ist, ist, dass das Upgrade von libxml2-devfehlschlägt. Die Meldung, nicht lesen zu können, /usr/include/libxml2ist ungewöhnlich. Es scheint darauf hinzudeuten, dass die Installation auf irgendeine Weise beschädigt wurde. Überprüfen Sie, ob das Verzeichnis noch vorhanden ist. Wenn Sie es irgendwann verschoben oder entfernt haben, tun Sie dies nicht und erstellen Sie das Verzeichnis neu oder verschieben Sie es zurück, um es wiederherzustellen. Wenn das Verzeichnis existiert, Sie aber so etwas sehen

$ ls -ld /usr/include/libxml2
?????????? ??? ???????? ???????? 4096 ??? ?? ???? /usr/include/libxml2

dann ist Ihr Dateisystem oder möglicherweise Ihr RAM beschädigt. Zuerst überprüfen Sie Ihre RAM : Dies ist die häufigste Ursache für Dateisystem Korruption. Schreiben Sie so wenig wie möglich, bis Sie sich über den Arbeitsspeicher sicher sind, da dies den Schaden verschlimmern kann. Wie man es von dort nimmt, hängt von der Art und dem Ausmaß des Schadens ab.

Gilles 'SO - hör auf böse zu sein'
quelle
3

Versuchen Sie, es zu löschen und dann neu zu installieren.

sudo apt-get purge -f libxml2-dev
sudo apt-get clean
sudo apt-get update
sudo apt-get install libxml2 libxml2-dev

Ein -devPaket besteht nur aus den Komponenten, die zum Kompilieren von Programmen erforderlich sind, die mit dieser Bibliothek verknüpft sind. Es wird nicht zur Laufzeit benötigt, sodass eine vollständige Bereinigung sicher ist.

Bahamat
quelle
Dies hat in meinem Fall nicht geholfen, da die Datei beschädigt wurde. Würde dieses Verfahren anderen empfehlen, die Probleme mit der Bibliotheksabhängigkeit haben (+1).
Jonathan
In diesem Fall habe ich hinzugefügt, apt-get cleanwodurch der Paket-Cache geleert und das erneute Herunterladen des benötigten Pakets aus dem Repo erzwungen wird.
Bahamat
Entschuldigung, ich meinte, die Datei /usr/include/libxml2war beschädigt. Sogar rm -f /usr/include/libxml2würde scheitern und so etwas sagen, dass es die Datei nicht finden konnte. Mein Webhost hat 17 Stunden gebraucht, um das Problem zu beheben.
Jonathan