题 无人值守的grub-pc更新


我想知道如何在没有基于配置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

以及设置DEBIAN_FRONTEND:

export DEBIAN_FRONTEND=noninteractive

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


5
2017-09-12 14:21






答案:


你可以用'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 =非交互设置的事实可能需要一个错误报告。看看这些脚本,debconf和ucf似乎都使用了DEBIAN_HAS_FRONTEND env var(但我不确定它是用户可定义还是内部使用。在手册页中没有提到它)。

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


4
2017-09-12 14:46



我同意我会认为这样可行,但是如果你阅读我的原帖,你会看到我说“在安装新版本的grub-pc之前和之后检查debconf-get-selections。 Debconf-set-selections在这种情况下不起作用。我要做的是编写一个脚本,将Bodhi linux 1.1更新为Bodhi linux 1.2。 Bodhi 1.1已经安装了grub-pc(版本1.98-lubuntu10),同时更新到bodhi 1.2安装版本1.98-lubuntu12。 - fecko2130
好的,在升级过程中会问到什么确切的问题?顺便说一句,这在一般情况下确实有效 - 巧合的是,我在看到你的问题之前几个小时就使用了这种技术,使用pdsh将ocsinventory-agent批量安装到一堆工作站,虚拟机和服务器上。 grub-pc升级必须要求特定的东西。 - cas
grub-pc的debian包依赖于ucf,所以我假设ubuntu和bohdi包对:)。它可能不是debconf提出问题,而是ucf。请参阅/etc/ucf.conf中的conf_force_conffold选项。 - cas
很好,ucf.conf选项conf_force_conffold解决了这个问题。非常感谢您的见解:)对于记录,问题是'配置文件的新版本/ etc / default / grub可用,但当前安装的版本已在本地修改。你想对修改后的配置文件做什么?' - fecko2130