Debian12 无人值守自动更新系统
准备工作
除非你是物理服务器,以及没有用过奇奇怪怪定制或修改的内核的 KVM 构架的 VPS 和云主机,否则升级系统更新内核是有一定机率导致 Grub 加载失败的,切记备份重要数据!
再强调一遍,一定要备份重要数据!
以下操作需要在 root 用户下完成,请使用 sudo -i
或 su root
切换到 root 用户进行操作。
安装必要软件
首先需要安装 unattended-upgrades
和 apt-listchanges
包:
apt update apt install unattended-upgrades apt-listchanges -y
默认情况下 unattended-upgrades
服务会自动启动并生效:
如果没有生效可以执行 systemctl enable --now unattended-upgrades
让其生效并开机自动启动。
配置 50unattended-upgrades 文件
我们直接编辑 /etc/apt/apt.conf.d/50unattended-upgrades
文件并输入以下内容:
cat > /etc/apt/apt.conf.d/50unattended-upgrades << EOF
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::Verbose "1";
APT::Periodic::AutocleanInterval "7";
Unattended-Upgrade::Mail "root";
Unattended-Upgrade::Origins-Pattern {
"origin=Debian,codename=\${distro_codename},label=Debian";
"origin=Debian,codename=\${distro_codename},label=Debian-Security";
"origin=Debian,codename=\${distro_codename}-security,label=Debian-Security";
};
Unattended-Upgrade::Package-Blacklist {
};
Unattended-Upgrade::Automatic-Reboot "false";
EOF
然后重启服务:
systemctl restart unattended-upgrades
上述配置中:
APT::Periodic::Update-Package-Lists "1";
和APT::Periodic::Unattended-Upgrade "1";
代表打开了自动更新,如果设置0
则不会自动更新。APT::Periodic::AutocleanInterval "7";
这个配置代表残留的无用依赖包保留 7 天,7 天后自动清理。Unattended-Upgrade::Origins-Pattern
代表需要更新的apt
源,我们仅更新包含debian
和debian-security
的仓库,如果您还需要更新某些第三方apt
源安装软件,也可以加入自定义origin
比如:
至于如何获取 origin
,可以直接查看这个软件仓库的 Release
文件,比如 PowerDNS 仓库的这个 Release:
root@debian ~ # curl -s https://repo.powerdns.com/debian/dists/bullseye-auth-master/Release | grep Origin Origin: PowerDNS
Unattended-Upgrade::Package-Blacklist
是黑名单,可以把不需要自动更新的软件加进去,比如:
Unattended-Upgrade::Package-Blacklist {
// 不自动更新所有 linux- 开头的包
"linux-";
// 不自动更新 Apache 2
"apache2";
// 也支持正则,这个规则不更新所有包含 xen,xenstore 以及 libxen 开头的包,比如 xen-system-amd64, xen-utils-4.1, xenstore-utils 和 libxenstore3.0
"(lib)?xen(store)?";
};
APT::Periodic::Verbose "1";
默认情况下这个设置是 0
,代表不发送任何报告,1
代表进度报告。
Unattended-Upgrade::Mail "root";
则是发送邮件给 root
用户,可以根据需求自定义。
Unattended-Upgrade::Automatic-Reboot "false";
则是不自动重启,特么服务器没事重启干嘛……
测试配置
我们可以运行这个命令测试规则是否正确:
unattended-upgrades --dry-run --debug
如果没有报错即代表没问题,这样我们就配置好了 Debian 的无人值守自动更新,再也不用担心出安全漏洞无法及时更新系统咯。
需要查看日志可以使用 journalctl -u apt-daily.service | tail
命令:
我们看到 download updated metadata (success).
和 unattended-upgrade -d (success)
即为成功。
参考资料
无人值守自动更新系统
https://u.sb/debian-unattended-upgrades/
Automatic upgrades in Debian
https://www.dwarmstrong.org/unattended-upgrades/