在执行操作时,apt-get upgrade
我有时会收到一条消息,提示“以下软件包已被保留”。例如:
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
linux-headers-server linux-image-server linux-server
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
这究竟意味着什么?显然这些软件包已被保留并没有安装,但为什么呢?
接下来的问题是:如何升级这些保留的软件包?
答案1
如果升级需要删除另一个软件包或安装新软件包,则该软件包将被“保留”。作为apt-get 升级的手册页解释:
检索并升级当前安装的可用新版本的软件包;在任何情况下都不会删除当前安装的软件包,也不会检索和安装尚未安装的软件包。
为了克服这个问题,你可以这样做
sudo apt-get --with-new-pkgs upgrade
这允许安装新的软件包。它会让您知道将安装哪些软件包,并在实际安装之前提示您。
答案2
基本报告是,apt-get upgrade
不会升级软件包管理器想要删除并重新安装软件包的软件包。这种情况在安全补丁中经常发生,因为通常,它实际上是被修补的最终可分发编译的前身库。 “继续删除东西”功能存在,apt-get dist-upgrade
但一定要先运行,apt-get update
以防上游人员在你上次尝试后发现了一些问题。有时他们会错过一些事情并很快修复它们。
答案3
尝试apt-get dist-upgrade
。从手册页:
dist-upgrade
dist-upgrade
除了执行 的功能外upgrade
,还可以智能地处理与新版本包的不断变化的依赖关系;apt-get
有一个“智能”冲突解决系统,如有必要,它将尝试升级最重要的软件包,而牺牲不太重要的软件包。因此,dist-upgrade
命令可能会删除一些包。该/etc/apt/sources.list
文件包含从中检索所需包文件的位置列表。另请参阅apt_preferences(5)
覆盖单个包的常规设置的机制。
虽然这个命令是用于升级到操作系统的新主要版本,它确实不是默认执行此操作。该文件/etc/apt/sources.list
必须更改为新版本并且然后dist-upgrade
使用a 。
答案4
在 Ubuntu 上,您可能会因为分阶段更新而看到此消息。看这个问题:
分阶段更新是逐步向用户推出的更新。如果您看到此消息,这是因为您属于尚未接收更新的用户组。如果您等待足够长的时间,就会为您提供更新。如果您愿意,您可以关闭分阶段更新。