无人值守的 grub-pc 更新

fec*_*130 6 ubuntu grub apt

我想知道如何在没有配置基于 grub-pc ncurses 的对话框的情况下在 ubuntu 10.04 衍生发行版上更新 grub-pc。我曾尝试检查debconf-get-selections之前和之后的变化以及以下方面的变化:

apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes -fuy install grub-pc
Run Code Online (Sandbox Code Playgroud)

以及设置 DEBIAN_FRONTEND:

export DEBIAN_FRONTEND=noninteractive
Run Code Online (Sandbox Code Playgroud)

一切都无济于事,我希望做的是保留配置文件的本地版本并在脚本中使用此代码进行离线安装。

cas*_*cas 5

您可以使用“debconf-set-selections”预加载 debconf 答案

首先,在已经安装了 grub-pc 的主机上安装 debconf-utils。然后运行:

debconf-get-selections | grep grub-pc > /tmp/grubpc.debconf
Run Code Online (Sandbox Code Playgroud)

你会有一个看起来像这样的文件:

grub-pc grub2/kfreebsd_cmdline  string
grub-pc grub2/device_map_regenerated    note
grub-pc grub2/linux_cmdline     string
grub-pc grub-pc/install_devices_failed  boolean false
grub-pc grub-pc/chainload_from_menu.lst boolean true
grub-pc grub-pc/kopt_extracted  boolean true
grub-pc grub-pc/postrm_purge_boot_grub  boolean false
grub-pc grub2/kfreebsd_cmdline_default  string  quiet
grub-pc grub2/linux_cmdline_default     string
grub-pc grub-pc/install_devices_empty   boolean false
grub-pc grub-pc/install_devices multiselect     /dev/sda
grub-pc grub-pc/install_devices_failed_upgrade  boolean true
grub-pc grub-pc/install_devices_disks_changed   multiselect     /dev/sda
grub-pc grub-pc/mixed_legacy_and_grub2  boolean true
Run Code Online (Sandbox Code Playgroud)

接下来,编辑 /tmp/grubpc.debconf 以适应新系统。特别是 grub-pc/install_devices 条目。

您不需要所有这些条目。我的猜测是,对于 grub-pc,您可能只需要 install_devices 和 linux_cmdline* 条目,并且(如果您之前安装了 grub-legacy)可能还需要 chainload_from_menu.lst 条目。

编辑完文件后,将其 scp 到远程机器并将其提供给 debconf-set-selections。

您现在应该可以在没有 debconf 对话框的情况下远程安装 grub-pc。

[ 之后 ]

grub-pc 包依赖于 ucf,它为列为conffile 的包拥有/创建的文件提供相同类型的 conffile 管理。

到目前为止,在我检查过的所有系统上,/var/lib/ucf/cache/ 包含一个名为 :etc:default:grub 的文件,因此它可能是导致此问题的候选者。

尝试取消注释目标机器上 /etc/ucf.conf 中的 'conf_force_conffold=YES' 行。这可以自动用于批量升级许多机器,当然,使用 scp 或 sed (似乎没有 debconf 条目)。

如果这是导致它的原因,它忽略您的 DEBIAN_FRONTEND=noninteractive 设置这一事实可能需要错误报告。查看脚本,debconf 和 ucf 似乎都使用 DEBIAN_HAS_FRONTEND env var(但我不确定它是用户可定义的还是内部使用的。手册页中没有提到)。

也可能是 ucf 没有继承您指定的 dpkg --force-confold 设置的错误……但是 ucf 可能无法知道这一点。