PXE 启动 debian-installer preseed.cfg - 如何仅显示某些问题(例如主机名)

PXE 启动 debian-installer preseed.cfg - 如何仅显示某些问题(例如主机名)

我目前正在家里通过 PXE 启动使用 debian-installer(使用 Devuan Linux),并且希望安装程序询问主机名和域,并仅为域预先设置默认值,并且不确定这是否可能?目的是,如果我能了解预置的工作原理,我希望将这些知识带到我的工作场所,希望我们能让我们的支持团队更轻松地部署 Ubuntu,因为目前它主要是手动的。

据我了解,为了实现 netboot(我希望 Devuan netboot 的工作方式与 Debian 大致相同,因为我读过的大部分文档实际上都是 Debian)netcfg 必须在从以下位置获取其预置文件之前完成: TFTP 这意味着为了强制安装程序重新运行安装程序的 netcfg 部分,我必须执行...

d-i preseed/early_command string kill-all-dhcp; netcfg

...在指定之前...

d-i netcfg/hostname seen false
d-i netcfg/domain string network-name.int
d-i netcfg/domain seen false

...为了让 debian-installer 提出问题,还提供一个默认值。

此页面表明这是真的:https://www.debian.org/releases/stable/amd64/apbs05.html.en

...具体来说:B.5.2。使用预置来更改默认值

可以使用预置来更改问题的默认答案,但仍然有人问这个问题。为此,在设置问题的值后,必须将已看到标志重置为“false”。

这篇 Reddit 文章表明,其他人也尝试过将“seen”设置为 false 和 true,但没有效果: https://www.reddit.com/r/debian/comments/7ak9h0/debian_preseed_installation_no_dialog_for/

我还在其他地方读到 debconf 优先级在这里也发挥着作用。 Devuan netboot 文件中包含的 netboot vesamenu.c32 在内核命令行上指定了“priority=ritic”,但我了解主机名和域对话框是高的而是优先级,因此无论如何都不会出现,除非 debconf 优先级设置为高的。这样做会导致安装程序根据需要询问主机名,但遗憾的是在提供主机名后还会显示一个菜单,询问下一步应该是什么。我在内核命令行上将优先级设置为高,然后让预置运行上面的kill-all-dhcp;netcfg行来重新初始化网络并强制它请求主机名,然后再次将优先级更改为关键使用:

debconf debconf/priority critical 

...(如上面给定的预置文件顶部的 reddit 帖子所示)但遗憾的是,这导致安装程序没有提出主机名问题或域问题,并且运行全自动安装而没有提出任何问题。

我读过的一篇博客文章(不幸的是在我打开的选项卡列表中找不到这篇文章)表明预置文件中命令的顺序并不重要,这让我相信在回答主机名问题后我无法更改优先级

目前,内核命令行的优先级设置为关键,在 preseed.cfg 中我指定了以下相关部分:

## Locale/Keymap configuration
d-i debian-installer/locale string en_GB
d-i keyboard-configuration/xkb-keymap select gb

## Network configuration (none, just use DHCP)
d-i netcfg/choose_interface select auto

## Hostname configuration
d-i preseed/early_command string kill-all-dhcp; netcfg

debconf debconf/priority high

d-i netcfg/hostname string CHANGETHIS
d-i netcfg/hostname seen false
d-i netcfg/domain string network-name.int
d-i netcfg/domain seen false

debconf debconf/priority string critical 

我知道我可以通过让 debian-installer 最后运行一个自定义脚本来更改 /etc/hostname 中的主机名并在重新启动之前更新 /etc/hosts 来解决此问题,但我希望安装源保持不变,以便将来进行任何升级需要尽可能少的步骤来开始工作(希望只修改预置,而不是必须自定义和更新脚本以使用最新的操作系统版本),加上我读过的另一篇文章建议我只能指定di preseed/late_command和/或预种子/early_command所以我宁愿把它留到将来,以备预种子无法处理我们需要的东西的情况。

答案1

经过几个小时的测试,设法找到了可行的答案。希望记录其他人是否来寻找答案。

答案是根本不在预置文件中进行任何 netcfg 配置,而是在内核命令行上进行,优先级设置为高且不重要。

我使用了以下 menu.c32 / vesamenu.c32 配置:

label customauto
    menu label ^Automated install - Custom Auto
    kernel debian-installer/amd64/linux
    append auto=true priority=high netcfg/get_hostname?= netcfg/get_domain?=internal.domain preseed/url=tftp://<ip address to tftp server>/preseed.cfg vga=788 initrd=debian-installer/amd64/initrd.gz --- quiet 

测试注释:在内核命令行上使用以下命令会导致给定的行为:

netcfg/get_hostname=hostname会将系统的主机名设置为指定的内容(在本例中为“hosname”),并且不会提出任何问题,即使优先级设置为“高”。

netcfg/get_hostname?=hostname(注意 ? 及其位置)将设置默认值(在本例中为“主机名”),但也会使用您指定的默认值提出问题。

netcfg/get_hostname?=将根本不传递任何默认值,并提出问题。我最初认为这不会有效,但在我的测试中似乎有效!

对于线路也是如此netcfg/get_domain,我假设有任何其他问题,但我没有测试其他问题,因为这是我想要的配置。

在预置文件中,我删除了 netcfg 的所有 di 行,并且在指定其他内容之前的最顶部,我将优先级设置为关键:

d-i debconf/priority string critical

安装完成后,我确认主机名设置正确,/etc/hosts 也设置正确,并且我的预置文件中的所有其他设置都已正确应用,这让我相信此配置是好的。

这并不完全是我想要的答案,我希望这一切都在预置文件中完成,因为现在我必须确保,如果我想稍后随着需求的变化而改变行为,我必须检查两个地方,但我认为需要一些妥协被制造。

相关内容