我想知道如何在没有基于 ncurses 的配置 grub-pc 对话框的情况下在 ubuntu 10.04 衍生发行版上更新 grub-pc。我尝试检查debconf-获取选择项之前和之后以及变化:
apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes -fuy install grub-pc
以及设置 DEBIAN_FRONTEND:
export DEBIAN_FRONTEND=noninteractive
一切都无济于事,我希望做的是保留配置文件的本地版本并在脚本中使用此代码进行离线安装。
答案1
你可以使用 'debconf-set-selections' 预加载 debconf 答案
首先,在已经安装 grub-pc 的主机上安装 debconf-utils。然后运行:
debconf-get-selections | grep grub-pc > /tmp/grubpc.debconf
你将得到一个类似这样的文件:
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
接下来,编辑 /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 环境变量(但我不确定它是否是用户可定义的或内部使用的。手册页中没有提到它)。
ucf 没有继承您指定的 dpkg --force-confold 设置也可能是一个错误……但 ucf 可能无法知道这一点。