无人值守升级忽略了某些软件包

无人值守升级忽略了某些软件包

我已经设置了无人值守升级,但有些软件包没有自动更新。

root@survey:/home/martin# apt update

root@survey:/home/martin# unattended-upgrade -v --dry-run
Initial blacklisted packages:
Initial whitelisted packages:
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=xenial, o=Ubuntu,a=xenial-updates, o=Ubuntu,a=xenial-security, o=UbuntuESM,a=xenial
No packages found that can be upgraded unattended and no pending auto-removals

root@survey:/home/martin# /usr/lib/update-notifier/apt-check -p
python-rfc3339
python-zope.hookable
python-configargparse
python-zope.component

起源的配置如下/etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-updates";
        "${distro_id}:${distro_codename}-security";
        "${distro_id}ESM:${distro_codename}";
};

据我所知,待处理的软件包来自官方 ubuntu 存储库(Launchpad 链接),因此我看不出它没有被采纳的理由unattended-upgrade

该命令的输出确实表明

没有找到任何软件包可无人值守升级并且没有待处理的自动删除。

是否存在这样的情况:该工具拾取了来自允许来源的软件包,但由于某种原因,不允许无人值守升级?我可以采取哪些进一步的步骤来找出原因为什么某些套餐不符合资格?

答案1

我认为您遗漏了这一点20auto-upgrades,应该先正确实施,看看是否能解决您的问题,然后再继续。您可以看到,这是自动升级文档。

$ cat /etc/apt/apt.conf.d/20auto-upgrades 
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

如果您有该文件但仍然无法正常工作,您可以尝试找出是什么阻止了软件包。我更喜欢Origins-PatternAllowed-Origins它与文档不同,但对我来说效果很好:

$ vim /etc/apt/apt.conf.d/50unattended-upgrades
# You need to customize configuration

以下是关键“模式”组件的一个例子50unattended-upgrades

Unattended-Upgrade::Origins-Pattern {
        // Codename based matching:
        // This will follow the migration of a release through different
        // archives (e.g. from testing to stable and later oldstable).

        // Archive or Suite based matching:
        // Note that this will silently match a different release after
        // migration to the specified archive (e.g. testing becomes the
        // new stable).
//      "o=Ubuntu,a=stable";
//      "o=Ubuntu,a=stable-updates";
//      "o=Ubuntu,a=proposed-updates";
        "origin=Ubuntu,codename=${distro_codename}";
};

这是一个不基于存储库进行限制的示例:

Unattended-Upgrade::Origins-Pattern {
      "o=*";
}

你只需要Origin-Patterns 或者 Allowed-Origins而不是两者兼而有之。这一点在 Debian 的无人值守升级文档。

尝试仅启用此功能,即仅安全更新。测试它是否有效,然后逐个添加其他模式,直到添加每个模式并验证每个更新都不会破坏您的试运行测试。

如果您有混合系统,我还建议指定 Ubuntu 并为 Debian 系统编写完全不同的配置文件。


确保您没有持有任何可能阻止更新的包:

$ sudo apt-mark showhold

确保您可以正常安装更新,或者apt已正确配置每个版本类型的优先级:

$ cat /etc/apt/preferences.d/custom
Package: *
Pin: release a=bionic
# Only explicit installs
#Pin-Priority: 1001
# Explicit and dependencies
Pin-Priority: 900

Package: *
Pin: release a=testing
Pin-Priority: 399

Package: *
Pin: release a=unstable
Pin-Priority: -10

某些更新将需要重新启动机器,您必须决定是否手动执行此操作,或者允许apt在更新需要时在特定时间重新启动机器。

答案2

之前有人问过类似的问题:

接受的答案指出:

大部分答案都在无人值守升级日志文件中,位于 /var/log/unattended-upgrades/unattended-upgrades.log

以下是一个例子:

2018-01-08 06:17:51,770 INFO Starting unattended upgrades script
2018-01-08 06:17:51,771 INFO Allowed origins are: ['o=Ubuntu,a=xenial-security']
2018-01-08 06:18:07,765 INFO No packages found that can be upgraded unattended and no pending auto-removals

看看中间那行“允许的来源”。这意味着软件存储库。那里唯一的来源是 -security。没有 -upgrades,没有 -backports,没有 PPA,没有第三方存储库。

换句话说,这个示例 unattended-upgrades 是仅有的提供安全升级。仅此而已。

您可以通过软件和更新控制面板添加、删除或编辑允许的来源(存储库),或者通过编辑位于的无人值守升级配置文件来添加、删除或编辑允许的来源(存储库) /etc/apt/apt.conf.d/50unattended-upgrades

答案的其余部分是 Xenial (16.04) 已有两年历史。旧软件的新安全更新较少。


补充阅读:

答案3

值得检查的是,如果您已将软件包标记为保留,则可能会阻止软件包升级。

sudo apt-mark showhold

相关内容