第 5 章 使用镜像构建器命令行制作 RHEL for Edge 镜像

您可以使用镜像构建器创建自定义的 RHEL for Edge 镜像(OSTree 提交)。

要访问镜像构建器并创建自定义的 RHEL for Edge 镜像,您可以使用 RHEL web 控制台界面或命令行界面。

对于基于网络的部署,使用 CLI 编写 RHEL for Edge 镜像的工作流涉及以下高级别步骤:

  1. 为 RHEL for Edge 镜像创建蓝图
  2. 创建 RHEL for Edge Commit 镜像
  3. 下载 RHEL for Edge Commit 镜像

对于非基于网络的部署,使用 CLI 编写 RHEL for Edge 镜像的工作流涉及以下高级别步骤:

  1. 为 RHEL for Edge 镜像创建蓝图
  2. 为 RHEL for Edge Installer 镜像创建一个蓝图
  3. 创建 RHEL for Edge 容器镜像
  4. 为 Edge 安装程序创建 RHEL
  5. 下载 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

流程

  1. 以 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。

      此时,如果您不知道模块和组,请将它们留空。

  2. 包含所需的软件包,并在蓝图中自定义其他详情以满足您的要求。

    对于要包含在蓝图中的每个软件包,请在文件中添加以下行:

    [[packages]]
    name = "package-name"
    version = "package-version"

    其中,

    • package-name 是软件包的名称,如 httpd、gdb-doc 或 coreutils。
    • package-version 是您要使用的软件包的版本号。

      package-version 支持以下 dnf 版本规格:

    • 对于特定版本,请使用准确版本号,如 9.0。
    • 对于最新可用版本,请使用星号 *。
    • 对于最新的次版本,请使用格式(如 9.*)。
  3. 将蓝图推送(导入)到 RHEL 镜像构建器服务器:

    # composer-cli blueprints push blueprint-name.toml
  4. 列出现有的蓝图,以检查创建的蓝图是否已成功推送并存在。

    # composer-cli blueprints show BLUEPRINT-NAME
  5. 检查蓝图中列出的组件和版本是否有效:

    # composer-cli blueprints depsolve blueprint-name

5.1.2. 使用镜像构建器命令行界面创建 RHEL for Edge Commit 镜像

要使用 RHEL 镜像构建器命令行界面创建 RHEL for Edge Commit 镜像,请确保您满足以下先决条件,并按照流程操作。

先决条件

  • 您已为 RHEL for Edge Commit 镜像创建了一个蓝图。

流程

  1. 创建 RHEL for Edge Commit 镜像。

    # composer-cli compose start blueprint-name image-type

    其中,

    • blueprint-name 是 RHEL for Edge 蓝图名称。
    • image-typeedge-commit(对于 network-based deployment)。

      这时将显示一个确认已添加到队列中的 composer 进程。它还显示创建的镜像的通用唯一标识符 (UUID) 号。使用 UUID 号来跟踪构建。另外,记录 UUID 号以易于执行进一步的任务。

  2. 检查镜像 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 IDrefCommit ID 参数检索您要构建的新提交的父项。RHEL 镜像构建器可以从影响您要构建的新提交的父提交中读取信息。因此,RHEL 镜像构建器读取父提交的用户数据库,并为创建软件包的系统用户和组保留 UID 和 GID。

先决条件

  • 您已为 RHEL for Edge 镜像更新了现有蓝图。
  • 您有一个现有的 RHEL for Edge 镜像(OSTree commit)。请参阅提取 RHEL for Edge 镜像提交
  • 正在构建的 ref 位于 URL 指定的 OSTree 存储库中。

流程

  1. 创建 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-typeedge-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 号以易于执行进一步的任务。

  2. 检查镜像 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 部署,您需要:

5.1.4. 使用镜像构建器命令行界面下载 RHEL for Edge 镜像

要使用 RHEL 镜像构建器命令行界面下载 RHEL for Edge 镜像,请确保您满足以下先决条件,然后按照以下流程操作。

先决条件

  • 您已创建了 RHEL for Edge 镜像。

流程

  1. 查看 RHEL for Edge 镜像状态。

    # composer-cli compose status

    输出必须显示以下内容:

    $ <UUID> FINISHED date blueprint-name blueprint-version image-type
  2. 下载镜像。

    # composer-cli compose image <UUID>

    RHEL 镜像构建器将镜像作为 tar 文件下载到当前目录。

    UUID 号和镜像大小会同时显示。

    $ <UUID>-commit.tar: size MB

镜像包含提交和 json 文件,其中包含有关存储库内容的信息元数据。