为什么升级时少数软件包会“被阻止”?

为什么升级时少数软件包会“被阻止”?

有时,当我尝试升级我的软件包时,少数软件包未升级。

root@pc:/home/user# sudo apt-get upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  linux-headers-amd64 linux-image-amd64
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

系统决定不升级这些软件包的理由是什么?我怎样才能升级它们呢?

答案1

两个最常见的原因是:

  1. “保留”包所依赖的一个或多个包在存档中尚不可用。如果您使用 Debian Sid 或 Debian Testing 或其他一些“滚动”类型发行版,这种情况最为常见,但有时也会在常规和安全更新发行版中发生。

    这是一个时间问题 - 当包被上传、接受到存档中,然后分发到本地存储库镜像时。通常会在一两天内解决,但如果正在进行重大升级(例如 KDE 或 Gnome 的新版本或涉及大量软件包的软件包)和/或一个软件包占用了很多软件包,有时可能需要更长时间其他包。

    这不值得担心。只需等待几天后再次apt update尝试即可apt upgradeapt dist-upgrade

  2. 您已手动持有一些包裹(例如使用apt-mark hold)。您可以使用 自行修复此问题apt-mark unhold

    顺便说一句,我建议同时保留linux-headers-amd64linux-image-amd64,特别是如果您使用 DKMS 软件包,例如nvidia-kernel-dkms或 ,zfs-dkms它们可能与新内核冲突或需要新补丁才能与新内核一起使用(您应该不是升级您的内核,直到您知道这些 DKMS 软件包将使用新内核进行编译!并且您的*dkms*包裹也应该保留并且只能手动升级)。然后你可以手动升级它们(并再次保留它们),如下所示:

     apt-get install linux-image-amd64 linux-headers-amd64 ; apt-mark hold linux-image-amd64 linux-headers-amd64
    

apt-cache您可以使用(特别是showpolicy子命令)and aptitude(其中有有用的whywhy-not子命令)开始调查系统上的实际原因。例如,尝试运行:

apt-cache show linux-image-amd64
apt-cache policy linux-image-amd64

aptitude why-not linux-image-amd64
aptitude why linux-image-amd64

您需要阅读并理解aptdpkg文档才能解释输出。其中大部分内容相当直接且含义明显,但有些则不然 - 特别是输出aptitude why,这需要理解每个输出行开头的代码字母。

相关内容