我安装了无人值守升级通过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。一般我可以随意卸载和重新安装它,没有任何问题。
当然,我采取的方法应始终保持谨慎。