关于 Debian 11 自动化安装的建议

关于 Debian 11 自动化安装的建议

我目前正在尝试通过 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 installergo 完全自动化,你需要在预置文件中添加以下信息:

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 项更改:

  1. 通过内核参数设置自动模式。
  2. 告诉isolinux自动选择菜单中的默认条目。

第一个更改是通过添加auto=trueappend默认菜单项的行来完成的。对于 debian 11,我发现“图形安装”是默认条目。由于此条目的配置是从 读取的isolinux/gtk.cfg,因此此更改应应用于该文件。例如,您可以将示例引导加载程序配置附加行更改为"append auto=true vga=..."

第二个目标是通过改变timeout 0来实现timeout 1isolinux/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_commandPacker,它会将按键发送到 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 一起使用。我只是不知道。

相关内容