Debian preseed 文件是用于自动化安装和配置基于 Debian 的发行版的有用工具。Kali 可以利用这些文件,通过无人值守、定制化、一致性的安装来加速安装过程。有关 preseed 文件的更多信息,请参阅 Debian 安装指南 或 Debian preseed 示例文本文件。
虽然定制 preseed 文件的方法有很多,已安装的软件包还能提供更多选项,但本仓库将用于托管并允许创建更简单的文件,这些文件允许对 Kali 安装选项进行轻度定制。
关于使用 preseed 文件的非常深入且有帮助的指南,我们可以参考 Debian 安装 wiki。其中包含如何将 preseed 嵌入 iso 文件、使用 USB 保存 preseed 文件,或利用网络连接从 URL 获取 preseed 文件的步骤。
需要指出的一点是,要使用 URL 预置(preseeding),我们必须遵循以下启动提示:
/install.amd/vmlinuz vga=788 auto=true priority=critical url=link-to-preseed.cfg initrd=/install.amd/initrd.gz --- quiet
在 BIOS 引导的系统上,我们可以通过按 ESC 调出空白提示符,或按 E 修改现有的启动选项来编辑启动参数。在 UEFI 系统上,我们可以按 C 调出空白提示符,或按 E 修改现有的启动选项。
如果我们希望使用现有的启动选项,可以添加以下启动提示以实现自动化安装:
language=en country=US locale=en_US.UTF-8 keymap=us auto=true priority=critical url=link-to-preseed.cfg
在创建 preseed 文件时,有一些标志是我们在进行无人值守安装时始终应该使用的。让我们逐一了解这些标志。
以下选项将自动选择基于位置的设置:区域设置(locale)、语言和国家。有关区域设置的更多信息,可以访问 Debian Wiki 条目。如果不确定使用哪个区域设置,可以选择英文选项,即下面设置的内容。或者,要查看我们的区域设置,可以使用一台已安装好的机器并运行 locale 命令。只需确保在 .UTF-8 之前输入相应信息。
kali@kali:~$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
preseed 选项:
d-i debian-installer/locale string en_US
然而,如果我们希望手动选择所有这些选项,或者在使用上述选项后仅更改其中一个,我们可以使用以下选项分别进行设置:
d-i debian-installer/language string en
d-i debian-installer/country string US
d-i debian-installer/locale string en_US.UTF-8
接下来,我们需要设置键盘映射(keymap),它不会由区域设置自动设定。如果已经有安装好的机器,我们可以使用 localectl 命令来查看我们的布局。
kali@kali:~$ localectl
System Locale: (unset)
VC Keymap: (unset)
X11 Layout: us
X11 Model: pc105
preseed 选项:
d-i keyboard-configuration/xkb-keymap select us
请记住,区域设置和键盘映射都可以在之后分别通过 dpkg-reconfigure locales 和 dpkg-reconfigure keyboard-configuration 进行更改。
现在我们可以编辑网络设置。请注意,如果我们使用 url preseeding,这些设置不会被使用。我们首先需要选择网络接口。对于这个选项,使用 auto 是最简单的。当然,如果有必要,我们也可以选择特定接口,例如 eth0。
d-i netcfg/choose_interface select auto
以下 preseed 选项用于跳过对主机名和域名的询问,这些信息将通过 DHCP 提供,或使用预设值:主机名为 'kali',域名为空白:
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
如果我们想自行设置主机名或域名,可以通过修改字符串为所需值来实现。请记住,DHCP 提供的值将优先于我们设置的任何值,但可以通过硬编码值来避免这种情况,如下所示:
d-i netcfg/hostname string personal-hostname
接下来我们介绍网络镜像。以下选项用于设置我们希望用于 Kali 的镜像,以及(如有必要)代理设置。如果不确定,您可能不需要设置任何内容。在我们的示例中,我们将主机名值编辑为 Kali Cloudflare 镜像网络 kali.download。如果我们希望获得分配给我们最快可用镜像,可以改用 http.kali.org 选项:
d-i mirror/country string manual
d-i mirror/http/hostname string kali.download
d-i mirror/http/directory string /kali
d-i mirror/http/proxy string
还有一些其他选项可以选择包含。这两个选项将设置用于连接镜像的协议以及要选择的套件(suite)。除非您需要更改其中任一选项,否则最好将其从 preseed 中省略:
d-i mirror/protocol string http
d-i mirror/suite string kali-rolling
接下来我们介绍用户创建。我们首先设置全名,然后设置用户名。全名可以包含多个单词,但用户名不可以。请确保用户名只使用一个单词。然后我们可以按自己的喜好设置密码。如果不希望密码以明文形式存在,可以选择使用加密哈希。我们可以使用 mkpasswd 命令或许多其他方式生成哈希,这里不再赘述:
d-i passwd/user-fullname string Kali Linux
d-i passwd/username string kali
d-i passwd/user-password password kali
d-i passwd/user-password-again password kali
加密哈希可以按如下方式使用:
d-i passwd/user-password-crypted password [hash]
接下来我们介绍时钟设置。所使用的选项作用如下:告知安装程序系统时钟设置为 UTC,应用 Kali 安装应使用的时区值,然后使用 NTP 设置该时间。
d-i clock-setup/utc boolean true
d-i time/zone string US/Eastern
d-i clock-setup/ntp boolean true
我们可以在 /usr/share/zoneinfo/ 文件夹中查找要设置的时区值,也可以使用以下命令:
kali@kali:~$ cat /etc/timezone
US/Eastern
现在我们进入分区部分。这可以说是创建 preseed 时最复杂的部分,因为需要根据您使用的系统类型以及想要的安装类型来设置一些值。
我们首先设置分区工具 partman 的自动设置。我们指定这将是一次常规安装,而不是使用 LVM(lvm)或加密(crypto),然后指定使用硬盘的全部可用空间。我们也可以使用较小的容量,例如 20 GB 或空闲空间的百分比。这里的最后一个选项决定文件的配置方式:所有内容位于一个分区(atmoic)、/home 文件夹位于独立分区(home),还是 /home、/var 和 /tmp 各自位于独立分区(multi)。
d-i partman-auto/method string regular
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/choose_recipe select atomic
接下来是一系列我们需要确认的提示。同意所有这些提示后,partman 将根据我们上面设置的值自动进行分区。
d-i partman-md/confirm boolean true
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
我们终于完成了分区,接下来可以进入软件包选择。以下选项将得到典型的 Kali Xfce 安装。要查看我们可以设置的所有可用值,可以参考 tasksell Kali GitLab 软件包仓库。一些选项包括 desktop-gnome、desktop-kde、meta-top10、meta-everything 和 meta-purple。我们只需添加想要使用的软件包,并确保使用逗号作为分隔符。
tasksel tasksel/first multiselect standard,core,desktop-xfce,meta-default
也可以单独选择要安装的其他软件包:
d-i pkgsel/include string openssh-server build-essential
还可以在 debootstrap 之后升级软件包,使用 safe-upgrade 或 full-upgrade,或者使用 none 不进行升级:
d-i pkgsel/upgrade select none
只剩最后一部分:grub 选项和重启。这些选项相对直接。我们告知 grub,如果检测到_仅安装 Debian_,则可以安全地设置引导分区;然后告知它,如果检测到_安装了其他操作系统_,也可以安全地设置引导分区。虽然第一个选项在大多数情况下都是安全的,但第二个选项在双引导时可能存在风险。如果不使用双引导,可以将其设为 true;否则,我们可能需要移除该选项并手动做出选择。
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
最后这两个选项将设置引导设备,然后指示系统重启进入 Kali。在我们的示例中,我们将引导设备硬编码为 /dev/sda,因为我们可能使用 USB 驱动器来安装 Kali。如果不使用 USB 驱动器,可以选择使用 default 值,但硬编码该值更安全。
d-i grub-installer/bootdev string /dev/sda
d-i finish-install/reboot_in_progress note