跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Micro 文档 / 部署指南 / 预构建映像部署 / 使用 Combustion 进行配置
适用范围 SUSE Linux Enterprise Micro 5.2

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.ignignition 目录,如下所示:

<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 命令创建已更改快照。有关细节,请参见Section 2, “Administration using transactional updates”