我正在尝试在 Windows Subsystem for Linux(ubuntu)中使用 apt-get 安装 linux-libc-dev,但是出现错误,而且似乎无法解决它:
dpkg: error processing archive /var/cache/apt/archives/linux-libc-dev_3.13.0-126.175_amd64.deb (--unpack):
unable to install new version of `/usr/include/linux/netfilter/xt_DSCP.h': File exists
Errors were encountered while processing:
/var/cache/apt/archives/linux-libc-dev_3.13.0-126.175_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
但是当我列出 /usr/include/ 中的文件时,linux 目录甚至不存在。
这可能是什么原因造成的?目录不存在,文件又怎么会存在呢?
谢谢。
答案1
可能是安装中途中止,导致其损坏。
查找 bored 的软件包:
dpkg --configure -a
这应该返回如下列表:
Errors were encountered while processing:
libc6-dev:amd64
libstdc++-4.8-dev:amd64
g++-4.8
g++
强制删除这些:
dpkg --remove libc6-dev
dpkg --remove g++
...
清除所有下载的无效包的缓存,并清除多余的包:
apt-get clean
apt-get autoremove
现在您应该可以apt-get install foo
再次这样做了。
据我所知,apt
一旦进入这种状态,它就无法智能地自行修复,您必须退回到使用 明确清除包dpkg --remove
。
答案2
我遇到了同样的问题,发现它之所以被触发,仅仅是因为由于某些不幸和奇怪的原因,Ubuntu 软件包linux-libc-dev
包含一些(头)文件,其名称仅通过字母大小写来区分,例如/usr/include/linux/netfilter/xt_DSCP.h
和/usr/include/linuxnetfilter/xt_dscp.h
。
该问题是由于 WSL 的一些愚蠢行为造成的,即其区分大小写的文件系统实现方式存在错误/不一致。假设在某个目录中有一个文件,而您想在同一目录中创建一个名称除了大小写之外相同的文件。这应该有效,并在另一个文件之外创建第二个文件(或者可能覆盖现有文件)。然而,这会失败,甚至更糟的是,会产生误导性错误:
touch a.txt touch A.txt
产量
touch: cannot touch 'A.txt': Input/output error
另一方面,可以通过以下方式生成包含两种情况的文件
touch b.txt touch x.txt mv x.txt B.txt ls {b,B}.txt
:
b.txt B.txt
对于名称类似的包,有一个解决方法linux-libc-dev_4.4.0-97.120_amd64.deb
:
cd any-temp-dir
apt-get download linux-libc-dev
ar x linux-libc-dev*deb
tar xJf data.tar.xz # ignore all erors like ./usr/include/linux/netfilter/xt_DSCP.h: Cannot open: Input/output error
tar cJf data.tar.xz ./usr
ar rcs linux-libc-dev*.deb debian-binary control.tar.gz data.tar.xz
sudo dpkg -i linux-libc-dev*.deb
答案3
基本上 ubuntu 22.04 已经被 bjorked 了。
Ign:1 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 linux-libc-dev amd64 5.15.0-87.97
Err:1 http://security.ubuntu.com/ubuntu jammy-updates/main amd64 linux-libc-dev amd64 5.15.0-87.97
404 Not Found [IP: 185.125.190.36 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_5.15.0-87.97_amd64.deb 404 Not Found [IP: 185.125.190.36 80]
解决方案:删除 ubuntu wsl2 并使用 fedora remix。