第 5 章 使用镜像构建器命令行制作 RHEL for Edge 镜像
您可以使用镜像构建器创建自定义的 RHEL for Edge 镜像(OSTree 提交)。
要访问镜像构建器并创建自定义的 RHEL for Edge 镜像,您可以使用 RHEL web 控制台界面或命令行界面。
对于基于网络的部署,使用 CLI 编写 RHEL for Edge 镜像的工作流涉及以下高级别步骤:
- 为 RHEL for Edge 镜像创建蓝图
- 创建 RHEL for Edge Commit 镜像
- 下载 RHEL for Edge Commit 镜像
对于非基于网络的部署,使用 CLI 编写 RHEL for Edge 镜像的工作流涉及以下高级别步骤:
- 为 RHEL for Edge 镜像创建蓝图
- 为 RHEL for Edge Installer 镜像创建一个蓝图
- 创建 RHEL for Edge 容器镜像
- 为 Edge 安装程序创建 RHEL
- 下载 RHEL for Edge 镜像
要执行这些步骤,请使用 composer-cli
软件包。
要以非 root 身份运行 composer-cli
命令,您必须是 weldr
组的一部分,或者您必须具有系统的管理员访问权限。
5.1. 基于网络的部署工作流
这提供了如何构建 OSTree
提交的步骤。这些 OSTree
提交包含完整的操作系统,但不能直接启动。要引导它们,您需要使用 Kickstart 文件进行部署。
5.1.1. 使用镜像构建器命令行界面创建 RHEL for Edge Commit 镜像蓝图
使用 CLI 为 RHEL for Edge Commit 镜像创建一个蓝图。
前提条件
您没有现有的蓝图。要验证,列出现有的蓝图:
$ sudo composer-cli blueprints list
流程
以 TOML 格式创建一个纯文本文件,其内容如下:
name = "blueprint-name" description = "blueprint-text-description" version = "0.0.1" modules = [ ] groups = [ ]
其中,
- blueprint-name 是名称,print-text-description 是您的蓝图的描述。
- 0.0.1 是 Semantic Versioning 方案的版本号。
模块 描述了要安装到镜像中的软件包名称和匹配版本的 glob,例如:软件包名称 = "tmux",匹配的版本 glob 是 version = "2.9a"。
请注意,目前软件包和模块之间没有区别。
组是要安装到镜像中的软件包组,如组软件包 anaconda-tools。
此时,如果您不知道模块和组,请将它们留空。
包含所需的软件包,并在蓝图中自定义其他详情以满足您的要求。
对于要包含在蓝图中的每个软件包,请在文件中添加以下行:
[[packages]] name = "package-name" version = "package-version"
其中,
- package-name 是软件包的名称,如 httpd、gdb-doc 或 coreutils。
package-version 是您要使用的软件包的版本号。
package-version 支持以下 dnf 版本规格:
- 对于特定版本,请使用准确版本号,如 9.0。
- 对于最新可用版本,请使用星号 *。
- 对于最新的次版本,请使用格式(如 9.*)。
将蓝图推送(导入)到 RHEL 镜像构建器服务器:
# composer-cli blueprints push blueprint-name.toml
列出现有的蓝图,以检查创建的蓝图是否已成功推送并存在。
# composer-cli blueprints show BLUEPRINT-NAME
检查蓝图中列出的组件和版本是否有效:
# composer-cli blueprints depsolve blueprint-name
其他资源
5.1.2. 使用镜像构建器命令行界面创建 RHEL for Edge Commit 镜像
要使用 RHEL 镜像构建器命令行界面创建 RHEL for Edge Commit 镜像,请确保您满足以下先决条件,并按照流程操作。
先决条件
- 您已为 RHEL for Edge Commit 镜像创建了一个蓝图。
流程
创建 RHEL for Edge Commit 镜像。
# composer-cli compose start blueprint-name image-type
其中,
- blueprint-name 是 RHEL for Edge 蓝图名称。
image-type 是
edge-commit
(对于 network-based deployment)。这时将显示一个确认已添加到队列中的 composer 进程。它还显示创建的镜像的通用唯一标识符 (UUID) 号。使用 UUID 号来跟踪构建。另外,记录 UUID 号以易于执行进一步的任务。
检查镜像 compose 状态。
# composer-cli compose status
输出以以下格式显示状态:
<UUID> RUNNING date blueprint-name blueprint-version image-type
注意镜像创建过程需要 20 分钟才能完成。
要中断镜像创建过程,请运行:
# composer-cli compose cancel <UUID>
要删除现有镜像,请运行:
# composer-cli compose delete <UUID>
镜像就绪后,您可以下载该镜像并使用网络部署上的镜像。
5.1.3. 使用 RHEL 镜像构建器 CLI 使用 ref 提交创建 RHEL for Edge 镜像更新
如果您在现有蓝图中进行了更改,例如,您添加了一个新的软件包,并希望使用这个新软件包更新现有的 RHEL for Edge 镜像,则您可以使用 --parent
参数来生成更新的 RHEL for Edge Commit (.tar)
镜像。--parent
参数可以是 URL
参数指定的存储库中存在的一个 ref
,您也可以使用您在提取的 .tar
镜像文件中找到的 Commit ID
。ref
和 Commit ID
参数检索您要构建的新提交的父项。RHEL 镜像构建器可以从影响您要构建的新提交的父提交中读取信息。因此,RHEL 镜像构建器读取父提交的用户数据库,并为创建软件包的系统用户和组保留 UID 和 GID。
先决条件
- 您已为 RHEL for Edge 镜像更新了现有蓝图。
- 您有一个现有的 RHEL for Edge 镜像(OSTree commit)。请参阅提取 RHEL for Edge 镜像提交
-
正在构建的
ref
位于 URL 指定的OSTree
存储库中。
流程
创建 RHEL for Edge commit 镜像:
# composer-cli compose start-ostree --ref rhel/9/x86_64/edge --parent parent-OSTree-REF --url URL blueprint-name image-type
例如:
要根据
parent
和新的ref
创建新的 RHEL for Edge 提交,请运行以下命令:# composer-cli compose start-ostree --ref rhel/9/x86_64/edge --parent rhel/9/x86_64/edge --url http://10.0.2.2:8080/repo rhel_update edge-commit
要根据同一
ref
创建新的 RHEL for Edge 提交,请运行以下命令:# composer-cli compose start-ostree --ref rhel/9/x86_64/edge --url http://10.0.2.2:8080/repo rhel_update edge-commit
其中:
- --ref 参数指定用于构建 OSTree 存储库的相同路径值。
-
--parent 参数指定父提交。它可以是要解析和拉取的 ref(如
rhel/9/x86_64/edge
),或者您可以在提取的.tar
文件中找到的Commit ID
。 - blueprint-name 是 RHEL for Edge 蓝图名称。
-
--url
参数指定要嵌入到镜像中的提交的 OSTree 存储库的 URL,例如 http://10.0.2.2:8080/repo。 image-type 是
edge-commit
(对于 network-based deployment)。注意-
--parent
参数只能用于RHEL for Edge Commit (.tar)
镜像类型。将--url
和--parent
参数一起使用会导致RHEL for Edge Container (.tar)
镜像类型出错。 -
如果省略
parent ref
参数,系统会退回到--ref
参数指定的ref
。
这时将显示一个确认已添加到队列中的 composer 进程。它还显示创建的镜像的通用唯一标识符 (UUID) 号。使用 UUID 号来跟踪构建。另外,记录 UUID 号以易于执行进一步的任务。
-
检查镜像 compose 状态。
# composer-cli compose status
输出以以下格式显示状态:
<UUID> RUNNING date blueprint-name blueprint-version image-type
注意完成镜像创建过程需要几分钟时间。
(可选)要中断镜像创建过程,请运行:
# composer-cli compose cancel <UUID>
(可选)要删除现有镜像,请运行:
# composer-cli compose delete <UUID>
镜像创建完成后,要升级现有的 OSTree 部署,您需要:
- 设置存储库。请参阅部署 RHEL for Edge 镜像。
- 将此存储库添加为远程,也就是托管 OSTree 内容的 http 或 https 端点。
- 将新 OSTree 提交拉取到其现有的正在运行的实例。请参阅手动部署 RHEL for Edge 镜像更新。
5.1.4. 使用镜像构建器命令行界面下载 RHEL for Edge 镜像
要使用 RHEL 镜像构建器命令行界面下载 RHEL for Edge 镜像,请确保您满足以下先决条件,然后按照以下流程操作。
先决条件
- 您已创建了 RHEL for Edge 镜像。
流程
查看 RHEL for Edge 镜像状态。
# composer-cli compose status
输出必须显示以下内容:
$ <UUID> FINISHED date blueprint-name blueprint-version image-type
下载镜像。
# composer-cli compose image <UUID>
RHEL 镜像构建器将镜像作为
tar
文件下载到当前目录。UUID 号和镜像大小会同时显示。
$ <UUID>-commit.tar: size MB
镜像包含提交和 json
文件,其中包含有关存储库内容的信息元数据。