有时,当我尝试升级我的软件包时,少数软件包未升级。
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
两个最常见的原因是:
“保留”包所依赖的一个或多个包在存档中尚不可用。如果您使用 Debian Sid 或 Debian Testing 或其他一些“滚动”类型发行版,这种情况最为常见,但有时也会在常规和安全更新发行版中发生。
这是一个时间问题 - 当包被上传、接受到存档中,然后分发到本地存储库镜像时。通常会在一两天内解决,但如果正在进行重大升级(例如 KDE 或 Gnome 的新版本或涉及大量软件包的软件包)和/或一个软件包占用了很多软件包,有时可能需要更长时间其他包。
这不值得担心。只需等待几天后再次
apt update
尝试即可apt upgrade
。apt dist-upgrade
您已手动持有一些包裹(例如使用
apt-mark hold
)。您可以使用 自行修复此问题apt-mark unhold
。顺便说一句,我建议同时保留
linux-headers-amd64
和linux-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
您可以使用(特别是show
和policy
子命令)and aptitude
(其中有有用的why
和why-not
子命令)开始调查系统上的实际原因。例如,尝试运行:
apt-cache show linux-image-amd64
apt-cache policy linux-image-amd64
aptitude why-not linux-image-amd64
aptitude why linux-image-amd64
您需要阅读并理解apt
和dpkg
文档才能解释输出。其中大部分内容相当直接且含义明显,但有些则不然 - 特别是输出aptitude why
,这需要理解每个输出行开头的代码字母。