如何解决 apt-get dist-upgrade

如何解决 apt-get dist-upgrade
root@kali:~# apt-get dist-upgrade

 Reading package lists... Done

 Building dependency tree 
      
 Reading state information... Done

 Calculating upgrade... Error!

 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 : Breaks: libgcc-8-dev (< 8.4.0-2~) but 8.2.0-14 is to be installed

E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by 
held packages.

答案1

这显然是 Debian 中 gcc-10 软件包的一个错误:他们在 Bullseye 发布之前重命名了一个软件包并删除了过渡软件包。以下软件包被重命名(我认为是为了更符合规定的惯例/debian 政策):

  • libgcc1-> libgcc-s1
  • lib64gcc1 -> lib64gcc-s1(仅适用于 32 位架构)
  • lib32gcc1 -> lib32gcc-s1(仅适用于 64 位架构)
  • libx32gcc1 -> libx32gcc-s1 (仅在 x86_64 上)
  • 还有一些不太常见的拱门

新重命名的软件包具有Provides: libgcc1(etc.) 属性,但看起来 apt 更喜欢真正的(旧)libgcc1 软件包,而不是仅由新软件包“提供”的虚拟软件包,因为它试图不破坏您的系统。我不熟悉依赖关系解析和安装顺序的内部细节,但无论如何这就是我对问题的理解。

真正解决问题的方法是提供使用旧名称命名的“真实”(但为空的“过渡”)软件包,这些软件包依赖于软件包的新名称,至少在发行版修复之前是这样。我已经在https://salsa.debian.org/rpavlik/gcc-10-compat(包括要随软件包一起添加的 repo)。那里有关于该问题的更多详细信息,以及使用我的解决方法的说明。

因为我知道人们不赞成只提供链接的答案,所以我的解决方法大致可以有效地完成以下工作:

您可以使用该equivs软件包来制作自己的空软件包。(您可能需要在不同的系统上执行此操作或撤消您的 repo 更改,才能安装 equivs!)equivs安装后,您需要对每个软件包重命名执行类似这样的操作:

# create equivs control file named libgcc1
equivs-control libgcc1.control

# edit equivs control file: you will need to set:
# - "Package" name to the old name
# - "Version" to something larger than the old version: 10.1.0-1 works
# - "Depends" to the new name
nano libgcc1.control

# Build a package - add `--arch i386` to make a 32-bit build
equivs-build libgcc1.control

然后你需要将其放入 apt repo 中:不要直接安装它,因为它们将替换必要的、真正的 libgcc,这将阻止您运行 apt!创建 repo 超出了此处的范围,请查看其他问题或直接使用我已经创建的 repo。

一旦这些新的“过渡” libgcc1 等在 apt repo 中可用,并且您更新源以选择 bullseye,apt 将能够正确进行 dist-upgrade/full-upgrade,并且您可以在升级完成后删除过渡包。

答案2

这是你的存储库的问题。以 root 用户身份登录并更新你的存储库。打开终端并运行

gedit /etc/apt/sources.list

用新存储库替换旧存储库,保存并运行

apt-get update 
apt-get install -f
apt autoremove
apt clean

相关内容