Portal:MicroOS/Ignition
首次启动配置
为了在启动我们的预构建磁盘镜像后使系统可访问(在使用 DVD 时,Ignition 或 Combustion 默认情况下不会运行),您需要在首次启动时提供一个配置文件。至少需要 root 用户的密码。根据 openSUSE MicroOS 的不同版本,支持以下首次启动配置系统:
- Ignition
起源于 Fedora CoreOS,并完全支持 openSUSE MicroOS。是初学者的最佳选择。请在下方找到快速入门文档。 - Combustion
是 openSUSE 的 MicroOS 项目的一部分,比 Ignition 更强大和灵活,需要 bash 编程技能。请从 Combustion 快速入门文档了解更多信息。 - Cloud-Init
仅用于 openSUSE MicroOS 的 OpenStack Cloud 版本。请从 Cloud-Init 快速入门文档了解更多信息。 - 可以使用 Ignition & Combustion Config Generator 创建 Ignition 和 Combustion 脚本。
Ignition 快速入门
首次启动时,系统将尝试使用 Ignition 配置自身。配置从名为 config.ign 的文件中读取,该文件需要存储在存储介质的 ignition 目录中,该存储介质位于包含 MicroOS 的主磁盘镜像旁边。这种配置存储介质可以是您的虚拟化系统或硬件支持的任何介质,例如 ISO 镜像、USB 闪存盘甚至软盘。
无论您使用哪种介质,卷标都需要为 ignition。在该介质上,您创建一个名为 ignition 的目录,其中包含一个名为 config.ign 的文件。生成的目录结构应如下所示:
<root directory>
└── ignition
└── config.ign
示例 config.ign:
{
"ignition": { "version": "3.1.0" },
"passwd": {
"users": [
{
"name": "root",
"passwordHash": "$6$8RvB49.DFjUL.BEi$LZSCY0j.qGAd2OJEqFfey8B77z4hdKVnTwdYrXZDSETIDPxskMp3wNTAppwMSF3SSAzOw/ybEaQnNrzPjt8DM0"
}
]
}
}
使用命令行创建 passwordHash 键的值
# openssl passwd -6
这将提示您选择一个密码。上述示例中的密码为 opensuse。
USB 闪存盘
尤其是在裸机或 Raspberry Pi 和其他 ARM 镜像上,提供 config.ign 的最佳解决方案是使用 USB 闪存盘。
要使用此功能
- 使用 MicroOS 支持的任何文件系统(例如 FAT、EXT4 等)格式化您的 USB 闪存盘
- 将分区标签设置为
ignition(小写;对于具有单个分区的 EXT4 格式化驱动器,请使用e2label /dev/sdX1 ignition) - 挂载该分区
- 创建上述目录结构并添加您的
config.ign
创建 ISO 镜像
使用虚拟机,提供 config.ign 的最常见方法是创建 ISO 镜像。使用以下命令创建上述目录结构:
# mkdir -p disk/ignition # touch disk/ignition/config.ign
使用您选择的编辑器打开 disk/ignition/config.ign,然后复制并粘贴上述示例中的代码。
使用 mkisofs 创建 ISO 镜像:
# mkisofs -o ignition.iso -V ignition disk
现在将 ignition.iso 添加到您的 VM,您就可以开始了。
在 libvirt 中使用 fw_cfg qemu 功能
如果您使用 libvirt 和 qemu/kvm 运行您的虚拟机,您可以通过编辑为创建的 VM 准备的 libvirt XML 来使 ignition 文件可用。您可以使用 virt-manager UI 或 virsh edit。
在 <domain> 部分下,插入以下 XML 部分:
<sysinfo type="fwcfg"> <entry name="opt/com.coreos/config" file="/location/for/your/file/config.ign"/> </sysinfo>
您也可以在创建 VM 时使用 virt-install 和 --sysinfo 选项来使用它:
--sysinfo type=fwcfg,entry0.name="opt/com.coreos/config",entry0.file="/location/for/your/file/config.ign" \
使用 butane 创建配置文件
Ignition 配置文件格式为 JSON,这对于机器来说快速且易于读取。但是,这些文件对于人类来说不易于阅读或编写。解决方案是两步配置过程,对人类和机器都友好:
- 生成 YAML 格式的 Butane 配置文件。
- 运行 butane 将 YAML 文件转换为 JSON Ignition 文件。
在转译过程中,butane 会验证 YAML 文件的语法,这可以在您使用它启动 MicroOS 之前捕获错误。
您可以运行 butane 容器,该容器可以在任何能够运行容器的系统上运行,或者您可以将其安装在兼容的系统上:
获取 butane 的最新版本,来自 Kubic Devel 仓库:
使用 Tumbleweed:
# zypper ar -f https://download.opensuse.org/repositories/devel:/kubic:/ignition/openSUSE_Tumbleweed/ devel_kubic_ignition
使用 Leap:
# zypper ar -f 'https://download.opensuse.org/repositories/devel:/kubic:/ignition/openSUSE_Leap_$releasever/' devel_kubic_ignition
使用 SLE 15:
# zypper ar -f https://download.opensuse.org/repositories/devel:/kubic:/ignition/SLE_15/ devel_kubic_ignition
然后(对于所有发行版):
# zypper in butane
调用
# butane -p -o config.ign config.yaml
其中 config.yaml 是 YAML 输入文件,而 config.ign 是 JSON 输出文件。-p 使输出更美观,通过添加换行符和缩进。
高级用法
要了解有关 Ignition 及其功能的更多信息,请继续访问 官方文档 或查看下面的示例,了解一些常见用例。
FCC/YAML 示例
为 root 用户添加密码和 SSH 密钥
variant: fcos
version: 1.0.0
passwd:
users:
- name: root
password_hash: "hash, created with e.g. `openssl passwd -6`"
ssh_authorized_keys:
- ssh-rsa long...key user@host
创建新用户
通常,常规用户的家目录位于 /home/<username>。由于 /home 在 initrd 中默认情况下未挂载,因此用户创建才能成功,必须显式定义挂载点。有关详细信息,请参阅 挂载点示例。
variant: fcos
version: 1.1.0
storage:
filesystems:
- path: /home
device: "Path to the root device such as /dev/sda3, /dev/mmcblk0p2 or /dev/disk/by-label/ROOT"
format: btrfs
wipe_filesystem: false
mount_options:
- "subvol=/@/home"
passwd:
users:
- name: root
password_hash: "hash, created with e.g. `openssl passwd -6`"
ssh_authorized_keys:
- ssh-rsa long...key user@host
挂载点
默认挂载的子卷是:
- /
- /var
- /etc
- /root
要访问其他子卷或分区,例如 /home 或 /opt,请在 Ignition 配置文件中显式定义它们。
variant: fcos
version: 1.0.0
storage:
filesystems:
- path: /opt
device: "/dev/sdXY"
format: btrfs
wipe_filesystem: false
创建文件
就像在 示例之前 一样,如果您想在默认 initrd 挂载目录之外创建文件,您还需要在相应的设备上添加 storage -> filesystem,以及下面的代码片段。
variant: fcos
version: 1.0.0
storage:
files:
- path: /var/test.txt
mode: 0644
overwrite: true
contents:
inline: "testcontents"
更改主机名
根据前面的示例,我们可以通过创建 /etc/hostname 文件来设置主机名。
variant: fcos
version: 1.0.0
storage:
files:
- path: /etc/hostname
mode: 0644
overwrite: true
contents:
inline: "kubic-1"
启用服务
Ignition 还可以启用 systemd 服务:
variant: fcos
version: 1.0.0
systemd:
units:
- name: sshd.service
enabled: true
更多示例
在 Fedora Core OS 文档网站上找到更多 FCC 示例。
JSON 示例
为 root 用户添加密码和 SSH 密钥
{
"ignition": { "version": "3.1.0" },
"passwd": {
"users": [
{
"name": "root",
"passwordHash": "hash, created with e.g. `openssl passwd -6`",
"sshAuthorizedKeys": [
"ssh-rsa long...key user@host"
]
}
]
}
}
创建新用户
默认情况下,用户的家目录将位于 /home/<username>。由于 /home 在 initrd 中默认情况下未挂载,因此必须显式定义挂载点。请查看 挂载点示例 以获取详细信息。
{
"ignition": { "version": "3.1.0" },
"storage": {
"filesystems": [
{
"path": "/home",
"device": "Path to the root device such as /dev/sda3, /dev/mmcblk0p2 or /dev/disk/by-label/ROOT",
"format": "btrfs",
"wipeFilesystem": false,
"mountOptions": [
"subvol=/@/home"
]
}
]
},
"passwd": {
"users": [
{
"name": "username",
"passwordHash": "hash, created with e.g. `openssl passwd -6`",
"sshAuthorizedKeys": [
"ssh-rsa long...key user@host"
]
}
]
}
}
挂载点
在基于 openSUSE MicroOS 的镜像中,默认挂载的子卷是:
- /
- /var
- /etc
- /root
如果需要访问其他子卷或分区,例如 /home 或 /opt,则需要在 Ignition 的配置文件中显式定义它们。
{
"ignition": { "version": "3.1.0" },
"storage": {
"filesystems": [
{
"path": "/opt",
"device": "/dev/sdXY",
"format": "btrfs",
"wipeFilesystem": false,
}
]
}
}
创建文件
就像在 示例之前 一样,如果您想在默认 initrd 挂载目录之外创建文件,您还需要在相应的设备上添加 storage -> filesystem,以及下面的代码片段。
{
"ignition": { "version": "3.0.0" },
"storage": {
"files": [
{
"path": "/var/test.txt",
"mode": 420,
"contents": {
"source": "data:,testcontents"
},
"overwrite": true
}
]
}
}
更改主机名
根据前面的示例,我们可以通过创建 /etc/hostname 文件来设置主机名。
{
"ignition": { "version": "3.0.0" },
"storage": {
"files": [{
"filesystem": "root",
"path": "/etc/hostname",
"mode": 420,
"overwrite": true,
"contents": { "source": "data:,kubic-1" }
}]
}
}
启用服务
Ignition 还可以启用 systemd 服务:
{
"ignition": { "version": "3.0.0" },
"systemd": {
"units": [{
"name": "sshd.service",
"enabled": true
}]
}
}
更多示例
在 Ignition 文档网站上找到更多示例。