为什么apt无法检测到宇宙软件源中存在的更新的.deb版本呢?

我正在努力弄清楚为什么apt-get无法检测到较新版本的chromium-browser
这是在Ubuntu 16.04.3 LTS上的情况。
首先,这是sudo apt update的输出:
Hit:1 http://lu.archive.ubuntu.com/ubuntu xenial InRelease
Reading package lists... Done
Building dependency tree       
Reading state information... Done
All packages are up to date.

这是 apt-cache policy chromium-browser 的输出结果。
chromium-browser:
  Installed: 73.0.3683.86-0ubuntu0.16.04.1
  Candidate: 73.0.3683.86-0ubuntu0.16.04.1
  Version table:
 *** 73.0.3683.86-0ubuntu0.16.04.1 100
        100 /var/lib/dpkg/status
     49.0.2623.108-0ubuntu1.1233 500
        500 http://lu.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages

它显示我的安装版本为73,并且是最新的,并且与候选版本匹配,因此不会更新任何内容。
如果我尝试使用apt-get install -s chromium-browser模拟安装,我会得到:
chromium-browser is already the newest version (73.0.3683.86-0ubuntu0.16.04.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

然而,在宇宙软件仓库中有一个更新版本78,位于以下文件夹中:
http://lu.archive.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/ 这是我考虑的实际.deb文件的链接: http://lu.archive.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/chromium-browser_78.0.3904.108-0ubuntu0.16.04.1_amd64.deb 此外,为了未来阅读者在上述链接失效时能够查看,这里提供了该文件夹的屏幕截图。

enter image description here

请注意,如果我添加这个ppa...
sudo add-apt-repository ppa:canonical-chromium-builds/stage

...然后apt-cache policy chromium browser的输出是这个:
chromium-browser:
  Installed: 73.0.3683.86-0ubuntu0.16.04.1
  Candidate: 78.0.3904.108-0ubuntu0.16.04.1
  Version table:
     78.0.3904.108-0ubuntu0.16.04.1 500
        500 http://ppa.launchpad.net/canonical-chromium-builds/stage/ubuntu xenial/main amd64 Packages
 *** 73.0.3683.86-0ubuntu0.16.04.1 100
        100 /var/lib/dpkg/status
     49.0.2623.108-0ubuntu1.1233 500
        500 http://lu.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages

现在它确实将新版本78视为候选人。
然而,我的问题是为什么它无法从宇宙软件源检测到版本78,以及为什么我需要添加ppa,因为我已经证明了.deb文件的存在。
注意:我不是在询问如何更新软件包的指令 - 我知道如何安装.deb文件。相反,我想要了解apt工具的工作原理。
2个回答

简而言之

您需要在您的/etc/apt/sources.list文件中或者在软件和更新的“更新”选项卡中启用xenial-updatesxenial-security


似乎你对pool文件夹的结构有误解。它包含了所有版本的所有软件包。
你应该访问https://packages.ubuntu.com,并搜索chromium-browser package amd64来确定适用于你当前版本的正确版本。
然后你会得到以下关于xenialxenial-updates的信息:

xenial (16.04LTS) (web): Chromium网页浏览器,Chrome的开源版本[universe]
78.0.3904.108-0ubuntu0.16.04.1 [security]: amd64
xenial-updates (web): Chromium网页浏览器,Chrome的开源版本[universe] 78.0.3904.108-0ubuntu0.16.04.1: amd64

所以你可以从宇宙仓库获取最新的软件包版本:

78.0.3904.108-0ubuntu0.16.04.1:amd64

在我的完全更新的系统上,输出如下:

$ apt-cache policy chromium-browser chromium-browser: 已安装: 78.0.3904.108-0ubuntu0.16.04.1 候选版本: 78.0.3904.108-0ubuntu0.16.04.1 版本表: *** 78.0.3904.108-0ubuntu0.16.04.1 500 500 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages 500 http://archive.ubuntu.com/ubuntu xenial-security/universe amd64 Packages 100 /var/lib/dpkg/status 49.0.2623.108-0ubuntu1.1233 500 500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
在您的特定情况下,似乎您的/etc/apt/sources.list文件中缺少了xenial-updates。您需要通过终端重新启用它,或者访问软件和更新的“更新”选项卡(software-properties-gtk)来重新启用它。
另外,我需要指出当前的Ubuntu 16.04 LTS版本是16.04.6 LTS。
所以您确实需要启用xenial-updatesxenial-security,然后使用sudo apt-get update命令更新软件包列表,并使用sudo apt-get dist-upgrade命令安装所有最新的依赖项。这将解决许多与安全和更新相关的问题。

你说得对!在“软件和更新”中,我把“从以下位置安装更新:推荐的更新(xenial-updates)”关掉了。重新打开后,“apt-cache”就能检测到更新的版本了。所以如果我理解正确的话:那些链接到“xenial”的版本是用于首次安装的,对吗?但由于我已经安装了它,所以它现在在“xenial-updates”中搜索更新? - stackzebra
你需要启用这些 xenial-updatesxenial-security ,然后运行 sudo apt-get update 来获取新的软件包列表。此外,我强烈建议你运行 sudo apt-get dist-upgrade 来获取所有的新升级,将你的 16.04 LTS 从 16.04.2 升级到最新的 16.04.6 版本。 - N0rbert

提示:1 http://lu.archive.ubuntu.com/ubuntu xenial InRelease 你只在“xenial”中查找吗?
这是当“xenial”发布时的状态,“xenial-updates”包含稍后发布的版本。 http://lu.archive.ubuntu.com/ubuntu/dists/xenial/显示Contents-amd64.gz 2016-04-21 08:04,而http://lu.archive.ubuntu.com/ubuntu/dists/xenial-updates/Contents-amd64.gz 2019-12-11 05:57 该文件保存了哪个版本中可用的软件包信息,所有软件包都可以从“pool”目录下载。
在“xenial”文件中,你只能找到Version: 49.0.2623.108-0ubuntu1.1233 所以你需要将xenial-updates添加到你的sources.list中,然后应该能够进行更新。

是的,我现在明白它是如何工作的了:如果第一次安装,它会从xenial获取信息;如果只是更新,它会从另一个文件夹xenial-updates获取信息。所以那些在xenial中的.deb文件对于更新来说并不相关。 - stackzebra