B.2. 使用预置

您首先要创建一个预置文件,并将它置于希望使用的地方。创建预置文件在后面的附录中有说明。如果您打算使用网络预置或者从软盘或 U 盘读取,直接将它放到正确的地方就可以了。如果您希望将它放到 CD 或 DVD 上面,那就需要重新制作一个 ISO 映像文件。而如何将预置文件包含到 initrd 里面,超出了本文档的范围;请查询 debian-installer 开发者文档。

有一个预置文件的例子放在 https://www.debian.org/releases/buster/example-preseed.txt,您可以拿它作为自己预置文件的基础。此文件基于本附录所列的配置文件片段。

B.2.1. 加载预置文件

如果使用 initrd 预置,您只需确保一个名为 preseed.cfg 的文件包含在 initrd 的根目录里面。安装程序会自动检测并加载。

其他的预置方法,您需要在启动的时候告诉安装程序所使用的文件。这通过给内核传递引导参数完成,可以在启动时手动指定,或者编辑 bootloader 的配置文件(如: syslinux.cfg),并在内核的附加行后面添加参数。

如果在 bootloader 设置里指定预置文件,可以修改配置让您不再需要键入回车启动安装程序。对于 syslinux,这意味着在 syslinux.cfg 里面设置 timeout 为 1

为了保证安装程序得到正确的预置文件,您可以选择为预置文件指定校验和。当前使用的是 md5sum,如果指定了,那么配置文件必须匹配,否则安装程序将拒绝使用。

Boot parameters to specify:
- if you're netbooting:
  preseed/url=http://host/path/to/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d
- or
  preseed/url=tftp://host/path/to/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d

- if you're booting a remastered CD:
  preseed/file=/cdrom/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

- if you're installing from USB media (put the preconfiguration file in the
  toplevel directory of the USB stick):
  preseed/file=/hd-media/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

注意,作为引导参数时 preseed/url 可以缩写为 urlpreseed/file 缩写为 filepreseed/file/checksum 缩写为 preseed-md5

B.2.2. 使用引导参数预置问题的答案

如果预置文件无法设置一些步骤,安装也可以完全自动进行,这是因为您可以在引导安装程序时,在命令行上为内核传递预置的值。

引导参数可以在您不想使用预置的时候使用,但只提供一个特定问题的答案。在本手册中有一些这样的示例。

要设置 debian-installer 中使用的值,只须传递 path/to/variable=value,它们是本附录中所列的任何一个。如果该值是用于配置目标系统的软件包,您需要预先设置 owner:path/to/variable=value 中的 owner[17] 变量。如果您不指定 owner,该变量的值不会复制到目标系统上的 debconf 数据库,并在相关的软件包的配置中不使用。

通常,采用这种方式预置是为了问题不再被询问。为了设置一个问题的默认答案,并仍然显示问题,请使用 ?= 替换 = 作为操作符。参阅 第 B.5.2 节 “使用预置修改默认值”

注意,一些常用的引导参数变量有简写别名。如果有简写形式,它们将会被用在附录的例子里面替代全称。例如,preseed/url 变量简写为 url。另一个例子是 tasks,它转换成 tasksel:tasksel/first

--- 在启动选项中有特殊含义。最后一个 --- 后面出现的内核参数将被复制到安装的 bootloader 设置(假如安装程序支持 bootloader)。安装程序可以自动发现它能识别的选项(就像预置选项)。

[注意] 注意

当前的 linux 内核(2.6.9 和更新的),可以指定最多 32 个命令行选项和 32 个环境变量选项,包括安装程序默认的选项。如果数目超出,内核将崩溃。(早期的内核,接受的数目更少。)

大多数安装过程,在引导配置文件中一些默认的选项,比如 vga=normal,可以放心地删除,这让您可以添加更多的预置选项。

[注意] 注意

引导参数中即使使用引号,也可能无法夹杂空格。

B.2.3. auto 模式

There are several features of Debian Installer that combine to allow fairly simple command lines at the boot prompt to result in arbitrarily complex customized automatic installs.

This is enabled by using the Automated install boot choice, also called auto for some architectures or boot methods. In this section, auto is thus not a parameter, it means selecting that boot choice, and appending the following boot parameters on the boot prompt.

为了表达清楚,这里有一些例子,可以用在引导提示符后面:

auto url=autoserver

这需要一个 DHCP 服务器能找到并且 DNS 可以解析 autoserver,或许要加上 DHCP 提供的本地域名。如果域名是 example.com,并有相应的 DHCP 设置,那么预置文件将从 http://autoserver.example.com/d-i/buster/./preseed.cfg 获得。

url 的最后一部分(d-i/buster/./preseed.cfg)来自 auto-install/defaultroot。默认包括 buster 目录,让将来的版本在可控的方式下指定自己的代号。/./ 位用来定位相对于根目录的子目录(用于 preseed/include 和 preseed/run)。使文件可以指定为完整路径、以 / 开始的位置或者相对于最后一个预置的文件。这样可以建立更具移植性的脚本,让各级脚本完整地移动到新的位置而不被破坏。比如,复制 web 服务器上的文件到 U 盘。本例中,如果预置文件的 preseed/run/scripts/late_command.sh,那么文件将从 http://autoserver.example.com/d-i/buster/./scripts/late_command.sh 获得。

如果本地没有 DHCP 或 DNS,或者您不想使用 preseed.cfg 的默认路径,可以直接指定路径。并且,如果不使用 /./ 元素,它将定位到路径的起始点 (例如 URL 中的第三个 /)。下面的例子是局域网中最基本的要求:

auto url=http://192.168.1.2/path/to/mypreseed.file

它会以下列方式运作:

  • 如果 URL 不含协议,就使用 http

  • 如果主机名不含域名,将使用 DHCP 提供的,并且

  • 如果主机名后面没有 /,那么将加上默认路径。

除了指定 url 之外,您还可以指定不直接影响 debian-installer 自己行为的设置,但是可以传递到预置文件加载的 preseed/run 中的脚本。当前,只有一个 auto-install/classes,它的别名是 classes。可以这样用:

auto url=example.com classes=class_A;class_B

classes 可以指定系统的类型,或者本地化信息。

只要您愿意,当然可以扩充这个概念,合理应用 auto-install 名字空间就是为了这个目的。这就可能会有诸如 auto-install/style 的内容加入到您的脚本。如果您觉得需要这样做,请发邮件到 邮件列表说明,我们可以避免名字空间的冲突,还可能会为您增加一个参数的别名。

The auto boot choice is not yet defined on all arches. The same effect may be achieved by simply adding the two parameters auto=true priority=critical to the kernel command line. The auto kernel parameter is an alias for auto-install/enable and setting it to true delays the locale and keyboard questions until after there has been a chance to preseed them, while priority is an alias for debconf/priority and setting it to critical stops any questions with a lower priority from being asked.

在使用 DHCP 自动安装时还有一个有趣的额外选项:interface=auto netcfg/dhcp_timeout=60,这让机器使用第一个可用的网卡并耐心地等待 DHCP 的查询。

[提示] 提示

更多使用此框架的例子,包括示例脚本和类,可以在其开发者的网站找到。那里的例子还显示出预置可以达到更多的效果。

B.2.4. 预置中有用的别名

下面这些别名在使用(自动)预置时很有用处。注意,它们是提问名称的简写别名,您同时需要指定一个对应的值:例如,auto=trueinterface=eth0

priority debconf/priority
fb debian-installer/framebuffer
language debian-installer/language
country debian-installer/country
locale debian-installer/locale
theme debian-installer/theme
auto auto-install/enable
classes auto-install/classes
file preseed/file
url preseed/url
domain netcfg/get_domain
hostname    netcfg/get_hostname
interface netcfg/choose_interface
protocol mirror/protocol
suite mirror/suite
modules anna/choose_modules
recommends base-installer/install-recommends
tasks tasksel:tasksel/first
desktop tasksel:tasksel/desktop
dmraid disk-detect/dmraid/enable
keymap keyboard-configuration/xkb-keymap
preseed-md5 preseed/file/checksum

B.2.5. 使用 DHCP 服务器指定预置文件

还可以使用 DHCP 来指定从网络下载的预置文件。DHCP 允许指定文件名。通常是用于 netboot 的文件,但如果是一个 URL,那么支持网络预置的安装介质就会从该 URL 下载,并用作预置文件。这里有一个在 dhcpd.conf 中使用的例子,它用于 ISC DHCP 服务器第 3 版(Debian 里面是 isc-dhcp-server 软件包)。

if substring (option vendor-class-identifier, 0, 3) = "d-i" {
    filename "http://host/preseed.cfg";
}

注意,上面的例子中使用的文件名限定 DHCP 客户端自己是 "d-i",因此仅适用于安装程序,而对普通的 DHCP 客户端无效。您可以将只用于一个特殊主机的文字放在一段,以避免预置网络中的其他安装。

使用 DHCP 预置的一个好方法是仅预置网络相关的值,比如所使用的 Debian 镜像。这种方式下在网络中安装将会自动选择一个合适的镜像,而其余的安装部分仍可以交互进行。使用 DHCP 预置进行完整的 Debian 自动安装应该特别小心。



[17] debconf 变量(或模板)的 owner 通常是包含对应 debconf 模板的软件包明。对于安装程序自己使用的变量,owner 是 d-i。模板和变量可以有多个 owner,以助于删除软件包时判断它们是否要从 debconf 数据库中删除。