如何预设“新版本的 /boot/grub/menu.lst 可用”的选项

如何预设“新版本的 /boot/grub/menu.lst 可用”的选项

我添加了biosdevname=1以及我的一些其他设置/etc/默认/grub在 Ubuntu 16.04 上。每次有内核更新时,我都会被问到:

Found kernel: /boot/vmlinuz-4.15.0-136-generic
Found kernel: /boot/vmlinuz-4.15.0-135-generic
A new version of /boot/grub/menu.lst is available, but the version installed currently has
been locally modified.

  1. install the package maintainer's version
  2. keep the local version currently installed
  3. show the differences between the versions
  4. show a side-by-side difference between the versions
  5. show a 3-way difference between available versions
  6. do a 3-way merge between available versions (experimental)
  7. start a new shell to examine the situation

What would you like to do about menu.lst? 2

我有大约 60 台机器需要更新,这让我的安西布尔我必须手动进入每台机器并选择“2”以保留现有的 grub 默认值。

我知道有 dpkg 环境变量告诉 apt “总是覆盖”或“总是保留”,但我不知道有什么方法告诉它选择单个包。

我怎么知道易于“永远保留”我的/etc/默认/grub配置?

答案1

提供此问题的程序称为dpkg。它是apt在类 Debian 系统上的软件包安装的后期调用的。您可以使用将配置选项传递给它-o Dpkg::Options::="OPTIONS"。因为您想dpkg使用--force-confold(强制配置 - 旧)执行,所以使用以下命令:

apt-get install -o Dpkg::Options::="--force-confold" …

这将禁用全部配置文件的修改。您可以将其与--force-confdef您未修改的配置相结合来更新配置:

apt-get install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" …

也可以看看:apt-get 安装时自动保留当前版本的配置文件

答案2

@jiwopene 给出的答案很好,但它适用于每个包裹在系统上进行了升级。这不是我问的问题,因为当配置文件中存在旧的、已弃用的选项时,某些升级的软件将无法运行。其他包只会用警告消息(例如)填充日志文件,sshdpostfix可能会导致中央日志记录(数据库索引、存储、搜索性能等)不必要的开销。我最终使用了下面的脚本。它应用@jiwopene提到的选项,但指定仅升级linux 通用包裹。然后,它使用autoremove相同的选项来删除旧内核。

需要环境DEBIAN_FRONTEND=noninteractive变量是因为某些系统会显示一个文本模式对话框(假设这是来自dialog正在安装的软件包)来询问是否覆盖已安装的配置文件,并且似乎忽略了dpkg指定的选项。

#!/bin/bash
# disable any dialog prompts
export DEBIAN_FRONTEND=noninteractive

# check if linux-generic package is installed here
dpkg -l linux-generic &>/dev/null

# if so, upgrade linux-generic package only and force-keep any config files
if [ "$?" -eq 0 ]; then
   apt-get install -y --only-upgrade -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" linux-generic

   # next, autoremove the old kernels and again force-keep grub config
   apt-get -y autoremove -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"
fi

相关内容