对于 DevOPS 脚本,升级 Debian 系统后,我需要检查 Debian 上当前最新安装的 Linux 内核版本,并将其与正在运行的版本进行比较 ( uname -r
)。
解决这个问题的最简单方法是什么?
如果需要,如何自动重新启动系统?
答案1
正如问题中所指出的,当前运行的内核可以通过以下方式获取:
uname -r
输出如下所示:
4.19.0-8-amd64
相反,最新内核包的版本需要从包管理器中获取。假设amd64
架构和标准安装,我们可以检查linux-image-amd64
元包的依赖关系,它始终指向最新的内核包:
dpkg-query -f '${Package}: ${Depends}\n' -W linux-image-amd64
输出如下所示:
linux-image-amd64: linux-image-4.19.0-8-amd64
要将其放入 shell 脚本中,需要两个额外的步骤。首先,我们应该通过以下方式自动确定架构:
dpkg --print-architecture
输出如下所示:
amd64
其次,我们需要linux-image-
从内核包名称中去掉前缀:
echo linux-image-4.19.0-8-amd64 | sed s/^linux-image-//
输出如下所示:
4.19.0-8-amd64
将所有这些放在一起并添加正确的 shell 脚本引用,我们得到:
if [ "$(uname -r)" != "$(dpkg-query -f '${Depends}' -W "linux-image-$(dpkg --print-architecture)" | sed s/^linux-image-//)" ]; then
reboot
fi
答案2
以通用方式执行此操作的最佳方法是在此评论中解释了。
复制并粘贴此脚本,make 可执行并运行它将给出您预期的结果。