![关于 Debian 11 自动化安装的建议](https://linux22.com/image/782929/%E5%85%B3%E4%BA%8E%20Debian%2011%20%E8%87%AA%E5%8A%A8%E5%8C%96%E5%AE%89%E8%A3%85%E7%9A%84%E5%BB%BA%E8%AE%AE.png)
我目前正在尝试通过 Packer for Nutanix 环境自动创建 Debian 11 模板,并且需要一些有关预安装/自动化 Debian 安装的建议。
首先,读完这本圣经后https://www.debian.org/releases/stable/amd64/apbs02.fr.html我开始使用 preseed.cfg 文件。我从 Debian 提供的 preseed.cfg 文件开始,然后调整了一些内容以满足我的需求。最后,我使用debconf-set-selections -c preseed.cfg
命令 => 验证语法一切正常。
现在,我发现有 3 种不同的方法来使用 preseed.cfg:
- 通过 initrd :对我来说似乎相当困难,而且没有找到简单的教程/文档
- 通过网络:由于防火墙限制,目前无法通过网络进行
- 通过文件:目前看来这是最简单、最好的选择
当 Packer 开始创建虚拟机时,它会将 debian ISO 作为 CD-ROM 加载到第一个位置,并将一个空的虚拟磁盘加载到第二个位置。我告诉 Packer 将我的 preseed.cfg 脚本作为 CD-ROM 加载,因此从虚拟机管理程序的角度来看,第二个 CD-ROM 驱动器安装在第三个位置。
但是,在这种情况下,VM 在 ISO(cd-rom 第一个位置)上启动,它不会挂载具有 preseed.cfg 文件的第二个 cd-rom 驱动器,而且除非我进入 debian 控制台然后挂载第二个驱动器,否则我无法访问它。
我看到一个论坛关于将 preseed.cfg 上传到我原来的 debian.iso 文件夹并像这样修改 /isolinux/txt.cfg 文件(然后使用 OSCDIMG 重新创建 iso):
label install
menu label ^Install
kernel /install.amd/vmlinuz
append vga=788 initrd=/install.amd/initrd.gz preseed/file=/cdrom/preseed/preseed.cfg --- quiet
我的问题是:这样做公平吗?我是否遗漏了什么,或者有什么更简单的方法可以让它更轻松地运行?
编辑 :我尝试了 initrd 方法,唯一剩下的就是我必须手动选择自动安装。如何摆脱这个动作?
编辑2:2023 年 2 月 1 日
- 我尝试了另外 2 种不同的方法,第一种是在 isolinux/txt.cfg 中有此行
append auto=true priority=critical vga=788 initrd=/install.amd/initrd.gz preseed/file=/cdrom/preseed.cfg --- quiet
=> NOK,它仍然在启动菜单上启动(但如果我手动选择自动安装就可以了,所以这意味着 preseed.cfg 运行得很好) - 第二,
prompt 1 timeout 1
在 isolinux.cfg 中测试 => 直接手动选择语言...
编辑3:2023年3月1日 这是我使用的 preseed.cfg:
# SETUP AUTO MODE
d-i auto-install/enable boolean true
d-i debconf/priority select critical
# LANGUAGE & KEYMAP
d-i debian-installer/locale string fr_FR
d-i keyboard-configuration/xkb-keymap select fr(latin9)
# NETWORK
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string template-debian-11-x64
d-i netcfg/get_domain string my_domain.net
d-i netcfg/hostname string template-debian-11-x64
# MIRRORS
d-i mirror/http/hostname string http://deb.debian.org/debian/
d-i mirror/http/hostname string http://security.debian.org/debian-security
# ACCOUNTS
d-i passwd/root-password password mypassword!
d-i passwd/root-password-again password mypassword!
d-i passwd/user-fullname string user
d-i passwd/username string user
d-i passwd/user-password password mypassword!
d-i passwd/user-password-again password mypassword!
d-i passwd/user-uid string 1010
d-i passwd/user-default-groups string si audio cdrom video
# LVM PART
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string lvm
d-i partman-auto-lvm/guided_size string 95%
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto/choose_recipe select multi
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
#APT
d-i apt-setup/cdrom/set-first boolean false
tasksel tasksel/first multiselect standard, ssh-server
# GRUB
d-i grub-installer/bootdev string /dev/sda
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
#FINAL
d-i finish-install/reboot_in_progress note
多谢
盖尔
答案1
关于您的第一个问题,我认为没有比debian installer
将预置文件传递给它更简单的方法来启用自动安装。安装第二个映像可能是一个适合您特定需求的好主意,但据我所知,它debian installer
不尊重第二个媒体的预置,而且据我所知没有解决方法(仅供参考,ubuntu 的subiquity
安装程序确实支持此类输入)。
为了实现“无需动手”安装,我将解释需要注意的两件事。
Debian 安装程序配置(预置)
为了使debian installer
go 完全自动化,你需要在预置文件中添加以下信息:
d-i debconf/priority select critical
这只会告诉debian installer
不要问它可以找到答案的问题。除此之外,您还需要使用 启用自动模式d-i auto-install/enable boolean true
,但现在请忽略它(我将在下一部分讨论自动模式)。从auto mode
文件:
这汽车内核参数是自动安装/启用并将其设置为真的延迟回答区域设置和键盘问题,直到有机会预先设置它们之后,而优先事项是debconf/优先级并将其设置为批判的阻止询问任何优先级较低的问题。
附言您可以将一些问题/答案作为内核参数传递,key=value
格式为,其中key
是别名。这需要更改启动参数。查看完整列表:aliases useful with preseeding
引导加载程序配置
除了安装程序配置之外,我们还需要对引导加载程序进行一些更改。为了使isolinux
引导加载程序在无人值守安装场景中工作,我对 iso 中的配置文件进行了以下 2 项更改:
- 通过内核参数设置自动模式。
- 告诉
isolinux
自动选择菜单中的默认条目。
第一个更改是通过添加auto=true
到append
默认菜单项的行来完成的。对于 debian 11,我发现“图形安装”是默认条目。由于此条目的配置是从 读取的isolinux/gtk.cfg
,因此此更改应应用于该文件。例如,您可以将示例引导加载程序配置附加行更改为"append auto=true vga=..."
。
第二个目标是通过改变timeout 0
来实现timeout 1
的isolinux/isolinux.cfg
(见这)。
注1:内核auto=true
参数是预置配置的别名d-i auto-install/enable boolean true
。事实证明,出于某些原因,它应该由内核参数启用。将其等效项放在预置文件中仍然会导致语言选择提示等待用户输入(也许在读取预置文件时,debian installer
启用自动模式已经太晚了?)。
笔记2:你不需要prompt 1
在 isolinux 配置中。它可能会做与你想要的相反的事情,即阻止自动选择默认条目(参见最后一行本节)。
注3:更改引导加载程序配置需要修改 iso 内容(因此需要重建 iso)。
注4:引导isolinux
加载程序通常用于 BIOS(传统)系统。在 UEFI 系统中,您需要配置 GRUB。
答案2
使用boot_command
Packer,它会将按键发送到 VM,基本上就是在其中输入内容。它会“输入”什么内容由您决定。这将转到打包文件(我将其命名为base.pkr.hcl
):
...
variable "preseed_file" {
type = string
default = "base.preseed"
}
...
source "qemu" "qemu" {
...
boot_command = [
"<wait><wait><wait><esc><wait><wait><wait>",
"/install.amd/vmlinuz ",
"initrd=/install.amd/initrd.gz ",
"auto=true ",
"debian-installer/locale=ru_RU.UTF-8 ",
"keyboard-configuration/xkb-keymap=ru ",
"keyboard-configuration/optionscode=grp:caps_toggle,lv3:ralt_switch,compose:rctrl,grp_led:scroll ",
"url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg ",
"hostname=${var.vm_name} ",
"domain=${var.domain} ",
"interface=auto ",
"vga=788 noprompt quiet --<enter>"
]
http_content = { "/preseed.cfg" = templatefile(var.preseed_file, { var = var }) }
...
}
...
这样,打包程序将通过 HTTP 将预置文件提供给 VM,并有效地用打包程序文件中提供的启动选项覆盖 ISO 中内置的启动选项。无需对 ISO 进行任何更改。
我正在使用 Qemu;这是我半年前做这件事时得到的副本。看起来 Nutanix builder 没有这个 boot_command;但是,您可以尝试使用 Qemu 或 Virtualbox 等构建系统,然后将其与 Nutanix 一起使用。我只是不知道。