如何使用apt修复Debian上损坏的libxml2-dev依赖关系?


8

当我sudo apt-get upgrade在Debian Squeeze安装上运行时,出现以下错误:

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.

我不确定“ squeeze3”和“ squeeze5”是什么意思,但这是libxml2软件包中唯一不同的地方。

当我尝试“ sudo apt-get install -f”时,我得到:

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)

出现类似的错误sudo apt-get upgrade -f

我的/etc/apt/sources.list当前是:

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

我该如何解决这个问题?谢谢!


2
squeeze3是挤压的第三个补丁版本,squeeze5是第五个。它们是版本号的一部分。库和开发文件的版本必须完全匹配。APT要您跑步是正常的apt-get install -f。不正常的是升级libxml2-dev失败。目录是否/usr/include/libxml2存在?权限合理吗?是否有足够的磁盘空间?
吉尔斯(Gilles)'所以

@Gilles啊,权限被弄乱了:ls -l说它无法访问libxml2(甚至以root身份访问),并且?在所有权限信息的位置标记了标记。促进回答?不知道如何解决,但是我可以调查/与房东交谈。
乔纳森(Jonathan)

Answers:


5

squeeze3是挤压的第三个补丁版本,squeeze5是第五个。它们是版本号的一部分。库和开发文件的版本必须完全匹配,因此,apt-get install -f当系统版本不一致时,APT通常希望您运行。

不正常的是升级libxml2-dev失败。关于无法阅读的消息/usr/include/libxml2很不寻常。似乎表明安装已以某种方式损坏。检查目录是否仍然存在。如果您在某个时候移动或删除了它,请不要这样做,然后重新创建或移回目录以进行恢复。如果目录存在,但您看到类似

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

那么您的文件系统已损坏,或者您的RAM可能已损坏。首先,检查您的RAM:这是文件系统损坏的最常见原因。尽可能少写,直到您对RAM有所了解为止,因为这可能会使损坏更严重。如何从那里拿走它取决于损坏的性质和程度。


3

尝试清除它,然后重新安装。

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

一个-dev包只编译针对库链接程序所需的组件,它不需要运行时间,以便它是安全的,完全清除。


对于我而言,这没有帮助,因为文件最终被破坏了。将向其他有库依赖问题(+1)的人推荐此过程。
乔纳森

在那种情况下,我添加apt-get clean了它将清除程序包缓存并从存储库中强制重新下载所需的程序包。
bahamat 2012年

抱歉,我的意思是文件/usr/include/libxml2已损坏。甚至rm -f /usr/include/libxml2会失败,说类似的东西找不到文件。我的网络托管服务商花了17个小时来修复它。
乔纳森(Jonathan)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.