Debian 9.12 中的 libc6 依赖项不匹配

Debian 9.12 中的 libc6 依赖项不匹配

我在 Debian 9.12 stretch 中遇到以下 libc6 依赖问题。

sudo apt 安装 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!'
?]

答案1

您将系统配置为同时使用来自多个发行版的软件包(所谓的 Frankenstein-Debian),因此依赖性错误是正常的。cat /etc/apt/sources.list{,.d/*.list}狂欢列出所有来源。

你的libc6(版本2.27-6)卡在了拉紧(版本2.24-11+deb9u4)和破坏者(版本2.28-10)。我猜你从破坏者,当时它仍然是测试分布。解决这个问题最简单的方法是:

  1. 在你的 APT 源中查找对测试或者破坏者. 如果你发现类似以下内容:

    deb http://deb.debian.org/debian testing main non-free contrib
    

    替换为:

    deb http://deb.debian.org/debian buster main non-free contrib
    

    自从破坏者不是测试分布不再(靶心是)。

  2. 更新软件包列表:

    apt update
    
  3. 升级您的libc6至版本破坏者

    apt install libc6/buster libc6-dev/buster libc-dev-bin/buster
    
  4. 考虑升级到 Debian 10在不久的将来,所有的软件包都会来自同一个发行版。

编辑:似乎您有几个软件包的版本高于 Stretch,因此您可以将其降级:

apt install libc6/stretch libc6-dev/stretch libc-dev-bin/stretch libc-bin/stretch locales/stretch sudo/stretch

并删除破坏者以及来自 APT 来源的公司。

答案2

我刚刚在从 Debian 迁移StretchSidWSL 时遇到了同样的问题,这就是为什么我会提出这个问题来寻找解决方案。

幸运的是,我能够相当轻松地缓解它。

我很抱歉用 WSL 特定的答案来回答您的问题,但我在这里提到的任何不特定于 WSL 的东西也应该可以在常规的 Debian 发行版上运行。这两个平台上的软件包都是一样的。

举一个 WSL 特定的命令转换的例子,如果你没有使用 WSL,你可以用 替换wsl --terminate Debiansystemctl reboot或者wsl -u root用 以 root 身份登录到刚刚重启的系统。

以下是我解决libc不匹配问题的方法:

我从本地 Debian 镜像下载了文件并手动安装它们libc6libcrypt .deb

如果在执行特权命令时遇到问题(就像我遇到的由于libc不匹配的问题一样),您可以运行wsl -u root进入 WSL 容器(在常规 Debian 中,只需直接以 root 用户身份登录即可)。

在 WSL 内部,为你的.debs 创建一个文件夹并使用它wget来获取这两个文件(链接是 amd64 版本):

libc6 2.34http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.34-4_amd64.deb

libcrypt1_4.4.28-2http://ftp.us.debian.org/debian/pool/main/libx/libxcrypt/libcrypt1_4.4.28-2_amd64.deb

如果您没有wget,并且显然无法运行apt以安装它,那么您必须尝试curl -O $LINK,或者下载任一的二进制分发版(在 Google 上搜索)。

libc首先使用以下方法安装dpkg

# dpkg -i libc6_2.34-4_amd64.deb

然后安装libcrypt

# dpkg -i libcrypt1_4.4.18-4_amd64.deb

在进行大型操作系统基础架构更新(例如)后libc,在exitWSL 提示符下从 CMD 提示符运行wsl --terminate Debian(如果不是 WSL,则重新启动计算机),然后再次输入wsl -u root(如果不是 WSL,则以 root 身份登录)。这基本上与在 WSL 中重新启动非常接近。

然后尝试运行apt dist-upgrade -y(确保您最近使用apt update先前刷新了您的 apt 缓存),它应该会将您系统的其余部分拉到为libc6 2.34Bookworm 安装创建的新依赖平台。

基本上,这里的想法是添加尽可能多的软件包,然后才能自动运行升级。对我来说,需要这两个软件包。

如果您收到运行消息apt --fix-broken install,请尝试运行,然后apt dist-upgrade重试。

apt upgrade与其他指示在 之前运行 的指令相反apt dist-upgrade,现在不需要这样做,因为您已经安装了大件。不过,如果您愿意,您可以先这样做,否则会遇到问题。

我也遇到了这个小问题:

Preparing to unpack .../util-linux_2.38.1-1_amd64.deb ...
Unpacking util-linux (2.38.1-1) over (2.29.2-1+deb9u1) ...
dpkg: error processing archive /var/cache/apt/archives/util-linux_2.38.1-1_amd64.deb (--unpack):
 trying to overwrite '/bin/findmnt', which is also in package mount 2.29.2-1+deb9u1
dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/util-linux_2.38.1-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

TL;DR 如果你只想要命令,我把它放在扰流板快要结束了。如果你想要了解我到达那里的过程,请继续阅读...

这种情况基本上可能发生在任何数量的软件包上,在这种情况下,它试图安装util-linux不兼容的已安装版本mount。为了验证这种情况,我运行了这个小循环for,分别检查两个冲突软件包的可升级软件包(2>/dev/null过滤掉那个烦人的WARNING: Cli interface blah blah消息):

# for i in util-linux mount; do apt list --upgradable 2>/dev/null | grep $i; done

util-linux/unstable 2.38.1-1 amd64 [upgradable from: 2.29.2-1+deb9u1]
mount/unstable 2.38.1-1 amd64 [upgradable from: 2.29.2-1+deb9u1]

如果冲突的软件包不同,只需反映$i您正在检查apt list --upgradable列表的软件包,例如for systemd systemd-resolved; do ...或任何软件包名称。

如果它们都出现在列表中,那么就需要使用不同的时间来安装它们,或者在我的情况下,在安装冲突的版本时需要覆盖其中一个。

dpkg有个flag叫--force-overwrite,但是怎么跑进去呢apt-oflag!

# apt -o Dpkg::Options::="--force-overwrite" --fix-broken install

扰流板你应该把它添加到你dist-upgrade回到开头的方式中

# apt -o Dpkg::Options::="--force-overwrite" dist-upgrade

完成所有操作后,重新启动系统(exitC:\> wsl --terminate Debian)并再次进入,这次以普通用户的身份,查看sudo和之类的功能passwd现在是否可以正常工作。

还可以检查升级是否反映出来:

$ clear && uname -a; cat /etc/debian_version; cat -n /etc/os-release

Linux marmot 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 GNU/Linux
bookworm/sid

     1  PRETTY_NAME="Debian GNU/Linux bookworm/sid"
     2  NAME="Debian GNU/Linux"
     3  ID=debian
     4  HOME_URL="https://www.debian.org/"
     5  SUPPORT_URL="https://www.debian.org/support"
     6  BUG_REPORT_URL="https://bugs.debian.org/"

安装neofetch以获得更多有趣的识别:

$ neofetch

       _,met$$$$$gg.          avery@marmot
    ,g$$$$$$$$$$$$$$$P.       ------------
  ,g$$P"     """Y$$.".        OS: Debian GNU/Linux bookworm/sid on Windows 10 x  ,$$P'              `$$$.     Kernel: 5.10.102.1-microsoft-standard-WSL2
',$$P       ,ggs.     `$$b:   Uptime: 22 hours, 27 mins
`d$$'     ,$P"'   .    $$$    Packages: 399 (dpkg)
 $$P      d$'     ,    $$P    Shell: bash 5.2.0
 $$:      $$.   -    ,d$$'    Terminal: Windows Terminal
 $$;      Y$b._   _,d$P'      CPU: Intel i5-6300U (4) @ 2.495GHz
 Y$$.    `.`"Y$$$$P"'         Memory: 71MiB / 6219MiB
  `Y$$
   `Y$$.
     `$$b.
       `Y$$b.
          `"Y$b._

希望这对某人有帮助。

相关内容