9 使用 Combustion 进行配置 #
本章将介绍 Combustion,它是用于在首次引导时根据您的配置来配置系统的工具。
9.1 关于 Combustion #
Combustion 是一种 dracut 模块,可用于在首次引导时配置系统。Combustion 会读取提供的文件(名为 script
)并执行其中的命令,以对文件系统进行更改。您可以使用 Combustion 来更改默认分区、设置用户口令、创建文件、安装软件包等。
系统将在 ignition.firstboot
参数传递给内核命令行后调用 Combustion dracut 模块。然后,Combustion 便会从 script
中读取配置。如果在 script
中发现网络标志,Combustion 会尝试配置网络。挂载 /sysroot
后,Combustion 会尝试激活 /etc/fstab
中的所有挂载点,然后调用 transactional-update
来应用其他更改(如设置 root
口令或安装软件包)。
使用 Combustion 时,您需要以名称 combustion
标记配置设备、在该配置媒体中创建特定目录结构,以及添加名为 script
的配置文件。在配置媒体的根目录中,创建名为 combustion
的目录,并将 script
以及其他文件(如 SSH 密钥、配置文件等)放在此目录下。目录结构如下所示:
<root directory> └── combustion └── script └── other files
您可以使用 Combustion 来配置 QEMU/KVM 虚拟机。在此情况下,可使用 qemu
命令的 fw_cfg
参数来传递 script
文件的位置:
-fw_cfg name=opt/org.opensuse.combustion/script,file=/var/combustion-script
Combustion 可与 Ignition 搭配使用。如果您要将它们搭配使用,请用 ignition
标记配置媒体,并在目录结构中添加包含 config.ign
的 ignition
目录,如下所示:
<root directory> └── combustion └── script └── other files └── ignition └── config.ign
在此情况下,Ignition 会先于 Combustion 运行。
9.2 script
配置文件 #
script
配置文件就是在系统上的事务更新外壳中执行的一组命令。本节提供了使用 Combustion 执行各种配置任务的示例。
script
文件由 bash 解释,所以请务必在文件的第一行以解释器声明开头:
#!/bin/bash
如果您要登录系统,请至少包含 root
口令,但建议使用 SSH 密钥建立身份验证。如果您需要使用 root
口令,请务必配置安全口令。如果您使用随机生成的口令,请至少包含 10 个字符。如果手动创建口令,请包含 10 个以上字符并结合使用大小写字母和数字。
9.2.1 网络配置 #
要在首次引导期间配置并使用网络连接,请在 script
中添加以下语句:
# combustion: network
使用此语句会将 rd.neednet=1
参数传递给 dracut。如果不使用该语句,将不会为系统配置任何网络连接。
9.2.2 分区 #
SLE Micro raw 映像使用的是默认分区方案(如第 5.1 节 “默认分区”中所述)。您可能希望使用不同的分区方式。下面一组示例代码段会将 /home
移至另一个分区。
以下脚本会执行快照中未包含的更改。如果脚本失败且快照被丢弃,某些更改仍然可见且无法还原(例如对 /dev/vdb
设备进行的更改)。
以下代码段会在 /dev/vdb
设备上创建含单个分区的 GPT:
sfdisk /dev/vdb <<EOF label: gpt type=linux EOF partition=/dev/vdb1
该分区为 BTRFS 格式:
wipefs --all ${partition} mkfs.btrfs ${partition}
以下代码段会将 /home
中可能包含的内容移到新的 /home
文件夹位置:
mount /home mount ${partition} /mnt rsync -aAXP /home/ /mnt/ umount /home /mnt
下面的代码段会去除 /etc/fstab
中的旧项并创建新项:
awk -i inplace '$2 != "/home"' /etc/fstab echo "$(blkid -o export ${partition} | grep ^UUID=) /home btrfs defaults 0 0" >>/etc/fstab
9.2.3 设置 root
的口令 #
在设置 root
口令前,请先生成口令的哈希,例如,使用 openssl passwd -6
来生成。要设置口令,请在 script
中添加以下内容:
echo 'root:$5$.wn2BZHlEJ5R3B1C$TAHEchlU.h2tvfOpOki54NaHpGYKwdNhjaBuSpDotD7' | chpasswd -e
9.2.4 添加 SSH 密钥 #
以下代码段会创建用于储存 root
的 SSH 密钥的目录,然后将位于配置设备上的 SSH 公共密钥复制到 authorized_keys
文件中。
mkdir -pm700 /root/.ssh/ cat id_rsa_new.pub >> /root/.ssh/authorized_keys
如果您需要通过 SSH 进行远程登录,则必须启用 SSH 服务。有关细节,请参见第 9.2.5 节 “启用服务”。
9.2.5 启用服务 #
您可能需要启用某些服务,例如 SSH 服务。要启用 SSH 服务,请将下面一行添加到 script
中:
systemctl enable sshd.service
9.2.6 安装软件包 #
由于您可能需要额外订阅某些软件包,因此可能需事先注册系统。此外,安装额外的软件包可能还需要有网络连接。
在首次引导配置期间,可以在系统上安装额外的软件包。例如,可以通过添加以下命令安装 vim
编辑器:
zypper --non-interactive install vim-small
请注意,在配置完毕并引导到配置的系统前,您将无法使用 zypper
。如果想要在稍后进行更改,则必须使用 transactional-update
命令创建已更改快照。有关细节,请参见Chapter 3, Administration using transactional updates。