最近一周左右,当我让自动更新程序从 UI 运行时,我收到上述消息。该消息继续说:“这需要安装来自未经身份验证的来源的软件包”。我读到建议这样做apt-upgrade
。但我没有找到任何解释为什么这是预期的解决方案。
我想了解自动更新发布的过程,为什么现在需要它apt-upgrade
,在我以这种方式接触我原本非常稳定的系统之前。我不记得过去几年我的系统有需要这样做的更新。
Ubuntu 14.04 LTS。
谢谢!
答案1
要了解为什么会发生这种情况,首先应该了解普通 apt(即未设置任何优先级的 apt)的工作原理。假设您要使用 运行升级apt upgrade
(我假设这就是您所说的 apt-upgrade,因为我找不到有关 的任何信息apt-upgrade
):首先,apt 将检查存储库中所有已安装软件的本地版本与远程版本,并查看是否需要升级软件包。为了演示,让我们创建一个假设场景,其中 1 个软件包sayhello
需要升级。
这是一个假想的变更日志:
sayhello 1.1 now depends on libhello (>= 1.0) to print "hello."
现在假设您的 sources.list 中列出了两个来源,一个是股票 Ubuntu 存储库,另一个是Jim's amazing taco repo
。
Jim 的 repo 包含以下 3 个包:
jimplayer 2.5 (No depends)
jimsbetterhello 1.0 (Depends on libhello (>= 2.0))
libhello 2.0 (No depends)
不久前您只使用此存储库安装了 jimplayer,但后来 Jim 似乎决定将 jimsbetterhello 添加到存储库中。现在事情变得有趣了...
出于兼容性原因,Ubuntu 的 repos 仍然使用 libhello 1.5(因为有些软件包还不能在新版 libhello 上运行)
现在,当 apt 去升级时sayhello
,它会遇到一个难题。有两个版本libhello
可以安装!它应该选择哪一个?好吧,默认情况下 apt 会选择软件包的最新版本。doesn't conflict with other currently installed packages.
现在,通常这个过程对用户是透明的,但如果你没有添加第三方存储库的 GPG 密钥,或者密钥发生了更改或其他什么,即使你是sayhello
从默认的 Ubuntu 存储库安装的,libhello 2.0 也会是一个不受信任的软件包,apt 会就此发出警告。这只是 apt 就此发出警告的众多不同原因之一。也可能是由于缺少仅在您添加的第三方存储库中可用的软件包。最好的解决方法是将默认存储库设置为更高的优先级,并修剪任何不必要的第三方存储库,而不要将其密钥添加到受信任的钥匙串中。