我在 Debian 9.12 中遇到了以下 libc6 依赖问题。
sudo apt install libc6-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
libc6-dev : Depends: libc6 (= 2.24-11+deb9u4) but 2.27-6 is to be installed
Depends: libc-dev-bin (= 2.24-11+deb9u4) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
我该如何解决?
EDIT1:apt策略libc6
libc6:
Installed: 2.27-6
Candidate: 2.27-6
Version table:
*** 2.27-6 100
100 /var/lib/dpkg/status
2.24-11+deb9u4 500
500 http://deb.debian.org/debian stretch/main amd64 Packages
2.24-11+deb9u1 500
500 http://security.debian.org/debian-security stretch/updates/main amd64 Packages
编辑2:
apt install libc6/stretch libc6-dev/stretch libc-dev-bin/stretch
Reading package lists... Done
Building dependency tree
Reading state information... Done
Selected version '2.24-11+deb9u4' (Debian:9.12/oldstable [amd64]) for 'libc6'
Selected version '2.24-11+deb9u4' (Debian:9.12/oldstable [amd64]) for 'libc6-dev'
Selected version '2.24-11+deb9u4' (Debian:9.12/oldstable [amd64]) for 'libc-dev-bin'
The following additional packages will be installed:
linux-libc-dev
Suggested packages:
glibc-doc locales
The following packages will be REMOVED:
libc-bin locales sudo
The following NEW packages will be installed:
libc-dev-bin libc6-dev linux-libc-dev
The following packages will be DOWNGRADED:
libc6
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
libc-bin
0 upgraded, 3 newly installed, 1 downgraded, 3 to remove and 0 not upgraded.
Need to get 6,797 kB of archives.
After this operation, 1,437 kB disk space will be freed.
You are about to do something potentially harmful.
To continue type in the phrase 'Yes, do as I say!'
?]
您将系统配置为一次使用来自多个发行版的软件包(所谓的 Frankenstein-Debian),因此依赖性错误是正常的。
cat /etc/apt/sources.list{,.d/*.list}
在bash中运行以列出所有源。您的libc6 (version
2.27-6
) 卡在了stretch (version2.24-11+deb9u4
) 和buster (version2.28-10
) 之间。我的猜测是你从buster中提取了一些包,而它仍然是测试发行版。解决这个问题最简单的方法是:在您的 APT 来源中找到对testing或buster的引用。如果你发现类似的东西:
将其替换为:
因为buster不再是测试分布(靶心是)。
更新软件包列表:
将您的libc6升级到buster的版本:
考虑在不久的将来升级到 Debian 10以拥有来自同一发行版的所有软件包。
编辑:似乎您的版本高于 Stretch 的软件包很少,因此您可以降级它们:
并从 APT 来源中删除buster和 company。
我刚刚从 Debian
Stretch
迁移到Sid
WSL 时遇到了同样的问题,这就是为什么我在这个问题上寻找解决方案的原因。幸运的是,我能够相当容易地缓解它。
对于您的问题的特定 WSL 答案,我深表歉意,但我在这里提到的任何不特定于 WSL 的内容也应该适用于常规 Debian 发行版。两个平台上的包都是一样的。
对于特定于 WSL 的命令转换的示例,如果您不使用 WSL,则可以替换
wsl --terminate Debian
为systemctl reboot
,或wsl -u root
以 root 身份登录到新重新启动的系统。以下是我解决
libc
我遇到的不匹配问题的方法:我从本地 Debian 镜像下载了文件并手动安装了它们
libc6
。libcrypt
.deb
如果在执行特权命令时遇到问题,因为我是由于
libc
不匹配,您可以运行wsl -u root
以进入 WSL 容器(在常规 Debian 中,只需直接以 root 用户身份登录)。.deb
在 WSL 中,为您的 s创建一个文件夹并用于wget
获取这两个文件(链接为 amd64 版本):libc6 2.34
: http: //ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.34-4_amd64.deblibcrypt1_4.4.28-2
: http: //ftp.us.debian.org/debian/pool/main/libx/libxcrypt/libcrypt1_4.4.28-2_amd64.deb如果您没有
wget
,并且显然无法运行apt
以安装它,您将不得不尝试curl -O $LINK
,或下载其中任何一个的二进制分发版(Google for it)。libc
首先使用安装dpkg
:然后安装
libcrypt
:在像WSL 提示符和CMD 提示符(如果不是 WSL 则重新启动机器)这样的大型 OS 基础架构更新之后,然后再次输入(如果不是 WSL,则以
libc
root身份登录)。这基本上与您可以在 WSL 中重新启动一样接近。exit
wsl --terminate Debian
wsl -u root
然后尝试运行
apt dist-upgrade -y
(确保您最近使用apt update
之前刷新了 apt 缓存),它应该将系统的其余部分拉到libc6 2.34
为 Bookworm 安装创建的新依赖高原。基本上,这里的想法是在您可以自动运行升级之前添加尽可能多的软件包。对我来说,这两个包。
如果您收到要运行的消息
apt --fix-broken install
,请尝试一下,然后再试apt dist-upgrade
一次。apt upgrade
与之前运行的其他说明相反,apt dist-upgrade
现在不需要这样做,因为您已经安装了大件。如果你愿意,你可以先做,或者遇到问题。我也遇到了这个小问题:
TL;DR,如果您只想要命令,我将它放在最后的扰流板之下。如果您更愿意按照我如何到达那里的过程进行操作,请继续阅读...
这基本上可能发生在任意数量的软件包上,在这种情况下,它试图
util-linux
使用不兼容的已安装版本进行mount
安装。为了验证情况是否如此,我运行了这个for
小循环,它分别检查两个冲突包的可升级包(2>/dev/null
过滤掉那个烦人的WARNING: Cli interface blah blah
消息):如果您的冲突包不同,只需
$i
反映您正在检查apt list --upgradable
列表的任何包,例如for systemd systemd-resolved; do ...
包名称可能是什么。如果它们都出现在列表中,宾果游戏,它们需要使用不同的时间安装,或者在我的情况下需要在安装冲突版本时覆盖其中一个。
dpkg
有个flag叫--force-overwrite
,但是怎么跑进去apt
?国旗-o
!剧透你可能应该把它添加到你
dist-upgrade
回到开头的路上毕竟,重新启动您的系统(
exit
,C:\> wsl --terminate Debian
)并再次输入它,这次是作为您的普通用户,看看是否像现在sudo
这样passwd
工作。也可以查看升级是否有反映:
安装
neofetch
更有趣的识别:希望这可以帮助某人。