Portal:MicroOS/Ignition

跳转到:导航搜索

首次启动配置

为了在启动我们的预构建磁盘镜像后使系统可访问(在使用 DVD 时,Ignition 或 Combustion 默认情况下不会运行),您需要在首次启动时提供一个配置文件。至少需要 root 用户的密码。根据 openSUSE MicroOS 的不同版本,支持以下首次启动配置系统:

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,这对于机器来说快速且易于读取。但是,这些文件对于人类来说不易于阅读或编写。解决方案是两步配置过程,对人类和机器都友好:

  1. 生成 YAML 格式的 Butane 配置文件。
  2. 运行 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 文档网站上找到更多示例。