documentation.suse.com / SUSE Edge 文档 / 操作指南 / 使用 Kiwi 构建更新的 SUSE Linux Micro 映像

28 使用 Kiwi 构建更新的 SUSE Linux Micro 映像

本章将说明如何生成更新的 SUSE Linux Micro 映像,这些映像可用于 Edge Image Builder、Cluster API (CAPI) + Metal3,或直接将磁盘映像写入块设备。此流程适用于需要在初始系统引导映像中包含最新补丁(以减少安装后的补丁传输量)的场景,或使用 CAPI 的场景,在该场景中,更适合使用新映像重新安装操作系统,而非就地升级主机。

该流程借助 Kiwi 来执行映像构建。SUSE Edge 随附容器化版本,其中内置了实用辅助工具,可简化整体流程,并支持指定所需的目标配置文件。配置文件定义了所需输出映像的类型,常见类型如下:

  • Base”- SUSE Linux Micro 磁盘映像,包含精简的软件包集合(含 podman)。

  • Base-SelfInstall”- 基于上述“Base”的自安装映像。

  • Base-RT”- 与上述“Base”相同,但使用实时 (rt) 内核。

  • Base-RT-SelfInstall”- 基于上述“Base-RT”的自安装映像。

  • Default”- 基于上述“Base”的 SUSE Linux Micro 磁盘映像,另外还包含其他工具,如虚拟化堆栈、Cockpit 和 salt-minion。

  • Default-SelfInstall”- 基于上述“Default”的自安装映像。

有关详细信息,请参见 SUSE Linux Micro 6.1 文档。

此过程适用于 AMD64/Intel 64 和 AArch64 两种体系结构,但并非所有映像配置文件都同时支持这两种体系结构。例如,在使用 SUSE Linux Micro 6.1 的 SUSE Edge 3.3 中,含实时内核的配置文件(即“Base-RT”或“Base-RT-SelfInstall”)目前暂不支持 AArch64 体系结构。

注意
注意

构建主机的体系结构必须与待构建映像的体系结构一致。也就是说,要构建 AArch64 体系结构的映像,必须使用 AArch64 体系结构的构建主机;AMD64/Intel 64 体系结构同样如此 - 目前不支持跨体系结构构建。

28.1 先决条件

Kiwi 映像构建器的要求如下:

  • 一台体系结构与待构建映像体系结构相同的 SUSE Linux Micro 6.1 主机(即“构建系统”)。

  • 构建系统需已通过 SUSEConnect 完成注册(注册是为了从 SUSE 储存库提取最新软件包)。

  • 能够连接互联网以提取所需软件包;如果通过代理连接,需预先配置构建主机的代理设置。

  • 构建主机上需禁用 SELinux(因为 SELinux 标签会在容器内生成,可能与主机策略冲突)。

  • 至少需要 10GB 可用磁盘空间,以容纳容器映像、构建根目录及最终生成的输出映像。

28.2 入门指南

由于存在某些限制,目前需要禁用 SELinux。请连接到 SUSE Linux Micro 6.1 映像构建主机,并确保 SELinux 已禁用:

# setenforce 0

创建一个将与 Kiwi 构建容器共享的输出目录,用于保存生成的映像:

# mkdir ~/output

从 SUSE 注册表提取最新的 Kiwi 构建器映像:

# podman pull registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0
(...)

28.3 构建默认映像

如果运行容器映像时未提供任何参数,这就是 Kiwi 映像容器的默认行为。以下命令运行 podman 时会将两个目录映射到容器:

  • 底层主机的 /etc/zypp/repos.d SUSE Linux Micro 软件包储存库目录。

  • 上文创建的输出目录 ~/output

Kiwi 映像容器需要按如下方式运行 build-image 辅助脚本:

# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
    -it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image
(...)
注意
注意

如果您是首次运行此脚本,脚本预计会在启动后不久失败,并显示“ERROR: Early loop device test failed, please retry the container run.”,这是由于底层主机系统上创建的循环设备无法立即在容器映像内可见所致。只需重新运行该命令,即可顺利执行。

几分钟后,即可在本地输出目录中找到映像:

(...)
INFO: Image build successful, generated images are available in the 'output' directory.

# ls -1 output/
SLE-Micro.x86_64-6.1.changes
SLE-Micro.x86_64-6.1.packages
SLE-Micro.x86_64-6.1.raw
SLE-Micro.x86_64-6.1.verified
build
kiwi.result
kiwi.result.json

28.4 使用其他配置文件构建映像

要构建不同的映像配置文件,需要使用 Kiwi 容器映像辅助脚本中的“-p”命令选项。例如,要构建“Default-SelfInstall”ISO 映像,请运行:

# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
    -it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image -p Default-SelfInstall
(...)
注意
注意

如果 output 目录中存在映像,Kiwi 将拒绝运行,以免数据丢失。继续操作前,需要使用 rm -f output/* 命令去除输出目录中的内容。

或者,要构建包含实时内核(“kernel-rt”)的自安装 ISO 映像,请运行:

# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
    -it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image -p Base-RT-SelfInstall
(...)

28.5 构建大扇区大小的映像

有些硬件要求映像采用大扇区大小(即 4096 字节,而非标准的 512 字节)。容器化 Kiwi 构建器支持通过指定“-b”参数生成大块大小的映像。例如,要构建大扇区大小的“Default-SelfInstall”映像,请运行:

# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
    -it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image -p Default-SelfInstall -b
(...)

28.6 创建自定义 Kiwi 映像定义文件

对于高级使用场景,可以使用自定义 Kiwi 映像定义文件 (SL-Micro.kiwi) 以及任何必要的构建后脚本。这需要覆盖 SUSE Edge 团队预先打包的默认定义。

创建一个新目录,并将其映射到容器映像中辅助脚本将查找定义文件的目录 (/micro-sdk/defs):

# mkdir ~/mydefs/
# cp /path/to/SL-Micro.kiwi ~/mydefs/
# cp /path/to/config.sh ~/mydefs/
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output -v ~/mydefs/:/micro-sdk/defs/ \
    -it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image
(...)
警告
警告

此操作仅适用于高级使用场景,可能会导致可支持性问题。请联系您的 SUSE 代表以获取进一步建议和指导。

要获取容器中包含的默认 Kiwi 映像定义文件,可使用以下命令:

$ podman create --name kiwi-builder registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0
$ podman cp kiwi-builder:/micro-sdk/defs/SL-Micro.kiwi .
$ podman cp kiwi-builder:/micro-sdk/defs/SL-Micro.kiwi.4096 .
$ podman rm kiwi-builder
$ ls ./SL-Micro.*
(...)
Documentation survey