无人值守升级---无任何障碍,默默更新所有内容

无人值守升级---无任何障碍,默默更新所有内容

我安装了无人值守升级通过apt-get installl unattended-upgrade,然后用来配置它dpkg-reconfigure unattended-upgrade

然后我看到了以下屏幕,上面写着:

请为无人值守升级来源模式指定一个值

在此处输入图片描述

如果一个人想给予 100% 的可信度unattended-upgrade,即允许它始终升级所有内容,那么应该在那里回答什么?它确实可以升级——我不想指定任何具体的东西,我只希望一切都能升级和更新,或者至少在最大可能的情况下。没有障碍。

如果有的话,什么价值才是好的?

  • 我执行了man unattended-upgrade但没有找到有关该信息。

  • 通过浏览nano /etc/apt/apt.conf.d/50unattended-upgrade并没有得到任何我可以识别的“教学数据”来确定什么是最适合我的选择。

  • 我没有找到有关此的任何 StackExchange 会话。

答案1

Origins-Pattern匹配origin=*所有已配置的源。

但请注意,这并不能保证所有内容始终是最新的:

  • 可以通过Unattended-Upgrade::Package-Blacklist、通过 apt 固定偏好设置或通过 dpkg 保留来排除软件包。
  • 配置文件已更改的软件包可能需要人工干预,具体取决于Dpkg::Options
  • 软件可能需要重新启动。另请参阅Unattended-Upgrade::Automatic-Reboot
  • 源可能会更新为有冲突的包,无法一起安装。

答案2

交叉链接到此处发布的类似问题的答案:https://askubuntu.com/a/1512720/1786549

Ubuntu 已经不再使用 Cron,而是使用 systemd 来处理大多数(所有?)以前由 cron 处理的事情。(查看所有计时器sudo systemctl list-units | grep timer

有两个 systemd 计时器用于处理“无人值守升级”。apt-daily.timer每天进行一次“apt 更新”,只是为了让您随时了解任何可用的更新。

第二个apt-daily-upgrade.timer,将触发实际升级运行。它将升级什么(以及是否自动重启)由 控制/etc/apt/apt.conf.d/50unattended-upgrades。但它不必每天运行!可以使用覆盖文件调整时间表。见下文。


我的系统正在运行 Ubuntu Jammy,并带有 PostgreSQL、Git、Datadog 和 GitLab 的自定义存储库。

以下是您输入的内容/etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
        "${distro_id}ESMApps:${distro_codename}-apps-security";
        "${distro_id}ESM:${distro_codename}-infra-security";
        "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
        "${distro_id}:${distro_codename}-backports";
        "apt.postgresql.org:${distro_codename}-pgdg";
        "LP-PPA-git-core:${distro_codename}";
        "packages.gitlab.com/gitlab/gitlab-*:${distro_codename}";
//        ":";   // uncomment these two lines to wildcard for EVERYTHING, then the selections above and below become irrelevant
//        "*:*"; // uncomment this as well to wildcard
};

Unattended-Upgrade::Origins-Pattern {
       "site=apt.datadoghq.com";  // Datadog is special.
};

这同时使用了一个Unattended-Upgrade::Allowed-Origins参数和一个Unattended-Upgrade::Origins-Pattern参数。

原因是::Allowed-Origins只选择原点:存档对。但 datadog 发布了一个空白原点和一个空白存档。因此,为了适应 datadog(不使用通配符),我还提供了一个参数::Origins-Pattern,使用site确实存在的元标记来选择 datadog。

然后,为了控制升级发生的时间,将其放入脚本中,或复制到 shell 提示符中(需要以 root 身份执行此操作):

#!/bin/bash
mkdir -p /etc/systemd/system/apt-daily-upgrade.timer.d
cat << EOF > /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=Sat *-*-* 03:00:00
RandomizedDelaySec=0m
EOF

systemctl daemon-reload
systemctl enable --now apt-daily-upgrade.timer

现在将在周六凌晨 3 点执行实际升级,而不是每天。

OnCalendar=很重要,以便在添加新计划之前清除之前的计划。

有关 systemd 计时器的文档可以在这里找到:https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html

随着升级事件变得更加确定,您可以将这些参数添加到/etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Automatic-Reboot true

Unattended-Upgrade::Automatic-Reboot-Time now

希望这对某人有帮助!

答案3

我认为unattended-upgrades这不是正确的做法。这个 cronjob 是一种更简单的方法:

crontab -e

然后添加 cronjob:

0 0 * * 0 apt-get upgrade -y && apt-get update -y

笔记:

我通过这种方式升级更新的系统是一个没有太多数据的 WSL Ubuntu。一般我可以随意卸载和重新安装它,没有任何问题。

当然,我采取的方法应始终保持谨慎。

相关内容