什么能让无人值守升级在笔记本电脑上可靠运行?

什么能让无人值守升级在笔记本电脑上可靠运行?

我年复一年地以各种形式与此作斗争。参见这里这里。要么是我配置错了(不太可能),要么是我以奇怪的方式使用我的电脑(我没有发现)。

我的电脑是笔记本电脑:

  1. 以前,我晚上都会把它关掉——结果它unattended-upgrade经常无法在需要的时候连接到互联网。结果是:我的电脑几个月都没有升级,而且很不安全。
  2. 这些天我大部分时间都处于登录状态,但晚上热点连接不可用。所以现在,运行unattended-upgrade但没有发现任何可更新的内容,显然是因为apt update无法成功运行。结果是:我的电脑几个月都没有升级,而且很不安全。

我如何确保systemd计时器的apt update运行间隔不会超过数周或数月?

典型输出/var/log/unattended-upgrades/unattended-upgrades.log

2022-02-09 06:30:27,331 INFO Starting unattended upgrades script
2022-02-09 06:30:27,334 INFO Allowed origins are: o=Ubuntu,a=focal, o=Ubuntu,a=focal-security, o=UbuntuESMApps,a=focal-apps-security, o=UbuntuESM,a=focal-infra-security, o=UbuntuESM,a=focal-security
2022-02-09 06:30:27,335 INFO Initial blacklist: 
2022-02-09 06:30:27,336 INFO Initial whitelist (not strict): 
2022-02-09 06:30:40,279 INFO No packages found that can be upgraded unattended and no pending auto-removals

sudo systemctl status apt-daily

* apt-daily.service - Daily apt download activities
     Loaded: loaded (/lib/systemd/system/apt-daily.service; static; vendor preset: enabled)
     Active: inactive (dead)
TriggeredBy: * apt-daily.timer
  Condition: start condition failed at Wed 2022-02-09 20:42:17 EET; 4h 17min ago
             └─ ConditionACPower=true was not met
       Docs: man:apt(8)

Feb 09 20:42:17 tbox systemd[1]: Condition check resulted in Daily apt download activities being skippe>
lines 1-9/9 (END)

sudo systemctl list-timers apt-daily

NEXT                        LEFT     LAST                        PASSED       UNIT            ACTIVATES>
Thu 2022-02-10 16:15:14 EET 15h left Wed 2022-02-09 20:42:17 EET 4h 22min ago apt-daily.timer apt-daily>

1 timers listed.
Pass --all to see loaded but inactive timers, too.
lines 1-5/5 (END)

注意:几个小时前曾重启过。未插入电源但已连接到网络。

最终结论。采用下面已接受的解决方案的版本,将时间调整apt-daily.timer到互联网连接更可能可用的时间。感谢那些提供帮助的人。结束。

更新的解决方案 2023:现在使用每小时systemd单调计时器,该计时器检查带有时间戳的文件,unattended-upgrade如果已过去超过 X 小时,则运行。这是万无一失的,它在任何情况下都能可靠地工作,并确保 Ubuntu 在笔记本电脑上保持安全。我认为这应该是开箱即用的。其他人似乎认为这是不合理的。如果有人需要,可以提供分步详细信息。

答案1

检查现有的 Ubuntu Server 20.04 安装,似乎unattended-upgrade运行是由 触发的apt-daily-upgrade.timer。这会在每天早上 6 点触发,随机延迟长达一小时。

root@ubuntu:~# systemctl cat apt-daily-upgrade.timer
# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true

[Install]
WantedBy=timers.target

一种可能简单的解决方案是覆盖OnCalendar设置,以便计时器在更有可能在线的时间触发。例如

mkdir /etc/systemd/system/apt-daily-upgrade.timer.d
cat <<EOF >/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=*-*-* 12:00
EOF
systemctl daemon-reload

这将改为在中午触发计时器。 unattended-upgrade默认情况下,每天仅运行一次。这是因为 的设置APT::Periodic::Unattended-Upgrade。从中挑选评论/usr/lib/apt/apt.systemd.daily

#  APT::Periodic::Unattended-Upgrade "0";
#  - Run the "unattended-upgrade" security upgrade script
#    every n-days (0=disabled)

此库存配置值为1天。

root@ubuntu:~# apt-config dump APT::Periodic::Unattended-Upgrade
APT::Periodic::Unattended-Upgrade "1";

您可以通过添加 apt 配置将计时器配置为每天一次以上。注释链接https://unix.stackexchange.com/a/541426/147262有几个建议。下面是添加 apt 配置的简单示例

cat <<EOF > /etc/apt/apt.conf.d/90myuu
> APT::Periodic::Unattended-Upgrade "always";
> EOF

如果您覆盖了,apt-daily-upgrade.timer那么您可能希望对 进行相同的覆盖apt-daily.timer。这也具有相应的 apt 配置值APT::Periodic::Update-Package-Lists

编辑我已将建议从每小时运行一次改为每天运行一次,每次运行的时间可能都是在线。我意识到每天运行一次的默认设置不受是否有unattended-upgrade任何软件包需要更新的影响。因此,unattended-upgrade仍然可以继续仅在不在线时运行。

评论

像那样对日常计时器进行超频是否存在任何潜在的缺点?

升级默认在夜间进行,以避免干扰用户活动。您将不再享有这种便利。

未满足 ConditionACPower=true。您可以更改该设置

您应该使用覆盖文件来更改此设置,而不是通过修改软件包安装的服务文件

mkdir /etc/systemd/system/apt-daily-upgrade.service.d
cat <<EOF > /etc/systemd/system/apt-daily-upgrade.service.d/override.conf
[Unit]
ConditionACPower=false
EOF
systemctl daemon-reload

覆盖 apt-daily.timer 的原因或缺点是什么?

apt-daily.timer触发 apt 命令来更新软件包信息并下载可用更新。如果这些命令在网络不可用时继续运行,则unattended-upgrade可能无法更新任何内容,因为它可能不知道有可用的更新。

相关内容