为什么新的存储库会自动安装包?

为什么新的存储库会自动安装包?

是否存在这样的情况:新添加的存储库需要先安装“依赖”包,然后才能要求安装任何新内容?

我刚刚遇到了以下情况:

当我的系统是最新的时,我添加了Certbot存储库(http://ppa.launchpad.net/certbot/certbot/ubuntu),运行更新后,报告有九个软件包可升级。我尝试进行升级,得到以下结果:

$ sudo aptitude safe-upgrade
Resolving dependencies...                
The following NEW packages will be installed:
  python3-certifi{a} python3-idna{a} 
The following packages will be upgraded:
  python-chardet python-pkg-resources python-six python3-chardet python3-configobj python3-pkg-resources python3-requests python3-six python3-urllib3 
9 packages upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 906 kB of archives. After unpacking 1,183 kB will be used.

我可以理解软件包正在升级:新存储库中已安装了较新版本的软件包,因此它们被标记为升级。但为什么它试图安装新的套餐?有问题的套餐肯定与存储库中的软件,但是为什么它们会自动安装呢?

如果它们是我系统上的某个东西的依赖项,那么它之前是如何工作的?我该如何调查到底发生了什么?

更新

我检查了反向依赖关系apt-cache;例如,

$ sudo apt-cache rdepends python3-certifi
python3-certifi
Reverse Depends:
python3-requests

随着Certbot存储库已禁用,我得到

$ apt-cache depends python3-requests
python3-requests
Depends: python3-urllib3
Depends: <python3:any>
    python3:i386
    python3
Depends: ca-certificates
Depends: python3-chardet
Depends: python3-urllib3

当我启用它时,我得到

$ apt-cache depends python3-requests
python3-requests
Depends: python3-certifi
Depends: python3-chardet
Depends: python3-idna
Depends: python3-urllib3
Depends: <python3:any>
    python3:i386
    python3
Depends: ca-certificates
Depends: python3-urllib3

因此,我想,真正的问题是:软件包依赖关系是否取决于可用的软件包/存储库? 我认为依赖关系应该是固定的:一个包要么需要另一个包才能工作(不管您是否可以使用它),要么不需要(在这种情况下,它实际上不是一个依赖关系)。

系统

  • Ubuntu 16.04
  • 内核 4.13.0-45-通用#50~16.04.1-Ubuntu 64 位

答案1

您已经回答了您的问题:PPA 具有已安装软件包的较新版本,因此在添加 PPA 并运行apt-get updateAPT 后会看到较新版本可用并列出一些具有更新的软件包。

您可以通过运行获取详细信息apt-cache policy

apt-cache policy python-chardet python-pkg-resources python-six \
python3-chardet python3-configobj python3-pkg-resources python3-requests \
python3-six python3-urllib3 

并检查其来源(见版本表)。

您还可以检查两个新包的安装位置以及安装它们的原因(使用以下命令检查apt-cache rdepends):

apt-cache policy python3-certifi python3-idna
apt-cache rdepends python3-certifi python3-idna

您可以咨询man apt-cache了解详情。

答案2

使用建议的命令诺伯特在 OFTC #debian IRC 频道的一些好心人的帮助下,我通过软件包追溯了原因,并弄清了为什么会发生这种情况,这可能是看到无法解释的新软件包自动安装时最有可能发生的情况:

新添加的存储库包含现有软件包的较新版本,该版本已标记为需要升级。升级后的软件包的新版本具有新的依赖项(旧版本没有),因此新的依赖项被标记为自动安装

例如,现有包的升级版本python3-requests具有python3-certifi新的依赖项,因此后者被标记为安装。

python3-certifi这是我的错,我最初忽略了( )的反向依赖项python3-requests是正在升级的软件包之一。

相关内容