无法在 Windows 上的 Ubuntu 中安装 linux-libc-dev

无法在 Windows 上的 Ubuntu 中安装 linux-libc-dev

我正在尝试在 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。

相关内容