当 Ubuntu Livepatch 修补了内核但建议重新启动以启动到新版本时,motd 中会出现一条如下消息:
*** Livepatch has fixed kernel vulnerabilities. System restart recommended on the closest maintenance window
/run/reboot-required
即使apt upgrade
安装了新内核,它也不会受到影响。
我很幸运,每周都有一次维护窗口,我希望系统在 Livepatch 建议时自动重启。换句话说,我想要 Livepatch 的即时补丁功能,但我不需要长时间正常运行。
实现这一目标的最佳方法是什么?据我所知,有四种可能性:
- 有没有办法将 Livepatch 设置为触摸
/run/reboot-required
? /run/reboot-required
即使 Livepatch 处于活动状态,内核升级后是否有办法将 apt 设置为 touch ?- 有没有办法将无人值守升级设置为在 Livepatch 建议时重新启动,即使
/run/reboot-required
不存在? - 有没有办法通过编程来测试 Livepatch 是否建议重新启动?
canonical-livepatch kernel-upgrade-required
似乎会产生特定的返回代码,但这些似乎没有官方记录。
答案1
问题中描述的问题是 Ubuntu 对无人值守升级包所做的更改所产生的(可能无法预料的)副作用。
在 Ubuntu 解决此问题之前,我发现最好的解决方法是使用当前版本 Debian 中的这个脚本,它将在内核升级后恢复通常需要重启的行为,而不考虑 Livepatch:
#!/bin/sh
case "$DPKG_MAINTSCRIPT_PACKAGE::$DPKG_MAINTSCRIPT_NAME" in
linux-image-extra*::postrm)
exit 0;;
esac
if [ -d /var/run ]; then
touch /var/run/reboot-required
if ! grep -q "^$DPKG_MAINTSCRIPT_PACKAGE$" /var/run/reboot-required.pkgs 2> /dev/null ; then
echo "$DPKG_MAINTSCRIPT_PACKAGE" >> /var/run/reboot-required.pkgs
fi
fi
细节:
- 将其作为新文件添加至
/etc/kernel/postinst.d
目录中(例如/etc/kernel/postinst.d/x-user-unattended-upgrades
)。 - 在某些情况下,它可能会重复在其他内核安装后挂钩脚本中发现的功能,但它不会造成危害。
- 系统需要安装无人值守升级包才能使用该脚本。
- 在撰写本文时,我已确认它适用于所有最新版本的 Ubuntu。如果您在遥远的未来某个时候遇到此答案,请仔细检查它是否仍然适用且相关。