Menu Close

准备安装和管理 RHEL for Edge 镜像

Red Hat Enterprise Linux 9

在 Red Hat Enterprise Linux 9 上制作、安装和管理 RHEL for Edge 镜像

摘要

本文档适用于希望使用 Image Builder 编写自定义 RHEL(rpm-ostree)镜像的用户,然后在 Edge 服务器上远程安装和管理镜像。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。

  • 关于特定内容的简单评论:

    1. 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
    2. 用鼠标指针高亮显示您想评论的文本部分。
    3. 点在高亮文本上弹出的 Add Feedback
    4. 按照显示的步骤操作。
  • 要通过 Bugzilla 提交反馈,请创建一个新的 ticket:

    1. 进入 Bugzilla 网站。
    2. 在 Component 中选择 Documentation
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

第 1 章 RHEL for Edge 镜像

RHEL for Edge 镜像是一个 rpm-ostree 镜像,其中包含在 Edge 服务器中远程安装 RHEL 的系统软件包。

系统软件包包括:

  • 基本操作系统软件包
  • podman 作为容器引擎
  • 其他 RPM 内容

您可以根据要求自定义镜像来配置操作系统内容,并将它们部署到物理和虚拟机、内部、云或容器环境中。

您可以在裸机、设备和 Edge 服务器上部署 RHEL for Edge 镜像。

在 RHEL for Edge 镜像中,您可以实现:

主要特性

1.1. RHEL for Edge 支持的构架

目前,您可以在 AMD 和 Intel 64 位系统中部署 RHEL for Edge 镜像。

注意

目前,RHEL for Edge 不支持 ARM 系统。

1.2. 如何编写和部署 RHEL for Edge 镜像

根据部署环境是基于网络还是基于网络还是基于非网络,构成和部署 RHEL for Edge 镜像的整体流程会有所不同。

制作和部署 RHEL for Edge 镜像分为两个阶段:

  1. 使用 Image Builder 制作 RHEL rpm-ostree 镜像.您可以使用 composer-cli 工具中的命令行界面访问 Image Builder,或者在 RHEL web 控制台中使用图形用户界面。
  2. 使用 RHEL 安装程序部署镜像。

在制作 RHEL for Edge 镜像时,您可以选择以下任一镜像类型:

表 1.1. RHEL for Edge 镜像类型

镜像类型描述适用于基于网络的部署适用于非基于网络的部署

RHEL for Edge Commit(.tar)

提交镜像不直接启动,即使它包含完整的操作系统。要引导 Commit 镜像类型,您必须部署它。

RHEL for Edge Container(.tar)

容器创建一个 OSTree 提交,并将其嵌入到带有 Web 服务器的 OCI 容器中。当容器启动时,web 服务器会将提交充当 OSTree 存储库。

RHEL for Edge Installer(.iso)

安装程序镜像类型从正在运行的容器拉取提交,并创建一个可安装的引导 ISO,并配置了 kickstart 文件,以使用嵌入的 OSTree 提交。

RHEL for Edge Raw 镜像 (.raw.xz)

压缩的原始镜像由一个文件组成,该文件中包含有现有部署有 OSTree 提交的分区布局。您可以在硬盘上闪存 RHEL Raw 镜像,也可以在虚拟机中启动。

RHEL for Edge 简化的安装程序(.iso)

Simplified Installer 镜像类型从正在运行的容器中提取提交,并创建一个可安装的引导 ISO,并带有一个 kickstart 文件,配置为使用嵌入式 OSTree 提交。

镜像类型在内容上有所不同,因此适合不同类型的部署环境。

1.3. 非基于网络的部署

使用 Image Builder 创建灵活的 RHEL rpm-ostree 镜像以满足您的要求,然后使用 Anaconda 在您的环境中部署它们。

您可以使用 composer-cli 工具中的命令行界面访问 Image Builder,或者在 RHEL web 控制台中使用图形用户界面。

在非网络部署中制作和部署 RHEL for Edge 镜像涉及以下高级别的步骤:

  1. 安装并注册 RHEL 系统
  2. 安装镜像构建器
  3. 使用镜像构建器,为 RHEL for Edge 容器镜像创建自定义蓝图
  4. 在镜像构建器中导入 RHEL for Edge 蓝图
  5. 创建嵌入在 OCI 容器中的 RHEL for Edge 镜像,其中包含 webserver 可将提交部署为 OSTree 存储库
  6. 下载 RHEL for Edge 容器镜像文件
  7. 使用 RHEL for Edge 容器提交部署容器提供存储库
  8. 使用 Image Builder,为 RHEL for Edge Installer 镜像创建一个蓝图
  9. 创建一个 RHEL for Edge 安装程序镜像,以便从嵌入的、使用 RHEL for Edge 容器镜像的正在运行的容器中拉取提交
  10. 下载 RHEL for Edge 安装程序镜像
  11. 运行安装
  12. 创建镜像

下图显示了 RHEL for Edge 镜像非网络部署工作流:

图 1.1. 在非网络环境中部署 RHEL for Edge

RHEL for Edge 非网络部署工作流

1.4. 基于网络的部署

使用 Image Builder 创建灵活的 RHEL rpm-ostree 镜像以满足您的要求,然后使用 Anaconda 在您的环境中部署它们。镜像构建器自动标识部署设置的详情,并将镜像输出作为 edge-commit 作为一个 .tar 文件生成。

您可以使用 composer-cli 工具中的命令行界面访问 Image Builder,或者在 RHEL web 控制台中使用图形用户界面。

您可以通过执行以下高级别步骤编写和部署 RHEL for Edge 镜像:

  1. 安装并注册 RHEL 系统
  2. 安装镜像构建器
  3. 使用镜像构建器,为 RHEL for Edge 镜像创建蓝图
  4. 在镜像构建器中导入 RHEL for Edge 蓝图
  5. 创建 RHEL for Edge 镜像
  6. 下载 RHEL for Edge 镜像文件
  7. 设置 Web 服务器
  8. 下载 RHEL boot.iso 镜像
  9. 使用 web 服务器在 Edge 设备中安装 RHEL for Edge 镜像

下图显示了 RHEL for Edge 网络镜像部署工作流:

图 1.2. 在网络基础环境中部署 RHEL for Edge

RHEL for Edge 网络部署工作流

1.5. RHEL RPM 镜像和 RHEL for Edge 镜像之间的区别

您可以使用基于软件包的传统 RPM 格式创建 RHEL 系统镜像,也可以作为 RHEL for Edge (rpm-ostree) 镜像。

您可以使用基于软件包的传统 RPM 在传统数据中心上部署 RHEL。但是,利用 RHEL for Edge 镜像,您可以在传统数据中心以外的服务器上部署 RHEL。这些服务器包括最接近数据生成边缘服务器来源处理大量数据的系统。

请参阅下表以了解 RHEL for Edge 镜像与基于软件包的 RHEL RPM 镜像有何不同。

表 1.2. RHEL RPM 镜像和 RHEL for Edge 镜像之间的区别

主要属性

RHEL RPM 镜像

RHEL for Edge 镜像

OS assemble

您可以在本地编译软件包以组成镜像。

软件包组合在一个 ostree 中,您可以在系统中安装。

OS 更新

您可以使用 dnf update 来应用已启用的存储库中的可用更新。

如果 /etc/ostree/remotes.d/ 的 ostree 远程中存在任何新的提交,则可以使用 rpm-ostree upgrade 升级来暂存更新。该更新会在系统重启时生效。

软件仓库

软件包包含 DNF 存储库

软件包包含 Ostree 远程存储库

用户访问权限

读取写入

只读(/usr)

数据持久性

您可以将镜像挂载到任何非 tmpfs 挂载点

/etc/var 已启用读写权限,并包含持久性数据。

第 2 章 设置镜像构建器

使用镜像构建器创建自定义 RHEL for Edge 镜像。在 RHEL 系统上安装 Image Builder 后,Image Builder 可在 RHEL web 控制台中作为应用程序提供。您还可以通过 composer-cli 工具中的命令行界面访问 Image Builder。

注意

建议您在虚拟机上安装 Image Builder。

在您要安装镜像构建器的环境中,请确保首先满足系统要求,然后安装它。

2.1. 镜像构建器系统要求

Image Builder 运行的环境(如虚拟机)必须满足下表中列出的要求。

表 2.1. 镜像构建器系统要求

参数

最低要求值

系统类型

专用虚拟机

处理器

2 个内核

内存

4 GiB

磁盘空间

20 GiB

访问权限

管理员级别(root)

网络

连接至互联网

注意

20 GiB 磁盘空间要求足以在主机上安装并运行 Image Builder。要构建和部署镜像构建,您必须分配额外的专用磁盘空间。

2.2. 安装镜像构建器

要在专用虚拟机上安装 Image Builder,请按照以下步骤执行:

先决条件

  • 虚拟机已创建并处于开机状态。
  • 已安装 RHEL,并且已订阅了 RHSM 或红帽卫星。

步骤

  1. 在虚拟机上安装以下软件包:

    • osbuild-composer
    • composer-cli
    • cockpit-composer
    • bash-completion
    • firewalld
    # dnf install osbuild-composer composer-cli cockpit-composer bash-completion firewalld

    镜像构建器在 RHEL web 控制台中作为应用程序安装。

  2. 重启虚拟机
  3. 将系统防火墙配置为允许访问 Web 控制台:

    # firewall-cmd --add-service=cockpit && firewall-cmd --add-service=cockpit --permanent
  4. 启用镜像构建器。

    # systemctl enable osbuild-composer.socket --now
    # systemctl enable cockpit.socket --now

    osbuild-composer 和 cockpit 服务在第一次访问时自动启动。

  5. 载入 shell 配置脚本,以便在不重启的情况下立即启动 composer-cli 命令的自动完成功能:

    $ source /etc/bash_completion.d/composer-cli

其他资源

第 3 章 管理存储库

3.1. 镜像构建器默认系统存储库

osbuild-composer 后端不会继承位于 /etc/yum.repos.d/ 目录中的系统存储库。相反,它拥有自己的一组在 /usr/share/osbuild-composer/repositories 目录中定义的官方存储库。要覆盖官方存储库,您必须在 /etc/osbuild-composer/repositories 中定义覆盖。这个目录用于用户定义的覆盖,这里的文件优先于 /usr 目录中的文件。

配置文件不是 /etc/yum.repos.d/ 中常见的 DNF 存储库格式。相反,它们是简单的 JSON 文件。

3.2. 覆盖系统存储库

您可以按照以下步骤在 /etc/osbuild-composer/repositories 目录中配置存储库覆盖。

先决条件

  • 您有一个可从主机系统访问的自定义存储库

步骤

  1. 创建包含您要使用的存储库覆盖的目录:

    $ sudo mkdir -p /etc/osbuild-composer/repositories
  2. 创建具有以下结构的 JSON 文件,例如:

    {
        "<ARCH>": [
            {
                "name": "baseos",
                "metalink": "",
                "baseurl": "http://mirror.example.com/composes/released/RHEL-9/9.0/BaseOS/x86_64/os/",
                "mirrorlist": "",
                "gpgkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\n (…​)",
                "check_gpg": true,
                "metadata_expire": ""
            }
        ]
    }

    仅指定以下属性之一: metalinkmirrorlistbaseurl。剩余的字段是可选的。

  3. 使用与 RHEL 版本对应的名称保存 JSON 文件,例如:

    /etc/osbuild-composer/repositories/rhel-90.json
    1. 或者,您可以从 /usr/share/osbuild-composer/ 复制发行版的 JSON 文件,并修改其内容。

      1. 将存储库文件复制到您创建的目录中。

        $  cp /usr/share/osbuild-composer/repositories/rhel-version.json /etc/osbuild-composer/repositories/

        将 rhel-version.json 替换为您的 RHEL 版本,例如: rhel-9.json

  4. 使用文本编辑器,编辑 rhel-9.json 文件中的 baseurl 路径。例如:

    $ vi /etc/osbuild-composer/repositories/rhel-9.json

因此,存储库指向从 /etc/yum.repos.d/redhat.repo 文件中复制过来的正确的 URL。

3.3. 覆盖支持订阅的系统存储库

osbuild-composer 服务可以使用 /etc/yum.repos.d/redhat.repo 文件中定义的系统订阅。要在 osbuild-composer 中使用系统订阅,您需要定义一个具有以下特点的存储库覆盖:

  • /etc/yum.repos.d/redhat.repo 中定义的存储库相同的 baseurl
  • JSON 对象中定义的 "rhsm": true 值。

先决条件

  • /etc/yum.repos.d/redhat.repo 中定义了订阅的系统
  • 您已创建了一个存储库覆盖。请参阅 覆盖系统存储库

步骤

  1. /etc/yum.repos.d/redhat.repo 文件中获取 baseurl

    [AppStream]
    name = AppStream mirror example
    baseurl = https://mirror.example.com/RHEL-9/9.0/AppStream/x86_64/os/
    enabled = 1
    gpgcheck = 0
    sslverify = 1
    sslcacert = /etc/pki/ca1/ca.crt
    sslclientkey = /etc/pki/ca1/client.key
    sslclientcert = /etc/pki/ca1/client.crt
    metadata_expire = 86400
    enabled_metadata = 0
  2. 配置存储库覆盖以使用相同的 baseurl,并将 rhsm 设为 true:

    {
        "x86_64": [
            {
                "name": "AppStream mirror example",
                "baseurl": "https://mirror.example.com/RHEL-9/9.0/AppStream/x86_64/os/",
                "gpgkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\n (…​)",
                "check_gpg": true,
                "rhsm": true
            }
        ]
    }
注意

osbuild-composer 不自动使用 /etc/yum.repos.d/ 中定义的存储库。您需要手动将它们指定为系统存储库覆盖 ,或使用 composer-cli 指定为额外的 。系统存储库覆盖通常用于"BaseOS"和"AppStream"存储库,而 composer-cli 源则用于所有其他存储库。

第 4 章 在 RHEL web 控制台中使用 Image Builder 编写 RHEL for Edge 镜像

使用 Image Builder 创建自定义 RHEL for Edge 镜像(OSTree 提交)。

要访问 Image Builder 并创建自定义 RHEL for Edge 镜像,您可以使用 RHEL web 控制台界面或命令行界面。本节提供有关使用 RHEL web 控制台访问镜像构建器和为 Edge 镜像创建 RHEL 的信息。

您可以通过执行以下高级别步骤,在 RHEL web 控制台中使用 Image Builder 编写 RHEL for Edge 镜像:

  1. 在 RHEL web 控制台中访问镜像构建器
  2. 为 RHEL for Edge 镜像创建一个蓝图。您可以创建以下蓝图:

    • 带有 "RHEL for Edge Commit(.tar)""RHEL for Edge Container(.tar)" 镜像的蓝图
    • "RHEL for Edge Installer (.iso)" 镜像的蓝图
  3. 为 RHEL for Edge 镜像蓝图创建用户帐户
  4. 创建 RHEL for Edge 镜像。您可以创建以下镜像:

    • 在 RHEL web 控制台中使用 Image Builder 创建 RHEL for Edge Commit 镜像
    • 在 RHEL web 控制台中使用 Image Builder 创建 RHEL for Edge 容器镜像
    • 在 RHEL web 控制台中使用 Image Builder 创建 RHEL for Edge Installer 镜像
  5. 下载 RHEL for Edge 镜像

4.1. 在 RHEL web 控制台中访问镜像构建器

要在 RHEL web 控制台中访问 Image Builder,请确保您满足以下先决条件,然后按照以下步骤操作。

先决条件

  • 已安装 RHEL 系统。
  • 您对系统具有管理权限。
  • 您已将 RHEL 系统订阅了 Red Hat Subscription Manager(RHSM)或 Red Hat Satellite 服务器。
  • 系统开机并通过网络访问。
  • 您已在系统中安装了 Image Builder。

步骤

  1. 在 RHEL 系统中,在 Web 浏览器中访问 https://localhost:9090/
  2. 有关如何远程访问镜像构建器的更多信息,请参阅使用 RHEL 9 web 控制台文档管理系统
  3. 使用管理用户帐户登录 Web 控制台。
  4. 在 Web 控制台中,在左侧菜单中点 Apps
  5. 单击 Image Builder
  6. Image Builder 仪表板在右窗格中打开。
  7. 现在,您可以继续为 RHEL for Edge 镜像创建蓝图。

4.2. 在 RHEL web 控制台中使用 Image Builder 为 RHEL for Edge Commit 镜像创建蓝图

要在 RHEL web 控制台中使用 Image Builder 为 RHEL for Edge Commit 镜像创建一个蓝图,请确保满足以下先决条件,然后按照流程操作。

先决条件

  • 在 RHEL 系统中,您打开了 Image Builder 仪表板。

步骤

  1. 在 Image Builder 仪表板上,点击 Create Blueprint

    此时会打开 Create Blueprint 对话框。

  2. 指定您要创建的蓝图的名称和描述。
  3. Create

    控制面板中显示可用组件的列表。

    注意

    您的系统必须订阅到 RHSM,否则,可用组件列表显示为"Loading"。

  4. 要搜索特定组件,请在 Filter By Name 文本框中输入组件名称,然后按 Enter 键。组件详情窗格显示组件详情及其依赖组件

    您可以选择所需的版本。默认情况下,Web 控制台选择最新版本。

  5. Components Details 窗格中,单击 Add

    如果要从蓝图中删除组件,在 Available component 窗格中点 - 根据组件名称。

  6. Commit 保存蓝图。

    此时会打开蓝图概述的对话框。

  7. Commit
  8. 单击 Back to Blueprints

    Image Builder 仪表板列出了您创建的蓝图。

4.3. 在 RHEL web 控制台中使用 Image Builder 为 RHEL for Edge 容器镜像创建蓝图

要在 RHEL web 控制台中使用 Image Builder 为 RHEL for Edge 容器镜像创建蓝图,请确保满足以下先决条件,然后按照流程操作。

先决条件

  • 在 RHEL 系统中,您打开了 Image Builder 仪表板。

步骤

  1. 在 Image Builder 仪表板上,点击 Create Blueprint

    此时会打开 Create Blueprint 对话框。

  2. 指定您要创建的蓝图的名称和描述。
  3. Create

    控制面板中显示可用组件的列表。

    注意

    您的系统必须订阅到 RHSM,否则,可用组件列表显示为"Loading"。

  4. 要搜索特定组件,请在 Filter By Name 文本框中输入组件名称,然后按 Enter 键。组件详情窗格显示组件详情及其依赖组件

    您可以选择所需的版本。默认情况下,Web 控制台选择最新版本。

  5. Components Details 窗格中,单击 Add

    如果要从蓝图中删除组件,在 Available component 窗格中点 - 根据组件名称。

  6. Commit 保存蓝图。

    此时会打开蓝图概述的对话框。

  7. Commit
  8. 单击 Back to Blueprints

    Image Builder 仪表板列出了您创建的蓝图。

4.4. 在 RHEL web 控制台中使用 Image Builder 为 RHEL for Edge Installer 镜像创建蓝图

蓝图创建 "RHEL for Edge Installer(.iso)" 镜像,现在支持指定用户帐户以在安装时自动在系统中创建一个或多个用户。请参阅为 RHEL for Edge 镜像蓝图创建管理用户帐户

要在 RHEL web 控制台中使用 Image Builder 为 RHEL for Edge Installer 镜像创建蓝图,请确保满足以下先决条件,然后按照流程操作。

先决条件

  • 在 RHEL 系统中,您打开了 Image Builder 仪表板。

步骤

  1. 在 Image Builder 仪表板上,点击 Create Blueprint

    此时会打开 Create Blueprint 对话框。

  2. 指定您要创建的蓝图的名称和描述。
  3. Create
  4. 单击 Back to Blueprints

    Image Builder 仪表板列出了您创建的蓝图。

4.5. 在 RHEL for Edge 镜像蓝图中添加源

默认情况下,提供 appstreambaseos dnf 官方源。您可以使用 Image Builder、dnf repository, mirrorlistmetalink 中定义的源,包含来自自定义第三方存储库中的 RPM 软件包,并将它们添加到蓝图中。这些源是全局的,因此适用于所有蓝图。

系统源仓库 在您的计算机上本地设置,且无法禁用或从 Image Builder 中删除。您可以添加额外的自定义源,从而能够访问系统中可用的系统源之外的其他内容。可以从主机系统访问的任何 RPM 存储库都作为源有效。无法禁用系统源

执行以下步骤将源添加到您的蓝图中。

先决条件

  • 在浏览器中打开了 RHEL web 控制台的镜像构建器界面。

步骤

  1. 点右上角的 ⫶ Manage Sources 按钮。

    此时会出现一个带有可用源、名称和描述的弹出窗口。

  2. 在弹出窗口的右侧点击 Add Source 按钮。
  3. 添加所需的 Source nameSource pathSource Type

    (可选)选中与 Security 字段 相关的复选框。

    1. SSL 证书 - 验证存储库的身份并启用加密连接。
    2. GPG Key - 验证此存储库中可用的 RPM 软件包的签名。
  4. 单击 Add Source。屏幕中显示可用的源窗口并列出您添加的源。

    因此,新的系统源可以使用或者您可能要进行的任何更改。

4.6. 为 RHEL for Edge 镜像蓝图创建管理用户帐户

使用 Image Builder 创建的 RHEL for Edge 镜像会将 root 帐户锁定且没有包括其他帐户。借助镜像构建器,您可以使用 RHEL for Edge 蓝图的密码创建用户帐户,以便您可以登录到从蓝图创建的 RHEL for Edge 镜像。对于管理用户帐户,您可以具有基于密码的访问或基于 SSH 密钥的访问。

注意

对于使用 kickstart 的网络安装,您还可以使用 Kickstart 创建用户帐户。

先决条件

  • 您已创建了可用于要创建的用户帐户的 SSH 密钥。
  • 您已在 RHEL web 控制台中访问 Image Builder 仪表板。
  • 您已为 RHEL for Edge 镜像创建了蓝图。

步骤

  1. 在 Image Builder 仪表板中,找到 RHEL for Edge 镜像的蓝图。

    要搜索所需的蓝图,请在 Filter by Name 文本框中指定蓝图名称,然后按 Enter 键。

  2. 点击蓝图名称。

    镜像构建器显示蓝图详情。

  3. 在 Customizations 选项卡上,单击 Create User Account
  4. 在 Create User Account 对话框中,指定用户帐户所需的详细信息和密码。

    对于基于密码的访问,请指定用户帐户的密码。

    对于基于 SSH 的访问,请为用户帐户指定 SSH 密钥。

注意

如果要为您要创建的用户帐户提供管理员权限,请确保选中 Server administrator 复选框。

镜像构建器创建指定的用户帐户并显示详情。

如果需要,您可以创建额外的用户帐户。

4.7. 在 RHEL web 控制台中使用 Image Builder 创建 RHEL for Edge Commit 镜像

您可以通过选择 "RHEL for Edge Commit(.tar)" 为基于网络的部署创建 RHEL for Edge Commit 镜像。"RHEL for Edge Commit(.tar)" 提交镜像类型不直接启动,即使它包含完整的操作系统。要引导提交镜像类型,您必须将它部署到正在运行的容器中。

要在 RHEL web 控制台中使用 Image Builder 创建 RHEL for Edge Commit 镜像,请按照以下步骤执行:

先决条件

  • 在 RHEL 系统中,您已访问 Image Builder 仪表板。
  • 您已为 RHEL for Edge Commit 镜像创建了一个蓝图。

步骤

  1. 在 Image Builder 仪表板中,对于您为 RHEL for Edge Commit 镜像创建的蓝图,点 Create Image

    要搜索特定蓝图,在 Filter By Name 文本框中输入蓝图名称,然后按 Enter 键。

  2. Create Image 窗口中,执行以下步骤:
  3. 对于基于网络的不是,从类型下拉列表中选择 “RHEL for Edge Commit (.tar)”
  4. 指定以下参数 之一存储库 URL并行提交.

    重要

    使用 Repository URLParent commit 参数一起会导致错误。

    1. 存储库 URL :指定要嵌入镜像中提交的 OSTree 存储库的 URL。例如: http://10.0.2.2:8080/repository/
    2. 父提交 :指定之前的提交,如果此时没有提交,则保留为空。
  5. Ref textbox 中,指定创建您的提交的参考路径。默认情况下,Web 控制台指定 rhel/9/$ARCH/edge。"$ARCH" 值由主机机器决定。
  6. Create

    镜像构建器开始为您创建的蓝图创建一个 RHEL for Edge Commit 镜像。

  7. 检查 RHEL for Edge Commit 镜像创建进度:

    1. 点击面包屑导航栏中的蓝图名称
    2. Images 选项卡。

      注意

      镜像创建过程需要 20 分钟才能完成。要中止镜像创建过程,请点击 More Options 菜单中的 Stop

      镜像创建过程完成后,您可以下载生成的 "RHEL for Edge Commit(.tar)" 镜像。

4.8. 在 RHEL web 控制台中使用 Image Builder 创建 RHEL for Edge 容器镜像

您可以通过选择 "RHEL for Edge Container(.tar)" 为非基于网络的部署创建 RHEL for Edge 镜像。RHEL for Edge Container(.tar) 镜像类型会创建一个 OSTree 提交,并将其嵌入到带有 web 服务器的 OCI 容器中。容器启动后,Web 服务器将提交充当 OSTree 存储库。

按照以下步骤,使用 RHEL web 控制台中的 Image Builder 创建 RHEL for Edge 容器镜像。

先决条件

  • 在 RHEL 系统中,您已访问 Image Builder 仪表板。
  • 您已为 RHEL for Edge 容器镜像创建了一个蓝图。

步骤

  1. 在 Image Builder 仪表板中,针对您为 RHEL for Edge 镜像创建的蓝图, Create Image。要搜索特定蓝图,在 Filter By Name 文本框中输入蓝图名称,然后按 Enter 键。
  2. Create Image 窗口中,执行以下步骤:
  3. 类型 下拉列表中,选择 "RHEL for Edge Container(.tar) "。
  4. Repository URL 文本框中,指定嵌入在镜像中提交的 OSTree 存储库的 URL。例如: http://10.0.2.2:8080/repository/
  5. 父提交文本框中,指定上一个提交,或将它留空;如果此时没有提交。
  6. Ref textbox 中,指定创建您的提交的参考路径。默认情况下,Web 控制台指定 rhel/9/$ARCH/edge。"$ARCH" 值由主机机器决定。
  7. Create

    镜像构建器开始为您创建的蓝图创建一个 RHEL for Edge 容器镜像。

  8. 检查 RHEL for Edge Container 镜像创建进度:

    1. 点击面包屑导航栏中的蓝图名称
    2. Images 选项卡。

      注意

      镜像创建过程需要 20 分钟才能完成。要中止镜像创建过程,请点击 More Options 菜单中的 Stop

镜像创建过程完成后,您可以下载生成的 "RHEL for Edge Container(.tar)" 镜像。

4.9. 在 RHEL web 控制台中使用 Image Builder 创建 RHEL for Edge Installer 镜像

您可以通过选择 "RHEL for Edge Installer(.iso)" 为非基于网络的部署创建 RHEL for Edge 安装程序镜像。RHEL for Edge 安装程序(.iso) 镜像类型从 RHEL for Edge Container(.tar) 提供的运行中容器拉取 OSTree 提交存储库,并创建带有配置为使用嵌入式 OSTree 提交的 kickstart 文件安装的引导 ISO 镜像。

按照以下步骤,在 RHEL web 控制台中使用 Image Builder 创建 RHEL for Edge 镜像。

先决条件

  • 在 RHEL 系统中,您已访问 Image Builder 仪表板。
  • 为 RHEL for Edge Installer 镜像创建了蓝图。
  • 您已创建了 RHEL for Edge 容器镜像,并将其加载到正在运行的容器中。

步骤

  1. 在 Image Builder 仪表板中,针对您为 RHEL for Edge Installer 镜像创建的蓝图,点 Create Image

    要搜索特定蓝图,在 Filter By Name 文本框中输入蓝图名称,然后按 Enter 键。

  2. Create Image 窗口中,执行以下步骤:

    1. 类型 下拉列表中,选择 "RHEL for Edge Installer(.iso) "。
    2. Repository URL 文本框中,指定提交的运行中容器 OSTree 存储库的 URL,以嵌入到镜像中。例如: http://10.0.2.2:8080/repository/
    3. Parent commit 文本框中,您可以指定之前的提交或留空;如果此时没有提交。
    4. Ref 文本框中,引用路径必须与 RHEL for Edge Container image compose 中的 Ref 匹配。
  3. Create

    镜像构建器开始为您创建的蓝图创建 RHEL for Edge 安装程序镜像。

  4. 检查 RHEL for Edge Installer 镜像创建进度:

    1. 点击面包屑导航栏中的蓝图名称
    2. Images 选项卡。

      注意

      镜像创建过程需要 20 分钟才能完成。要中止镜像创建过程,请点击 More Options 菜单中的 Stop

镜像创建过程完成后,您可以下载生成的 RHEL for Edge 安装程序(.iso) 镜像并将 ISO 镜像引导到设备中。

4.10. 下载 RHEL for Edge 镜像

Image Builder 成功创建 RHEL for Edge 镜像后,将镜像下载到本地主机上。

步骤

下载镜像:

  1. More Options 菜单中点 Download

    Image Builder 将文件下载到您的默认下载位置。

下载的文件包含一个 .tar 文件,其中包含适用于 RHEL for Edge Commit 和 RHEL for Edge 容器镜像的 OSTree 存储库,或 RHEL for Edge 安装程序镜像(带有 OSTree 存储库)的 .iso 文件。此存储库包含提交和 json 文件,其中包含有关存储库内容的信息元数据。

4.11. 其他资源

第 5 章 使用 Image Builder 命令行编写 RHEL for Edge 镜像

您可以使用 Image Builder 创建自定义 RHEL for Edge 镜像 (OSTree commit)。

要访问 Image Builder 并创建自定义 RHEL for Edge 镜像,您可以使用 RHEL web 控制台界面或命令行界面。本章提供有关使用 CLI 为 Edge 镜像创建 RHEL 的信息。

对于基于网络的部署,使用 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 容器镜像
  3. 为 RHEL for Edge Installer 镜像创建一个蓝图
  4. 为 Edge 安装程序创建 RHEL
  5. 下载 RHEL for Edge 镜像

要执行这些步骤,请使用 composer-cli 软件包。

注意

要以非 root 身份运行 composer-cli 命令,您必须是 weldr 组的一部分,或者您必须具有系统的管理员访问权限。

5.1. 基于网络的部署工作流

5.1.1. 使用 Image Builder 命令行界面创建 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. 将蓝图推送到镜像构建器服务器:

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

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

    # composer-cli blueprints depsolve blueprint-name

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

要使用 Image Builder 命令行界面创建 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. 使用 Image Builder 命令行界面的父提交创建 RHEL for Edge 镜像更新

如果您对现有蓝图进行了更改,例如,您添加了一个新的软件包,并希望使用这个新软件包更新现有 RHEL for Edge 镜像,您可以使用父提交 ID 生成更新的 RHEL for Edge Commit(.tar)镜像。

要使用 Image Builder 命令行界面的父提交创建 RHEL for Edge 镜像,请确定您满足以下先决条件,然后按照以下步骤操作。

先决条件

步骤

  1. 创建 RHEL for Edge 镜像。

    # composer-cli compose start-ostree --ref rhel/9/x86_64/edge --parent parent-OSTree-commit-id blueprint-name image-type

    其中,

    • --ref 与构建 ostree 存储库的值相同
    • --parent 是 OSTree 父提交
    • blueprint-name 是 RHEL for Edge 蓝图名称。
    • image-typeedge-commit(对于 network-based deployment

      注意

      --parent 参数只能用于 RHEL for Edge Commit(.tar)镜像类型。将 --url--parent 参数一起使用会产生错误。

      这时将显示一个确认已添加到队列中的 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. 使用 Image Builder 命令行界面下载 RHEL for Edge 镜像

要使用 Image Builder 命令行界面下载 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>

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

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

    $ <UUID>-commit.tar: size MB

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

5.2. 非基于网络的部署工作流

5.2.1. 使用 Image Builder CLI 创建 RHEL for Edge 容器镜像蓝图

要为 RHEL for Edge 容器镜像创建蓝图,请执行以下步骤:

步骤

  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. 将蓝图推送到镜像构建器服务器:

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

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

    # composer-cli blueprints depsolve blueprint-name

5.2.2. 使用 Image Builder CLI 创建 RHEL for Edge 容器镜像

要使用 Image Builder 命令行界面创建 RHEL for Edge 容器镜像,请确保已满足以下先决条件并遵循这个流程。

先决条件

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

步骤

  1. 创建 RHEL for Edge 容器镜像。

    # composer-cli compose start-ostree --ref rhel/9/x86_64/edge --url URL-OSTree-repository blueprint-name image-type

    其中,

    • --ref 与用来构建 ostree 存储库的值相同
    • --url 是要嵌入到镜像中的提交的 OSTree 存储库的 URL。例如: http://10.0.2.2:8080/repository/。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像
    • blueprint-name 是 RHEL for Edge 蓝图名称。
    • image-type 是用于非基于网络的部署edge-container

      这时将显示一个确认已添加到队列中的 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.2.3. 使用 Image Builder CLI 创建 RHEL for Edge Installer 镜像蓝图

现在,您可以在 RHEL for Edge Installer 蓝图中指定用户帐户。它在安装时会创建新用户。要为 RHEL for Edge Installer 镜像创建一个蓝图,请执行以下步骤:

步骤

  1. 以 TOML 格式创建一个纯文本文件,其内容如下:

    name = "blueprint-installer"
    description = "blueprint-for-installer-image"
    version = "0.0.1"
    
    [[customizations.user]]
    name = "user"
    description = "account"
    password = "user-password"
    key = "user-ssh-key "
    home = "path"
    groups = ["user-groups"]

    其中,

    • blueprint-name 是名称,print-text-description 是您的蓝图的描述。
    • 0.0.1 是 Semantic Versioning 方案的版本号。
  2. 将蓝图推送到镜像构建器服务器:

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

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

    # composer-cli blueprints depsolve blueprint-name

5.2.4. 使用命令行界面为非网络部署创建 RHEL for Edge 安装程序镜像

要创建用来嵌入 OSTree 提交的 RHEL for Edge 安装程序镜像,请使用 Image Builder 命令行界面,请确保满足以下先决条件,然后按照流程操作。

先决条件

  • 您已为 RHEL for Edge Installer 镜像创建了蓝图。
  • 您已创建了 RHEL for Edge Container 镜像,并使用 web 服务器进行部署。

步骤

  1. 开始创建 RHEL for Edge Installer 镜像。

    # composer-cli compose start-ostree --ref rhel/9/x86_64/edge --url URL-OSTree-repository blueprint-name image-type

    其中,

    • ref 与用于构建 ostree 存储库的客户的值相同
    • URL-OSTree-repository 是要嵌入到镜像中的提交 OSTree 存储库的 URL。例如: http://10.0.2.2:8080/repository/。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像
    • blueprint-name 是 RHEL for Edge Installer 蓝图名称。
    • image-typeedge-installer

      这时将显示一个确认已添加到队列中的 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>

    镜像就绪后,您可以将它用于非网络部署

5.2.5. 使用 Image Builder CLI 下载 RHEL for Edge Installer 镜像

要使用 Image Builder 命令行界面下载 RHEL for Edge Installer 镜像,请确保您满足以下先决条件,然后按照以下步骤操作。

先决条件

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

步骤

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

    # composer-cli compose status

    输出必须显示以下内容:

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

    # composer-cli compose image <UUID>

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

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

    $ <UUID>-boot.iso: size MB

生成的镜像是可引导 ISO 镜像。

5.3. 支持的镜像自定义

蓝图中支持一些镜像自定义。要使用这些选项,您必须首先在蓝图中配置自定义,并将它导入到镜像构建器。

注意

目前在 web 控制台中不支持这些自定义。

设置镜像主机名
[customizations]
hostname = "baseimage"
生成系统镜像的用户规范
[[customizations.user]]
name = "USER-NAME"
description = "USER-DESCRIPTION"
password = "PASSWORD-HASH"
key = "PUBLIC-SSH-KEY"
home = "/home/USER-NAME/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]
uid = NUMBER
gid = NUMBER
注意

GID 是可选的,必须已存在于镜像中、由软件包创建,或者由蓝图 [[customizations.group] 条目创建。

重要

若要生成哈希,您必须在您的系统上安装 python3。以下命令将安装 python3 软件包。

# dnf install python3

PASSWORD-HASH 替换为实际密码散列。要生成哈希,请使用如下命令:

$ python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

PUBLIC-SSH-KEY 替换为实际公钥。

使用适当的值替换其他占位符。

根据需要可以省略任何行,只需要用户名。

为每个要包含的用户重复这个块。

生成系统镜像的组规范
[[customizations.group]]
name = "GROUP-NAME"
gid = NUMBER

为每个组重复此块。

设置现有用户的 ssh 密钥
[[customizations.sshkey]]
user = "root"
key = "PUBLIC-SSH-KEY"
注意

这个选项仅适用于现有用户。要创建用户并设置 ssh 密钥,请参阅本节中自定义的系统镜像自定义的用户规格

在默认值中附加一个内核引导参数选项
[customizations.kernel]
append = "KERNEL-OPTION"
默认情况下,Image Builder 将默认内核构建到镜像中。但是,您可以使用蓝图中的以下配置自定义内核
[customizations.kernel]
name = "KERNEL-rt"
定义要在镜像中使用的内核名称
[customizations.kernel.name]
name = "KERNEL-NAME"
为生成的系统镜像设置时区和 网络时间协议 (NTP) 服务器
[customizations.timezone]
timezone = "TIMEZONE"
ntpservers = "NTP_SERVER"

如果您没有设置时区,系统将默认使用 Universal Time, Coordinated (UTC)。设置 NTP 服务器是可选的。

为生成的系统镜像设置区域设置
[customizations.locale]
languages = ["LANGUAGE"]
keyboard = "KEYBOARD"

设置语言和键盘选项是必须的。您可以添加多种语言。您添加的第一个语言是主要语言,其他语言为次要语言。

为生成的系统镜像设置防火墙
[customizations.firewall]
port = ["PORTS"]

您可以使用数字端口或 /etc/services 文件中的名称来启用列表。

自定义防火墙服务

查看可用的防火墙服务。

$ firewall-cmd --get-services

在蓝图中,在 customs.firewall.service 部分下指定要自定义的防火墙服务。

[customizations.firewall.services]
enabled = ["SERVICES"]
disabled = ["SERVICES"]

firewall.services 中列出的服务与 /etc/services 文件中提供的名称不同。

您可选择为计划创建的系统镜像自定义防火墙服务。

注意

如果您不想自定义防火墙服务,请省略蓝图中的 [customizations.firewall][customizations.firewall.services] 部分。

设置在引导时要启用哪个服务
[customizations.services]
enabled = ["SERVICES"]
disabled = ["SERVICES"]

您可以控制在引导期间要启用哪些服务。有些镜像类型已经启用或禁用了特定服务,以便镜像正常工作,此设置无法覆盖。

注意

每次构建启动时,它都会克隆存储库。如果您引用具有大量历史记录的存储库,则克隆可能会需要一段时间,并使用大量的磁盘空间。另外,克隆是临时的,在创建 RPM 软件包后会被删除。

指定自定义文件系统配置

您可以在蓝图中指定自定义文件系统配置,因此创建带有特定磁盘布局的镜像,而不是使用默认的布局。通过使用蓝图中的非默认布局配置,您可以受益于:

  • 安全基准合规性
  • 防止磁盘不足错误
  • performance
  • 与现有设置的一致性

    在蓝图中自定义文件系统配置:

    [[customizations.filesystem]]
    mountpoint = "MOUNTPOINT"
    size = MINIMUM-PARTITION-SIZE

    支持以下 挂载点 及其子目录:

    • / - root 挂载点
    • /var
    • /home
    • /opt
    • /srv
    • /usr
    • /app
    • /data

      注意

      只有在使用 CLI,RHEL 8.5 和 RHEL 9.0 发行版才支持自定义挂载点。在早期发行本中,您只能将 root 分区指定为挂载点,并将 size 参数指定为镜像大小的别名。

      如果您有一个以上的分区,您可以在 LVM 中创建带有自定义文件系统分区的镜像,并在运行时重新定义这些分区大小。为此,您可以在蓝图中指定自定义的文件系统配置,然后使用所需的磁盘布局创建镜像。默认文件系统布局保持不变 - 如果您使用没有文件系统自定义的普通镜像,则 cloud-init 会调整 root 分区。

      在蓝图中添加了文件系统自定义后,该文件系统将被转换为 LVM 分区。

      当您定义 MINIMUM-PARTITION-SIZE 时,没有默认大小格式。支持以下值和单位: kB 到 TB,KiB 到 TiB。例如,您可以以字节为单位定义挂载点大小:

      [[customizations.filesystem]]
      mountpoint = "/var"
      size = 1073741824

      您还可以使用单元定义挂载点大小,例如:

      [[customizations.filesystem]]
      mountpoint = "/opt"
      size = "20 GiB"

5.4. 其他资源

第 6 章 构建简化的安装程序镜像以置备 RHEL for Edge 镜像

您可以构建 RHEL for Edge Simplified Installer 镜像,该镜像针对以无人值守的形式在设备中安装进行了优化,并将镜像置备到 RHEL for Edge 镜像。

6.1. 简化的安装程序镜像构建和部署

使用新镜像类型 edge-simplified-installer 构建 RHEL for Edge Simplified Installer 镜像。

要构建 RHEL for Edge Simplified Installer 镜像,请提供现有的 OSTree 提交。生成的简化镜像包含部署了 OSTree 提交的原始镜像。在引导 Simplified Installer ISO 镜像后,它会置备一个 RHEL for Edge 系统,您可以在一个硬盘中使用或者作为虚拟机的引导镜像。

RHEL for Edge Simplified Installer 镜像针对以无人值守的方式在设备中安装进行了优化,并支持基于网络的部署和非基于网络的部署。但是,对于基于网络的部署,它只支持 UEFI HTTP 引导。

制作并部署简化的 RHEL for Edge 镜像涉及以下高级别的步骤:

  1. 安装并注册 RHEL 系统
  2. 安装镜像构建器
  3. 使用镜像构建器,为 RHEL for Edge 容器镜像创建自定义蓝图
  4. 在镜像构建器中导入 RHEL for Edge 蓝图
  5. 创建嵌入在 OCI 容器中的 RHEL for Edge 镜像,其中包含 webserver 可将提交部署为 OSTree 存储库
  6. edge-simplified-installer创建蓝图
  7. 构建一个简化的 RHEL for Edge 镜像
  8. 下载 RHEL for Edge 简化镜像
  9. 使用 virt-install 安装原始镜像

下图显示了 RHEL for Edge Simplified 的构建与置备工作流:

图 6.1. 在基于网络的环境中构建并置备 RHEL for Edge

RHEL for Edge Simplified 的工作流

6.2. 使用镜像构建器 CLI 为简化的镜像创建蓝图

要为简化的 RHEL for Edge 镜像创建一个蓝图,请执行以下步骤:

步骤

  1. 以 Tom’s Obvious, Minimal Language (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. 将蓝图推送到镜像构建器服务器:

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

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

    # composer-cli blueprints depsolve blueprint-name

6.3. 使用镜像构建器 CLI 创建 RHEL for Edge Simplified Installer 镜像

要使用 Image Builder 命令行界面创建 RHEL for Edge Simplified 镜像,请确保您满足以下先决条件,然后按照以下步骤操作。

先决条件

步骤

  1. 创建可引导 ISO 镜像。

    # composer-cli compose start-ostree \
    blueprint-name \
    edge-simplified-installer \
    --ref rhel/9/x86_64/edge \
    --url URL-OSTree-repository \

    其中,

  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>

6.4. 使用 Image Builder 命令行界面下载简化的 RHEL for Edge 镜像

要使用 Image Builder 命令行界面下载 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>

    镜像构建器将镜像下载到运行该命令的当前目录路径中的 .iso 文件。

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

    $ <UUID>-simplified-installer.iso: size MB

因此,您下载了一个 RHEL for Edge Simplified Installer ISO 镜像。您可以直接使用它作为引导 ISO 来安装 RHEL for Edge 系统。

6.5. 设置 UEFI HTTP 引导服务器

本节演示了如何设置 UEFI HTTP 引导服务器,以便您可以开始通过连接到这个 UEFI HTTP 引导服务器来通过网络置备 RHEL for Edge Virtual Machine。

先决条件

  • 您已创建了 ISO 简化的安装程序镜像。
  • 提供 ISO 内容的 http 服务器。

步骤

  1. 将 ISO 镜像推送到您选择的目录中:

    # mkdir /mnt/rhel9-install/
    # mount -o loop,ro -t iso9660 /path_directory/installer.iso /mnt/rhel9-install/

    使用 RHEL for Edge 可引导 ISO 镜像的路径替换 /path_directory/installer.iso

  2. 将挂载镜像中的文件复制到 HTTP 服务器 root 中。这个命令创建包含镜像内容的 /var/www/html/rhel9-install/ 目录。

    # cp -R /mnt/rhel9-install/* /var/www/html/
    # chmod -R +r /var/www/html/httpboot/*
    注意

    某些复制方法可以跳过 .treeinfo 文件(一个有效的安装源需要这个文体) 。对于整个目录运行 cp 命令,如此过程所示,可正确复制 .treeinfo

  3. 更新 /var/www/html/EFI/BOOT/grub.cfg 文件:

    1. coreos.inst.install_dev=/dev/sda with coreos.inst.install_dev=/dev/vda
    2. 使用 linuxefi /images/pxeboot/vmlinuz 替换 linux /images/pxeboot/vmlinuz
    3. 使用 initrdefi /images/pxeboot/initrd.img 替换 initrd /images/pxeboot/initrd.img
    4. 使用 coreos.inst.image_url=http://{IP-ADDRESS}/disk.img.xz 替换 coreos.inst.image_file=/run/media/iso/disk.img.xz

      IP-ADDRESS 是该计算机的 ip 地址,它将充当 http 引导服务器。

  4. 启动 httpd 服务:

    # systemctl start httpd.service

    因此,在设置 UEFI HTTP 引导服务器后,您可以使用 UEFI HTTP 引导安装 RHEL for Edge 设备。

6.6. 在虚拟机中部署简化的 ISO 镜像

使用以下安装源创建 RHEL for Edge Simplified 镜像,以此部署您生成的 RHEL for Edge ISO 镜像:

  • UEFI HTTP 引导
  • virt-install

本例演示了如何从 ISO 镜像为基于网络的安装创建 virt-install 安装源。

先决条件

  • 您已创建了 ISO 镜像。
  • 您可以设置网络配置来支持 UEFI HTTP 引导。

步骤

  1. 设置网络配置以支持 UEFI HTTP 引导。请参阅使用 libvirt 设置 UEFI HTTP 引导
  2. 使用 virt-install 命令从 UEFI HTTP 引导创建 RHEL for Edge 虚拟机。

    # virt-install \
        --name edge-install-image \
        --disk path=”  “, ,format=qcow2
        --ram 3072 \
        --memory 4096 \
        --vcpus 2 \
        --network network=integration,mac=mac_address \
        --os-type linux
        --os-variant rhel9 \
        --cdrom "/var/lib/libvirt/images/”ISO_FILENAME"
        --boot uefi,loader_ro=yes,loader_type=pflash,nvram_template=/usr/share/edk2/ovmf/OVMF_VARS.fd,loader_secure=no
        --virt-type kvm \
        --graphics none \
         --wait=-1
         --noreboot

运行命令后,虚拟机安装将启动。

验证

  • 登录到创建的虚拟机。

6.7. 从 USB 闪存驱动器部署简化的 ISO 镜像

使用 USB 安装创建 RHEL for Edge Simplified 镜像,从而部署您生成的 RHEL for Edge ISO 镜像。

本例演示了如何从 ISO 镜像创建 USB 安装源。

先决条件

  • 您已创建了简化的安装程序镜像,该镜像是 ISO 镜像。
  • 您有一个 8 GB USB 闪存。

步骤

  1. 将 ISO 镜像文件复制到 USB 闪存驱动器中。
  2. 将 USB 闪存连接到您要引导的计算机的端口。
  3. 从 USB 闪存驱动器引导 ISO 镜像。引导菜单显示以下选项:

    Install Red Hat Enterprise Linux 9
    Test this media & install Red Hat Enterprise Linux 9
  4. Choose Install Red Hat Enterprise Linux 9.这将启动系统安装。

其他资源

第 7 章 使用 FDO 自动置备和注册 RHEL for Edge 设备

您可以构建 RHEL for Edge Simplified Installer 镜像,并将其置备为 RHEL for Edge 镜像。FIDO 设备加入(FDO)流程自动调配和板载您的边缘设备,并与网络连接的其他设备和系统交换数据。

重要

红帽提供了 FDO 流程作为技术预览功能,应在安全网络上运行。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

7.1. FDO 设备加入过程

设备加入是置备和加入物理设备的过程,自动为此设备配置凭证,并使其可以在网络上安全连接和安全地交互。FIDO 设备加入(FDO)是一种协议,可在制造阶段执行设备初始化,并将设备绑定用于实际用途。这意味着,首先将设备绑定到管理系统的实际绑定会在设备第一次引导时进行。

通过使用 FDO 过程,您可以对自动安全设备提供支持,即零触点安装和加入。设备加入后,您可以连接到该设备并应用补丁、更新、回滚等。FDO 身份验证是自动加入由安装新设备触发的过程。

要构建 RHEL for Edge 简化的安装程序镜像并自动加入它,请提供现有的 OSTree 提交。生成的简化镜像包含部署了 OSTree 提交的原始镜像。在引导 Simplified Installer ISO 镜像后,它会置备一个 RHEL for Edge 系统,您可以在一个硬盘中使用或者作为虚拟机的引导镜像。RHEL for Edge Simplified Installer 镜像针对以无人值守的方式在设备中安装进行了优化,并支持基于网络的部署和非基于网络的部署。但是,对于基于网络的部署,它只支持 UEFI HTTP 引导。

下图代表 FIDO 设备加入工作流:

图 7.1. 在非网络环境中部署 RHEL for Edge

FDO 设备加入
  1. 设备读取设备凭证
  2. 设备连接到网络
  3. 在早期,Owner 管理系统会通知制造商 renzvous 服务器有关 Owner 管理系统的位置
  4. 连接到网络后,设备会联系 Rendezvous Server
  5. Rendezvous 服务器向设备发送所有者 URL
  6. 设备连接到 Owner 管理系统,通过使用设备键签名语句来证明它是正确的设备
  7. Owner 管理系统使用所有者 voucher 的最后密钥签名语句来证明自己
  8. Owner 管理系统提供该设备的配置,例如在 ssh 密钥中设备存储
  9. 设备接收并验证所有权 voucher
  10. 然后,设备检索其设备凭证
  11. 之后,Owner 管理系统将设备报告为加入

    整个 FDO 进程已完成,不再在此设备中使用。

7.2. 自动置备和注册 RHEL for Edge 设备

自动置备和加入 RHEL for Edge 设备涉及以下高级别步骤:

  1. 安装并注册 RHEL 系统
  2. 安装镜像构建器
  3. 使用镜像构建器,为 RHEL for Edge 容器镜像创建自定义蓝图
  4. 在镜像构建器中导入 RHEL for Edge 蓝图
  5. 创建嵌入在 OCI 容器中的 RHEL for Edge 镜像,其中包含 webserver 可将提交部署为 OSTree 存储库
  6. 使用存储设备路径的自定义和 FDO 自定义为边缘简化安装程序创建一个蓝图
  7. 构建简化的安装程序 RHEL for Edge 镜像
  8. 下载 RHEL for Edge 简化的安装程序镜像
  9. 使用 virt-install 将简化的安装程序 ISO 镜像安装到设备或虚拟机。FIDO FDO 客户端在简化的安装程序 ISO 上运行,UEFI 目录结构使镜像启动。
  10. 网络配置可让设备连接到 manufacturing 服务器,以执行初始设备凭据交换。
  11. 系统到达端点后,会为该设备创建设备凭据。
  12. 板上的服务器使用设备凭证对服务器进行身份验证。加入服务器将配置传递给设备/系统:在系统连接到系统后,它会连接到其板载服务器,接收配置。
  13. 加入服务器使用 SSH 密钥提供设备并安装系统。
  14. 然后,它会重启系统并使用存储在 TPM 中的强大密钥对其进行加密。
  15. 您可以使用您创建的蓝图中的凭证登录到系统,并检查在简化的安装程序 ISO 镜像中创建的配置。

7.3. 生成密钥和证书

要运行 FDO 基础架构,您需要生成密钥和证书。这些密钥和证书用于配置 manufacturing 服务器。

重要

红帽提供了 fdo-admin-tool generate-key-and-cert 工具作为技术预览功能,并且应在安全网络上运行。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

步骤

  1. 使用密钥和证书生成文件夹。为此,请运行以下命令:

    # fdo-admin-tool generate-key-and-cert
  2. 检查创建的密钥和证书:

    $ tree keys

    您可以看到以下输出:

    –device_ca_cert.pem
    –device_ca_key.der
    –diun_cert.pem
    –diun_key.dre
    – manufacturer_cert.pem
    –manufacturer_key.der
    –owner_cert.pem
    –owner_key.pem

其他资源

  • fdo-admin-tool generate-key-and-cert –help

7.4. 安装 manufacturing 服务器软件包

manufacturing server RPM 软件包提供了凭据,以便安全地加入该设备。在设备安装期间,对 Rendezvous 服务器的 manufacturing 服务器请求,为服务器提供设备凭据身份验证,并将设备凭据安装到安装的系统中。

重要

红帽提供了 fdo-manufacturing-server 工具作为技术预览功能,应在安全网络上运行。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

要安装 manufacturing 服务器 RPM 软件包,请完成以下步骤:

步骤

  1. 运行以下命令:

    # dnf install fdo-manufacturing-server –refresh
  2. 检查已安装的文件:

    $ ls /usr/share/doc/fdo

    您可以看到以下输出:

    Output:
    manufacturing server.yml
    Owner-onboarding-server.yml
    rendezvous-server.yml
  3. 可选:检查每个文件的内容,例如:

    $ cat /usr/share/doc/fdo/manufacturing-server.yml
  4. 配置 manufacturing 服务器。您必须提供以下:

    • manufacturing 服务器 URL
    • rendezvous 服务器的 IP 地址或 DNS 名称
    • 您生成的密钥和证书的路径。请参阅生成密钥和证书部分。
  5. 将 RHEL for Edge 网络简化的镜像安装到您的设备后,请确保制造商服务器在 Podman 容器上运行。manufacturing 服务器负责在新设备上创建和启用设备凭据。

    $ cat /usr/share/doc/fdo/manufacturing-server.yml

7.5. 使用 FDO 身份验证自动加入 RHEL for Edge 设备

要准备好设备以自动加入 RHEL for Edge 设备,请完成以下步骤:

先决条件

  • 您构建并提供 ostree 容器。
  • 设备组装并置备。这个示例使用虚拟机机器,但您可以在真实设备中使用它。
  • 您正在运行 UEFI HTTP 引导服务器。
  • 已安装 fdo-manufacturing-server rpm 软件包。运行:

    # dnf install fdo-manufacturing-server

步骤

  1. 使用 ISO 简化的镜像运行安装。您可以使用 CD-ROM 或 USB 闪存驱动器安装它,例如:

    安装运行 ISO 简化的安装程序镜像,其中 FDO 客户端运行并且 UEFI 目录结构使镜像可以被启动,以刻录 ISO 中的原始镜像。

  2. 通过虚拟机终端验证该设备已到达 manufacturing 服务,以执行初始设备凭证交换并生成所有权 voucher:

    $ ls directory-path/ownership_voucher/

    输出应显示 ownership_voucher ID,以指示添加到该设备中的正确设备凭据。

    onboarding (加入)服务器使用设备凭据对服务器进行身份验证。然后,它会将配置传递给设备。设备从 onboarding 服务器接收配置后,它会接收 SSH 密钥并在设备上安装操作系统。最后,系统会自动重启,使用存储在 TPM 中的强大密钥对其进行加密。

    设备自动重新启动后,设备联系加入服务器,并且 FDO 自动调配用户凭据。

验证

设备自动重启后,您可以使用您为蓝图创建的凭证登录到该设备或虚拟机。

  1. 通过提供您为蓝图创建的用户名和密码登录到该设备。
  2. 可选:验证在原始镜像中创建的配置。

第 8 章 在网络基础环境中部署 RHEL for Edge 镜像

您可以使用 RHEL 安装程序图形用户界面或 Kickstart 文件部署 RHEL for Edge 镜像。部署 RHEL for Edge 镜像的整体流程取决于部署环境是基于网络的还是非基于网络的。

注意

要在裸机上部署镜像,请使用 Kickstart 文件。

基于网络的部署

在基于网络的环境中部署 RHEL for Edge 镜像涉及以下高级别步骤:

  1. 提取镜像文件内容。
  2. 设置 Web 服务器
  3. 安装镜像

8.1. 提取 RHEL for Edge 镜像提交

下载提交后,提取 .tar 文件并记下 ref 名称和提交 ID。

下载的提交文件包含一个带有 OSTree 存储库的 .tar 文件。OSTree 存储库包含提交和 compose.json 文件。

compose.json 文件包含与提交相关的信息元数据,它们包含 "Ref"(引用 ID)和提交 ID 等信息。提交中包含 rpm 软件包。

要提取软件包内容,请执行以下步骤:

先决条件

  • 创建 kickstart 文件或使用现有文件.

步骤

  1. 提取下载的镜像 tar 文件:

    # tar xvf <UUID>-commit.tar
  2. 前往您提取 .tar 文件的目录。

    它包含一个 compose.json 文件和 OSTree 目录。compose.json 文件包含提交号,OSTree 目录包含 rpm 软件包。

  3. 打开 compose.json 文件,再记下提交 ID 号。当您继续设置 Web 服务器时,您需要这个数字。

    如果安装了 jq JSON 处理器,也可以使用 jq 工具检索提交散列 ID:

    # jq '.["ostree-commit"]' < compose.json
  4. 列出提交中的 rpm 软件包。

    # rpm-ostree db list rhel/9/x86_64/edge --repo=repo
  5. 使用 Kickstart 文件运行 RHEL 安装程序。您可以使用任何现有文件,也可以使用 Kickstart Generator 工具创建一个文件。

    在 Kickstart 文件中,确保包含有关如何置备文件系统、创建用户以及如何获取和部署 RHEL for Edge 镜像的详细信息。RHEL 安装程序在安装过程中使用此信息。

    以下是 Kickstart 文件示例:

    lang en_US.UTF-8
    keyboard us
    timezone Etc/UTC --isUtc
    text
    zerombr
    clearpart --all --initlabel
    autopart
    reboot
    user --name=core --group=wheel
    sshkey --username=core "ssh-rsa AAAA3Nza…​."
    
    ostreesetup --nogpg --osname=rhel --remote=edge --url=https://mirror.example.com/repo/ --ref=rhel/9/x86_64/edge

    ostreesetup 命令用于设置基于 OStree 的安装。它使用以下标记获取 OSTree 提交:

    • --nogpg - 禁用 GPG 密钥验证。
    • --osname - 用于操作系统安装的管理根用户.
    • --remote - 用于操作系统安装的管理根
    • --URL - 要从中安装的存储库的 URL。
    • --ref - 用于安装的程序库的分支名称。
    • --url=https://mirror.example.com/repo/ 是您提取边缘提交并通过 nginx 提供的主机系统的地址。您可以使用地址从客户机机器访问主机系统。

      例如:如果您将提交镜像提取到 /var/www/html 目录中,并通过主机名为 www.example.com 的机器中的 nginx 提供提交,则 --url 参数的值是 http://www.example.com/repo。

      注意

      使用 http 协议启动一个服务来提供提交,因为 Apache HTTP 服务器上没有启用 https。

8.2. 设置 web 服务器以安装 RHEL for Edge 镜像

提取 RHEL for Edge 镜像内容后,设置 web 服务器以通过 HTTP 向 RHEL 安装程序提供镜像提交详情。

以下示例提供了使用容器设置 Web 服务器的步骤:

先决条件

步骤

  1. 使用以下步骤创建 nginx 配置文件:

    events {
    
    }
    
    http {
        server{
            listen 8080;
            root /usr/share/nginx/html;
                    }
             }
    
    pid /run/nginx.pid;
    daemon off;
  2. nginx 配置文件复制到 /etc/nginx.conf 目录。
  3. 按照以下说明创建一个 dockerfile:

    FROM registry.access.redhat.com/ubi8/ubi
    RUN dnf -y install nginx && dnf clean all
    COPY kickstart.ks /var/www/html/
    COPY repo /usr/share/nginx/html/
    EXPOSE 8080
    CMD ["/usr/sbin/nginx", "-c", "/etc/nginx.conf"]
    ARG commit
    ADD ${commit} /usr/share/nginx/html/

    其中,

    • Kickstart.ks 是 RHEL for Edge 镜像中的 Kickstart 文件的名称。kickstart 文件包含指令信息。为帮助您稍后管理镜像,建议包含 Greenboot 检查的检查和设置。要做到这一点,您可以更新 Kickstart 文件使其包含以下设置:

      lang en_US.UTF-8
      keyboard us
      timezone Etc/UTC --isUtc
      text
      zerombr
      clearpart --all --initlabel
      autopart
      reboot
      user --name=core --group=wheel
      sshkey --username=core "ssh-rsa AAAA3Nza…​."
      
      ostreesetup --nogpg --osname=rhel --remote=edge
      --url=https://mirror.example.com/repo/
      --ref=rhel/9/x86_64/edge
      
      %post
      cat << EOF > /etc/greenboot/check/required.d/check-dns.sh
      #!/bin/bash
      
      DNS_SERVER=$(grep nameserver /etc/resolv.conf | cut -f2 -d" ")
      COUNT=0
      
      # check DNS server is available
      ping -c1 $DNS_SERVER
      while [ $? != '0' ] && [ $COUNT -lt 10 ]; do
      
      							
      							
      							
      							COUNT++
      echo "Checking for DNS: Attempt $COUNT ."
      sleep 10
      ping -c 1 $DNS_SERVER
      done
      EOF
      %end

      OSTree 存储库可以从任何 HTTP 服务托管,并且示例使用容器只是如何执行此操作的一个选项。docker 文件执行以下任务:

      1. 使用最新的通用基础镜像 (ubi)
      2. 安装 Web 服务器(nginx)
      3. 将 kickstart 文件添加到服务器
      4. 将 RHEL for Edge 镜像提交添加到服务器
  4. 构建 docker 容器

    #  podman build -t name-of-container-image --build-arg commit=uuid-commit.tar .
  5. 运行容器

    #  podman run --rm -d -p port:8080 localhost/name-of-container-image

    服务器已设置并准备好使用 commit.tar 存储库和 kickstart 文件启动 RHEL 安装程序。

8.3. 下载 RHEL Boot.iso 镜像

您可以从红帽客户门户网站下载 Red Hat Boot ISO 镜像。Red Hat Boot ISO 镜像用于启动 RHEL 安装程序。安装程序会获取您提供的用于安装 RHEL for Edge 镜像的 Kickstart 文件。

先决条件

步骤

  1. 打开浏览器并访问 https://access.redhat.com/downloads
  2. 在 Infrastructure Management 下,点 Red Hat Enterprise Linux 9 产品。
  3. 单击"Red Hat Enterprise Linux 9 Boot ISO"选项的 下载 按钮。

8.4. 使用 Kickstart 文件安装 RHEL for Edge 镜像

要使用 Kickstart 文件安装 RHEL for Edge 镜像,请使用 web 服务器。Web 服务器使用 RHEL for Edge 镜像 commit.tar 存储库和 kickstart 文件来启动 RHEL 安装程序。

先决条件

  • 在安装程序中获取提交的服务器可用并在运行。
  • 安装您创建的提交的磁盘镜像。

步骤

  1. 使用 libvirt virt-install 运行 Anaconda 安装程序:

    virt-install \
    --name rhel-edge-test-1
    --memory 2048 \
    --vcpus 2 \
    --disk size=8 \
    --disk path=prepared_disk_image.qcow2,format=qcow2 \
    --os-variant rhel9
    --cdrom /home/username/Downloads/rhel-9-x86_64-boot.iso
  2. 在安装屏幕上,按 TAB 指定附加内核参数:

    inst.ks=http://edge_device_ip:port/kickstart.ks

    内核参数指定您要使用 Kickstart 文件安装 RHEL,而不是 RHEL 安装程序中包含的 RHEL 镜像。

    RHEL 安装程序启动、从服务器 (HTTP) 端点获取 Kickstart 文件并执行命令,包括从 HTTP 端点安装 RHEL for Edge 镜像提交的 命令。安装完成后,安装程序会提示输入登录详细信息。

  3. 在登录界面中,指定您的用户帐户凭证并点 Enter
  4. 验证 RHEL for Edge 镜像是否已成功安装。

    $ rpm-ostree status

    命令输出提供镜像提交 ID,并显示安装成功。

    以下是输出示例:

    State: idle
    Deployments:
    * ostree://edge:rhel/9/x86_64/edge
    		  Timestamp: 2020-09-18T20:06:54Z
    			Commit: 836e637095554e0b634a0a48ea05c75280519dd6576a392635e6fa7d4d5e96

第 9 章 在非基于网络的环境中部署 RHEL for Edge 镜像

在非网络环境中部署 RHEL for Edge 镜像涉及以下高级别步骤:

  1. 下载 RHEL for Edge 容器。有关如何 下载 RHEL for Edge 镜像 的信息,请参阅下载 RHEL for Edge 镜像。
  2. 将 RHEL for Edge 容器镜像加载到 Podman 中
  3. 在 Podman 中运行 RHEL for Edge 容器镜像
  4. 加载安装程序蓝图
  5. 构建 RHEL for Edge 安装程序镜像
  6. 准备 qcow 磁盘
  7. 引导虚拟机 (VM)
  8. 安装镜像

9.1. 为非网络部署创建 RHEL for Edge 容器镜像

您可以通过将下载的 RHEL for Edge Container OSTree 提交加载到 Podman 来构建正在运行的容器。为此,请按照以下步骤执行:

先决条件

步骤

  1. 进入您下载了 RHEL for Edge Container OSTree 提交的目录。
  2. 将 RHEL for Edge 容器 OSTree 提交加载到 Podman 中。

    $ sudo podman load -i UUID-container.tar

    命令输出提供镜像 ID,例如:@8e0d51f061ff1a51d157804362bc875b649b27f2ae1e66566a15e7e6530cec63

  3. 使用上一步中生成的镜像 ID,标记新的 RHEL for Edge 容器镜像。

    $ sudo podman tag image-ID localhost/edge-container

    podman tag 命令为本地镜像分配额外名称。

  4. 运行名为 edge-container 的容器。

    $ sudo podman run -d --name=edge-container -p 8080:8080 localhost/edge-container

    podman run -d --name=edge-container 命令根据 localhost/edge-container 镜像为容器分配一个名称。

  5. 列出容器:

    $ sudo podman ps -a
    CONTAINER ID  IMAGE                               	COMMAND	CREATED    	STATUS                	PORTS   NAMES
    2988198c4c4b  …./localhost/edge-container   /bin/bash  3 seconds ago  Up 2 seconds ago      	edge-container

因此,Podman 运行一个容器,它会使用一个带有 RHEL for Edge 容器提交的 OSTree 存储库。

9.2. 为非网络部署创建 RHEL for Edge 安装程序镜像

构建运行中的容器以通过 RHEL for Edge 容器提交提供存储库后,创建 RHEL for Edge Installer (.iso) 镜像。安装程序(.iso)拉取 RHEL for Edge Container(.tar)提供的提交。在 Podman 载入 RHEL for Edge 容器后,它会以 URL 格式公开 OSTree。

要在 web 控制台中创建 RHEL for Edge Installer 镜像,请按照以下步骤执行:

先决条件

步骤

  1. 在 Image Builder 仪表板中,对于您为 RHEL for Edge 镜像创建的 RHEL for Edge 安装程序蓝图,点 Create Image
  2. Create Image 窗口中,执行以下步骤:

    1. Repository 文本框中,指定嵌入在镜像的 RHEL for Edge 容器 OSTree URL。例如:http://localhost:8080/repo
    2. Ref 文本框中,指定您在创建 RHEL for Edge 容器提交时提供的相同参考,以嵌入到镜像中。例如,rhel/edge/test
    3. Create

      镜像构建器拉取在镜像构建期间由运行中的容器提供的提交。

      镜像构建完成后,您可以下载生成的(.iso)镜像。

  3. 下载镜像。请参阅下载 RHEL for Edge 镜像

9.3. 为非网络部署安装 RHEL for Edge 镜像

要安装 RHEL for Edge 镜像,请按照以下步骤执行:

先决条件

  • 您创建了 RHEL for Edge ISO 镜像。
  • 已停止运行的容器。
  • 安装您创建的提交的磁盘镜像。

步骤

  1. 创建一个空的 qcow 镜像,以安装 (.iso)。这是虚拟机 (VM) 的硬盘驱动器镜像。例如:

    $  qemu-img create -f qcow2 diskfile.qcow2 5G
  2. 使用磁盘作为驱动器引导虚拟机,并将安装程序 ISO 用作 CD-ROM。例如:

    $  qemu-system-x86_64 \
              -enable-kvm \
              -m 4G \
              -cpu host \
              -net nic,model=virtio \
              -net user,hostfwd=tcp::2223-:22 \
              -cdrom $HOME/Downloads/RHEL-Installer-x86_64-33-1.2.iso \
              disk-image.img

    此命令指示 qemu(虚拟机监控程序)进行:

    • 使用 KVM 虚拟化.
    • 将内存增加到 4000MB(某些进程消耗大量内存,如 dnf)。
    • 使用与主机使用的相同 CPU 类型。
    • 将虚拟客户机连接到主机上的虚拟网络网桥,并将主机的 TCP 端口 2223 转发到虚拟客户机上的 SSH 端口 (22)。
    • 挂载安装 ISO。
    • 使用上面创建的硬盘驱动器镜像。

      它为您提供 Anaconda 安装程序。RHEL 安装程序启动,从 ISO 中加载 Kickstart 文件并执行命令,包括安装 RHEL for Edge 镜像提交的命令。安装完成后,安装程序会提示输入登录详细信息。

      注意

      Anaconda 已预先配置为在安装过程中使用容器提交。

  3. 在登录界面中,指定您的用户帐户凭证并点 Enter

验证步骤

  1. 验证 RHEL for Edge 镜像是否已成功安装。

    $  rpm-ostree status

因此,命令输出提供镜像提交 ID,并显示安装成功。

第 10 章 管理 RHEL for Edge 镜像

要管理 RHEL for Edge 镜像,您可以执行以下任何管理任务:

  • 在 RHEL web 控制台中使用 Image Builder 编辑 RHEL for Edge 镜像蓝图
  • 使用 Image Builder 命令行编辑 RHEL for Edge 镜像蓝图
  • 更新 RHEL for Edge 镜像
  • 在节点上配置 rpm-ostree 远程,以更新节点策略
  • 手动恢复 RHEL for Edge 镜像,或使用 Greenboot 自动恢复镜像

10.1. 在 RHEL web 控制台中使用 Image Builder 编辑 RHEL for Edge 镜像蓝图

您可以将 RHEL for Edge 镜像蓝图编辑为:

  • 添加您可能需要的其他组件
  • 修改任何现有组件的版本
  • 删除任何现有组件

10.1.1. 在 RHEL web 控制台中使用 Image Builder 在 RHEL for Edge 镜像蓝图中添加组件

要在 RHEL for Edge 镜像蓝图中添加组件,请确保您满足以下先决条件,然后按照步骤编辑对应的蓝图。

先决条件

  • 在 RHEL 系统中,您已访问 Image Builder 仪表板。
  • 您已为 RHEL for Edge 镜像创建了蓝图。

步骤

  1. 在 Image Builder 仪表板中,点击您要编辑的 RHEL for Edge 镜像蓝图。

    要搜索特定蓝图,请在 Filter By Name 文本框中输入蓝图名称,然后按 Enter 键。

  2. 在蓝图的右上角点 Edit Packages

    视图更改为 Edit Packages 模式。

  3. 在 Filter By Name 文本框中输入您要添加的组件名称,然后按 Enter 键。

    此时会显示组件名称的列表。

  4. 单击组件旁边的 + 符号。

    组件添加到蓝图中。

  5. Commit

    蓝图更新会被保存,并会显示一条消息待处理提交。

  6. 在摘要对话框上,检查更改,然后单击 Commit

    这时将显示确认成功提交的消息。

    因此,会创建一个新版本的蓝图,右侧窗格会列出最新的组件。

10.1.2. 使用 RHEL web 控制台更改 RHEL for Edge 镜像蓝图中现有组件的版本

您已选择默认 (最新) 版本,或为您包含在蓝图中的组件选择一个版本。如果需要,现在可以更改您可能想要的任何组件的版本。

为此,请确保您满足以下先决条件,然后按照以下步骤更改相应蓝图中的组件版本。

先决条件

  • 在 RHEL 系统中,您已访问 Image Builder 仪表板。
  • 您已为 RHEL for Edge 镜像创建了蓝图。
  • 您已在 RHEL for Edge 蓝图中添加至少一个组件。

步骤

  1. 在 Image Builder 仪表板中,点击您要编辑的蓝图。

    要搜索特定蓝图,请在 Filter By Name 文本框中输入蓝图名称,然后按 Enter 键。

  2. 在蓝图的右上角点 Edit Packages

    视图中对 Edit Packages 模式的更改,右侧面板中列出了当前提交到蓝图的组件名称。

  3. 点组件名称。
  4. 从组件选项版本下拉列表中选择所需的版本。
  5. Apply Changes

    保存更改,右侧窗格列出最新的更改。

  6. Commit

    新版本保存在蓝图中。将显示含有待提交的消息。

  7. 在摘要对话框上,检查更改,然后单击 Commit

    这时将显示确认成功提交的消息。

    因此会创建一个新版本的蓝图,右侧窗格会列出最新的组件。

10.1.3. 在 RHEL web 控制台中使用 Image Builder 从 RHEL for Edge 镜像蓝图中删除组件

要从您创建的 RHEL for Edge 镜像蓝图中删除一个或多个不需要的组件,请确保您满足以下先决条件,然后按照以下步骤操作。

先决条件

  • 在 RHEL 系统中,您已访问 Image Builder 仪表板。
  • 您已为 RHEL for Edge 镜像创建了蓝图。
  • 您已在 RHEL for Edge 蓝图中添加至少一个组件。

步骤

  1. 在 Image Builder 仪表板中,点击您要编辑的蓝图。

    要搜索特定蓝图,请在 Filter By Name 文本框中输入蓝图名称,然后按 Enter 键。

  2. 在蓝图的右上角点 Edit Packages

    视图更改为 Edit Packages 模式。右侧面板列出了当前提交至蓝图的组件名称。

  3. 在 More Options 菜单中点 Remove

    (可选)点组件名称,然后点 Remove

  4. Commit

    将显示含有待提交的消息。

  5. 检查您的更改,然后单击 Commit

    这时将显示确认成功提交的消息。

    因此,会创建一个新版本的蓝图,右侧窗格会列出最新的组件。

10.1.4. 使用命令行界面编辑 RHEL for Edge 镜像蓝图

您可以使用 Image Builder 命令行更改 RHEL for Edge 镜像蓝图的规格。为此,请确保您满足以下先决条件,然后按照步骤编辑对应的蓝图。

先决条件

  • 您可以访问 Image Builder 命令行。
  • 您已创建了 RHEL for Edge 镜像蓝图。

步骤

  1. 将蓝图保存(导出)到本地文本文件:

    # composer-cli blueprints save BLUEPRINT-NAME
  2. 使用您选择的文本编辑器编辑 BLUEPRINT-NAME.toml 文件并进行更改。

    在完成编辑前,请确保该文件是一个有效的蓝图:

  3. 增加版本号。

    确保您使用 Semantic Versioning 方案。

    注意

    如果您不更改版本,则会自动增加版本的补丁组件。

  4. 检查内容是否是有效的 TOML 规格。如需更多信息,请参阅 TOML 文档。

    注意

    TOML 文档是一款社区产品,不受红帽支持。您可以在 https://github.com/toml-lang/toml/issues 中报告任何问题。

  5. 保存文件并关闭编辑器。
  6. 将蓝图推送(导入)回镜像构建器命令行中:

    # composer-cli blueprints push BLUEPRINT-NAME.toml
    注意

    当将蓝图推送回镜像构建器命令行时,请提供包括 .toml 扩展名的文件名。

  7. 验证上传到 Image Builder 的内容是否与您的编辑匹配:

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

    # composer-cli blueprints depsolve BLUEPRINT-NAME

10.2. 更新 RHEL for Edge 镜像

10.2.1. RHEL for Edge 镜像如何更新

使用 RHEL for Edge 镜像,您可以手动部署更新,也可以自动部署部署过程。更新以原子方式应用,其中知道每个更新的状态,更新仅在重启时暂存和应用。由于在重新引导设备之前不会看到任何更改,因此您可以调度重新引导以确保尽可能最高的正常运行时间。

在镜像更新期间,因为仅通过网络传输更新的操作系统内容,与传输整个映像相比,部署过程更高效。OS 二进制文件和库(/usr)是只读的,读写状态在 /var/etc 目录中维护。

通过 delta 传输,即使在不稳定或低带宽连接的情况下,也可以使用本地介质将更新部署到断开连接的设备。另外,您也可以创建 static-deltas 来进一步减少网络使用量。static-deltas 将所有单独的更新提取到单个文件存档中,并显著降低通过单个 TCP 连接传输操作系统更新时的 TCP 网络开销,而不是通过多个连接单独传输每个更新。

下图演示了 RHEL for Edge 镜像更新部署过程:

镜像部署

10.2.2. 手动部署 RHEL for Edge 镜像更新

编辑 RHEL for Edge 蓝图后,您可以更新镜像提交。镜像构建器为更新的 RHEL for Edge 镜像生成新的提交。使用此新提交来部署具有最新软件包版本或附加软件包的镜像。

要部署 RHEL for Edge 镜像更新,请确保您满足先决条件,然后按照以下步骤操作。

先决条件

步骤

  1. 在 Image Builder 仪表板中,针对您编辑的蓝图,点 Create Image
  2. 在 Create Image 窗口中,执行以下步骤:

    1. 类型 下拉列表中,选择 "RHEL for Edge Commit (.tar)"。
    2. 父提交文本框中,指定之前生成的父提交 ID。请参阅提取 RHEL for Edge 镜像提交
    3. 在 Ref 文本框中,您可以指定提交的名称或将其留空。默认情况下,web 控制台将 Ref 指定为 rhel/9/arch_name/edge
    4. Create。镜像构建器为更新的蓝图创建一个 RHEL for Edge 镜像。

      要查看 RHEL for Edge 镜像创建进度,点 breadcrumbs 中的蓝图名称,然后单击 Images 选项卡。

      注意

      完成镜像创建过程需要几分钟时间。

      生成的镜像包含您添加的最新软件包(若有),并且具有原始 提交 ID 作为父项。

  3. 下载生成的 RHEL for Edge 镜像。有关下载 RHEL for Edge 镜像的更多信息,请参阅下载 RHEL for Edge 镜像
  4. 提取 OSTree 提交。有关提取 OSTree 提交的更多信息,请参阅 提取 RHEL for Edge 镜像提交
  5. 构建 docker 容器,这一次提供子提交 ID。

    # podman build -t name-of-server --build-arg commit=uuid-child_commit.tar .
  6. 运行容器。

    # podman run --rm -p 8000:80 name-of-server
  7. 在置备的 RHEL 系统上,从原始边缘镜像验证当前状态。

    $ rpm-ostree status

    如果没有新的提交 ID,请运行以下命令验证是否有可用的升级:

    $ rpm-ostree upgrade --check

    命令输出提供当前活动的 OSTree 提交 ID。

  8. 更新 OSTree,使新 OSTree 提交 ID 可用。

    $ rpm-ostree upgrade

    ostree 验证存储库是否有更新。如果是,它将获取您重新引导系统的更新和请求,以便您可以激活此新提交更新的部署。

  9. 再次检查当前状态:

    $ rpm-ostree status

    现在,您可以看到有 2 个提交可用:

    • 活跃的父级提交。
    • 一个未激活且包含 1 个添加的差异的新提交。
  10. 要激活新部署并使新提交处于活动状态,请重启您的系统。

    # systemctl reboot

    Anaconda 安装程序将重新引导至新部署。在登录屏幕上,您可以看到可供您引导的新部署。

  11. 如果要引导进入最新的提交/部署,rpm-ostree upgrade 命令会自动订购引导条目,以便新部署在列表中第一个。(可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按 Enter
  12. 提供您的登录用户帐户凭证。
  13. 验证 OSTree 状态:

    $ rpm-ostree status

    命令输出提供活动的提交 ID。

  14. 要查看更改的软件包(如果有),请在父提交和新提交之间运行差异:

    $ rpm-ostree db diff parent_commit new_commit

    更新显示您已安装的软件包可用并可供使用。

10.2.3. 使用命令行手动部署 RHEL for Edge 镜像更新

编辑 RHEL for Edge 蓝图后,您可以更新镜像提交。镜像构建器为更新的 RHEL for Edge 镜像生成新的提交。使用新的提交,通过 CLI 使用最新的软件包版本或使用其他软件包来部署镜像。

要使用 CLI 部署 RHEL for Edge 镜像更新,请确保您满足先决条件,然后按照以下步骤执行。

先决条件

步骤

  1. 使用以下参数创建 RHEL for Edge Commit(.tar)镜像:

    # composer-cli compose start-ostree --ref ostree_ref --parent parent_commitID_edge -blueprint_name_ image-type

    其中

    • ref 是您在为 Edge Container 提交创建 RHEL 时提供的引用。例如: rhel/9/x86_64/edge
    • parent_commitID_edge 是之前生成的父提交 ID。
    • image-typeedge-commit

      镜像构建器为更新的蓝图创建一个 RHEL for Edge 镜像。

  2. 检查 RHEL 中的 Edge 镜像创建进度:

    # composer-cli compose status
    注意

    镜像创建过程可能需要长达十到 30 分钟才能完成。

    生成的镜像包含您添加的最新软件包(若有),并且具有原始 提交 ID 作为父项。

  3. 下载生成的 RHEL for Edge 镜像。如需更多信息,请参阅使用 Image Builder 命令行界面下载 RHEL for Edge 镜像
  4. 提取 OSTree 提交。如需更多信息,请参阅 为 Edge 镜像提交提取 RHEL
  5. 通过 httpd 提供 OSTree 提交。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像
  6. 在从原始边缘镜像置备的 RHEL 系统中,验证当前状态:

    $ rpm-ostree status

    如果没有新的提交 ID,请运行以下命令验证是否有可用的升级:

    $ rpm-ostree upgrade --check

    命令输出提供当前活动的 OSTree 提交 ID。

  7. 更新 OSTree 以使新的 OSTree 提交 ID 可用:

    $ rpm-ostree upgrade

    ostree 验证存储库是否有更新。如果是,它将获取您重新引导系统的更新和请求,以便您可以激活此新提交更新的部署。

  8. 再次检查当前状态:

    $ rpm-ostree status

    现在,您应看到有 2 个可用的提交:

    • 活跃的父级提交
    • 一个未激活且包含 1 个添加的差异的新提交。
  9. 要激活新部署并使新提交处于活动状态,请重启您的系统。

    # systemctl reboot

    Anaconda 安装程序将重新引导至新部署。在登录屏幕上,您可以看到可供您引导的新部署。

  10. 如果要引导进入最新的部署,rpm-ostree upgrade 命令会自动订购引导条目,以便新部署在列表中第一个。(可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按 Enter
  11. 使用您的帐户凭据登录。
  12. 验证 OSTree 状态:

    $ rpm-ostree status

    命令输出提供活动的提交 ID。

  13. 要查看更改的软件包(如果有),请在父提交和新提交之间运行差异:

    $ rpm-ostree db diff parent_commit new_commit

    更新显示您已安装的软件包可用并可供使用。

10.2.4. 为非网络部署手动部署 RHEL for Edge 镜像更新

编辑 RHEL for Edge 蓝图后,您可以更新镜像提交。镜像构建器为更新的 RHEL for Edge 镜像生成新的提交。使用此新提交来部署具有最新软件包版本或附加软件包的镜像。

要部署 RHEL for Edge 镜像更新,请确保您满足先决条件,然后按照以下步骤操作。

先决条件

步骤

  1. 在 Image Builder 仪表板中,针对您编辑的蓝图,点 Create Image
  2. Create Image 窗口中,执行以下步骤:

    1. 类型 下拉列表中,选择 RHEL for Edge Container (.tar)
    2. 父提交 文本框中,指定之前生成的父提交 ID。请参阅提取 RHEL for Edge 镜像提交
    3. Repository 文本框中,指定要嵌入到镜像中的提交 OSTree 存储库的 URL。例如:http://10.0.2.2:8080/repository/
    4. Ref 文本框中,指定您在创建 RHEL for Edge 容器提交时提供的相同参考,以嵌入到镜像中。例如,'rhel/edge/test'。
    5. Create。镜像构建器为更新的蓝图创建一个 RHEL for Edge 镜像。

      要查看 RHEL for Edge 镜像的进度,请点击 breadcrumbs 中的蓝图名称,然后单击 Images 选项卡。

      注意

      完成镜像创建过程需要几分钟时间。

      生成的镜像包含您添加的最新软件包(若有),并且具有原始 提交 ID 作为父项。

  3. 下载生成的 RHEL for Edge 镜像。有关下载 RHEL for Edge 镜像的更多信息,请参阅下载 RHEL for Edge 镜像
  4. 将 RHEL for Edge 容器镜像加载到 Podman 中,这一次提供子提交 ID。

    $ cat ./child-commit_ID-container.tar | sudo podman load
  5. 运行 Podman

    #  sudo podman run -p 8080:8080 localhost/edge-test
  6. 在置备的 RHEL 系统上,从原始边缘镜像验证当前状态。

    $ rpm-ostree status

    如果没有新的提交 ID,请运行以下命令验证是否有可用的升级:

    $ rpm-ostree upgrade --check

    如果有可用的更新,命令输出提供关于 OSTree 存储库中可用更新的信息,如当前活动的 OSTree 提交 ID。否则,它会提示一条信息通知没有可用的更新。

  7. 更新 OSTree,使新 OSTree 提交 ID 可用。

    $ rpm-ostree upgrade

    ostree 验证存储库是否有更新。如果是,它将获取您重新引导系统的更新和请求,以便您可以激活此新提交更新的部署。

  8. 检查当前状态:

    $ rpm-ostree status

    现在,您可以看到有 2 个提交可用:

    • 活跃的父级提交。
    • 一个未激活且包含 1 个添加的差异的新提交。
  9. 要激活新部署并使新提交处于活动状态,请重启您的系统。

    # systemctl reboot

    Anaconda 安装程序将重新引导至新部署。在登录屏幕上,您可以看到可供您引导的新部署。

  10. 如果要引导进入最新的提交/部署,rpm-ostree upgrade 命令会自动订购引导条目,以便新部署在列表中第一个。(可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按 Enter
  11. 提供您的登录用户帐户凭证。
  12. 验证 OSTree 状态:

    $ rpm-ostree status

    命令输出提供活动的提交 ID。

  13. 要查看更改的软件包(如果有),请在父提交和新提交之间运行差异:

    $ rpm-ostree db diff parent_commit new_commit

    更新显示您已安装的软件包可用并可供使用。

10.3. 升级 RHEL for Edge 系统

10.3.1. 将 RHEL 8 系统升级到 RHEL 9

您可以使用 rpm-ostree rebase 命令将 RHEL 8 系统升级到 RHEL 9。它完全支持在 RHEL 8 的最新更新到 RHEL 9 最新更新之间的默认软件包集合。RHEL 9 镜像已下载并在后台安装。升级完成后,您必须重启系统才能使用新的 RHEL 9 镜像。

注意

升级不支持每个可能的 rpm 软件包版本并包括。您必须测试您的软件包,以确保它正常工作。

先决条件

  • 您有一个 RHEL for Edge 系统
  • 为 RHEL for Edge Commit 镜像创建了一个蓝图
  • 已安装 httpd 来托管 OSTree 仓库。
  • 您有一个运行 Podman 容器的 RHEL 9 OSTree 仓库
  • 调整 /etc/ostree/remotes.d/*.repo 以指向 RHEL 9 OSTree 仓库

步骤

  1. 创建 RHEL for Edge 9 镜像:

    1. 启动镜像 compose:

      $ sudo composer-cli compose start blueprint-name edge-commit
    2. 完成 compose 后,下载镜像。
    3. 将下载的镜像提取到 /var/www/html/ 文件夹:

      $ sudo tar -xf image_file -C /var/www/html
    4. 启动 httpd 服务:

      $ systemctl start httpd.service
  2. /etc/ostree/remotes.d/*.repo 调整为指向 httpd 服务器。
  3. 将您的系统升级到 RHEL 版本,为 RHEL 9 版本提供参考路径:

    $ rpm-ostree rebase rhel-edge:rhel/9/x86_64/edge
  4. 重启您的系统。

    $ systemctl reboot
  5. 输入您的用户名和密码。
  6. 检查当前系统状态:

    $ rpm-ostree status

验证

  1. 检查当前运行的部署的当前状态:

    $ rpm-ostree status
  2. 可选:显示内核实时管理的处理器和任务。

    $ top
  3. 如果升级不支持您的要求,您可以选择手动回滚到以前的稳定部署 RHEL 8 版本:

    $ sudo rpm-ostree rollback
  4. 重启您的系统。输入您的用户名和密码:

    $ systemctl reboot

    重启后,您的系统应该可以成功运行 RHEL 9。

10.4. 部署 RHEL for Edge 自动镜像更新

在 Edge 设备中安装 RHEL for Edge 镜像后,您可以检查可用的镜像更新(如果有)并可自动应用。

rpm-ostreed-automatic.service(systemd 服务)和 rpm-ostreed-automatic.timer(systemd 计时器)控制检查和升级的频率。可用的更新(若有)显示为暂存部署。

部署自动镜像更新涉及以下高级别步骤:

  • 更新镜像更新策略
  • 启用自动下载和暂存更新

10.4.1. 更新 RHEL for Edge 镜像更新策略

要更新镜像更新策略,请使用 Edge 设备中的 rpm-ostreed.conf 文件中的 AutomaticUpdatePolicyIdleExitTimeout 设置。

AutomaticUpdatePolicy 设置控制自动更新策略,并具有以下选项:

  • 无:禁用自动更新。默认情况下,AutomaticUpdatePolicy 设置被设置为 none
  • 检查:下载足够的元数据,以显示具有 rpm-ostree 状态的可用更新。
  • stage:下载并解压缩重启时应用的更新。

IdleExitTimeout 设置控制守护进程退出前不活跃的时间,并具有以下选项:

  • 0:禁用自动退出.
  • 60:默认情况下,IdleExitTimeout 设置被设置为 60

要启用自动更新,请执行以下步骤:

步骤

  1. /etc/rpm-ostreed.conf 文件中更新以下内容:

    • AutomaticUpdatePolicy 的值改为 check
    • 要运行更新检查,请为 IdleExitTimeout 指定一个以秒为单位的值。
  2. 重新加载 rpm-ostreed 服务并启用 systemd 定时器。

    # systemctl reload rpm-ostreed
    # systemctl enable rpm-ostreed-automatic.timer --now
  3. 验证 rpm-ostree 状态,以确保配置了自动更新策略并激活时间。

    # rpm-ostree status

    命令输出显示以下内容:

    State: idle; auto updates enabled (check; last run <minutes> ago)

    此外,输出中也显示有关可用更新的信息。

10.4.2. 启用 RHEL for Edge 自动下载和保存更新

在更新了镜像更新策略以检查镜像更新后,如果显示了任何更新详情,则进行更新。如果您决定应用更新,请启用策略来自动下载和暂存更新。然后,下载并暂存可用的镜像更新以进行部署。更新会被应用并在重启 Edge 设备时生效。

要启用自动下载和暂存更新的策略,请执行以下操作:

步骤

  1. /etc/rpm-ostreed.conf 文件中,将 'AutomaticUpdatePolicy' 更新为 stage
  2. 重新载入 rpm-ostreed 服务。

    # systemctl enable rpm-ostreed-automatic.timer --now
  3. 验证 rpm-ostree 状态

    # rpm-ostree status

    命令输出显示以下内容:

    State: idle
    AutomaticUpdates: stage; rpm-ostreed-automatic.timer: last run <time> ago
  4. 要启动更新,您可以等待计时器启动更新,也可以手动启动该服务。

    # systemctl start rpm-ostreed-automatic.service

    启动更新后,rpm-ostree 状态将显示如下:

    # rpm-ostree status
    State: busy
    AutomaticUpdates: stage; rpm-ostreed-automatic.service: running
    Transaction: automatic (stage)

    更新完成后,部署列表中会暂存新的部署,原始引导的部署将保持不变。您可以决定您是否要使用新部署引导系统,或者可以等待下一次更新。

    要查看部署列表,请运行 rpm-ostree status 命令。

    以下是输出示例:

    # rpm-ostree status
    State: idle
    AutomaticUpdates: stage; rpm-ostreed-automatic.timer: last run <time> ago
    Deployments:

    要使用更新的软件包详情查看部署列表,请运行 rpm-ostree status -v 命令。

10.5. RHEL for Edge 镜像的回滚

您可以验证更新的镜像是否已成功部署。如果部署不成功,您可以回滚到以前的版本(提交)。要回滚到以前的功能状态,您可以手动执行这些步骤,也可以使用自动流程。

10.5.1. RHEL for Edge 镜像如何回滚

对于 RHEL for Edge 镜像,仅将事务更新应用到操作系统。通过事务更新,您可以轻松地将失败的更新回滚到最后已知的良好状态,从而防止更新期间系统失败。

您可以在 Greenboot 中使用智能回滚,从而消除在应用程序稳定性和安全更新应用程序之间进行选择的问题。

Greenboot 利用 rpm-ostree,并运行在系统启动时运行的自定义健康检查。如果出现问题,系统将回滚更改并保留最后一个工作状态。

下图演示了 RHEL for Edge 镜像回滚过程。

镜像恢复过程

10.5.2. 手动回滚 RHEL for Edge 镜像

如果 RHEL for Edge 镜像更新部署失败,或者更新无法成功完成,您可以手动回滚到以前的部署版本。

要回滚到以前的版本,请执行以下步骤:

步骤

  1. 运行 rollback 命令:

    # rpm-ostree rollback

    命令输出提供有关正在移动的提交 ID 的详细信息,并指示与正在删除的软件包的详细信息相关的已完成事务。

  2. 重启系统。

    # systemctl reboot

    命令将激活上一个带有稳定内容的提交。应用更改并恢复之前的版本。

10.5.3. 使用自动化流程回滚 RHEL for Edge 镜像

Greenboot 检查提供了一个框架,它集成到引导过程中,并可在健康检查失败时触发 rpm-ostree 回滚。对于健康检查,您可以创建一个自定义脚本来指示健康检查是否通过或失败。根据结果,您可以决定何时触发回滚。

要创建健康检查脚本,请执行以下步骤:

步骤

  1. 创建返回标准退出代码 0 的脚本。

    例如,以下脚本确保配置的 DNS 服务器可用:

    #!/bin/bash
    
    DNS_SERVER=$(grep ^nameserver /etc/resolv.conf | head -n 1 | cut -f2 -d" ")
    COUNT=0
    # check DNS server is available
    ping -c1 $DNS_SERVER
    while [ $? != '0' ] && [ $COUNT -lt 10 ]; do
    ((COUNT++))
    echo "Checking for DNS: Attempt $COUNT ."
    sleep 10
    ping -c 1 $DNS_SERVER
    done
  2. /etc/greenboot/check/required.d/ 中包括健康检查的可执行文件。

    chmod +x check-dns.sh

    在下一次重启期间,将在系统进入 boot-complete.target 之前,作为引导过程的一部分来执行 脚本。如果健康检查成功,则不执行任何操作。如果健康检查失败,系统会在将更新标记为失败并回滚到上一更新之前多次重启。

验证步骤

要检查默认网关是否可访问,请运行以下健康检查脚本:

  1. 创建返回标准退出代码 0 的脚本。

    #!/bin/bash
    
    DEF_GW=$(ip r | awk '/^default/ {print $3}')
    SCRIPT=$(basename $0)
    
    count=10
    connected=0
    ping_timeout=5
    interval=5
    
    while [ $count -gt 0 -a $connected -eq 0 ]; do
      echo "$SCRIPT: Pinging default gateway $DEF_GW"
      ping -c 1 -q -W $ping_timeout $DEF_GW > /dev/null 2>&1 && connected=1 || sleep $interval
      ((--count))
    done
    
    if [ $connected -eq 1 ]; then
      echo "$SCRIPT: Default gateway $DEF_GW is reachable."
      exit 0
    else
      echo "$SCRIPT: Failed to ping default gateway $DEF_GW!" 1>&2
      exit 1
    fi
  2. /etc/greenboot/check/required.d/ 目录中包括健康检查的可执行文件。

    chmod +x check-gw.sh

附录 A. 术语和命令

本节提供了 rpm ostree 术语和命令。

A.1. ostree 和 rpm-ostree 术语

以下是一些在上下文与 OSTree 和 rpm-ostree 镜像有关的术语。

表 A.1. ostree 和 rpm-ostree 术语

术语定义

OSTree

此工具用于管理基于 Linux 的操作系统版本。OSTree 树视图与 Git 类似,它基于相似的概念。

rpm-ostree

托管操作系统更新的混合镜像或系统软件包。

Commit(提交)

操作系统的发行版本或镜像版本。镜像构建器为 RHEL for Edge 镜像生成 ostree 提交。您可以使用这些镜像在 Edge 服务器上安装或更新 RHEL。

Refs

代表 ostree 中的分支。Refs 始终解析为最新的提交。例如: rhel/9/x86_64/edge

修订 (Rev)

特定提交的 SHA-256。

远程

托管 ostree 内容的 http 或 https 端点。这类似于 dnf 存储库的 baseurl。

static-delta

对 ostree 镜像的更新始终是 delta 更新。如果是 RHEL for Edge 镜像,则 TCP 开销可能高于预期值,因为更新了文件的数量。为避免 TCP 开销,您可以在特定提交之间生成 static-delta,并在单个连接中发送更新。这种优化有助于连接受限的大型部署。

A.2. ostree 命令

本节提供一些在安装或管理 ostree 镜像时可以使用的 ostree 命令。

表 A.2. ostree 命令

ostree pull

ostree pull-local --repo [path] src

ostree pull-local <path> <rev> --repo=<repo-path>

ostree pull <URL> <rev> --repo=<repo-path>

ostree 概况

ostree summary -u --repo=<repo-path>

查看 refs

ostree refs --repo ~/Code/src/osbuild-iot/build/repo/ --list

查看 repo 中的提交

ostree log --repo=/home/gicmo/Code/src/osbuild-iot/build/repo/ <REV>

检查一个提交

ostree show --repo build/repo <REV>

列出 repo 的远程

ostree remote list --repo <repo-path>

解析一个 REV

ostree rev-parse --repo ~/Code/src/osbuild-iot/build/repo fedora/x86_64/osbuild-demo

ostree rev-parse --repo ~/Code/src/osbuild-iot/build/repo b3a008eceeddd0cfd

创建 static-delta

ostree static-delta generate --repo=[path] --from=REV --to=REV

使用 GPG 密钥签署一个现有的 ostree 提交

ostree gpg-sign --repo=<repo-path> --gpg-homedir <gpg_home> COMMIT KEY-ID…

A.3. rpm-ostree 命令

本节提供一些 rpm-ostree 命令,您可以在安装或管理 ostree 镜像时使用它们。

表 A.3. rpm-ostree 命令

命令描述

rpm-ostree --repo=/home/gicmo/Code/src/osbuild-iot/build/repo/ db list <REV>

此命令会列出 <REV> 提交到存储库中的现有软件包。

rpm-ostree rollback

ostree 管理一个有序的引导加载器条目列表,称为 deployments。index 0 的条目是默认的启动加载器条目。每个条目都有一个单独的 /etc 目录,但所有条目共享单个 /var 目录。您可以通过按 Tab 键中断启动,使用引导加载器在条目之间进行选择。这会回滚到以前的状态,即默认部署更改在非默认位置。

rpm-ostree status

此命令提供有关当前正在使用的部署的信息。按顺序列出所有可能部署的名称和 refspec,使得列表中的第一个部署是启动时的默认部署。标记为 * 的部署是当前的引导部署,使用 'r' 标记代表最新的升级。

rpm-ostree db list

使用此命令查看提交或提交中的软件包。您必须至少指定一个提交,但多个提交也起作用。

rpm-ostree db diff

使用此命令显示两个 rev(修订)中的树之间的软件包如何不同。如果没有提供 revs,则引导的提交将与待处理提交进行比较。如果只提供单个 rev,则引导的提交将与该 rev 进行比较。

rpm-ostree upgrade

此命令将下载当前树的最新版本并进行部署,将当前树设置为下一次启动的默认树。这不会影响运行的文件系统树。您必须重启才能使任何更改生效。

其他资源

  • rpm-ostree man page。

A.4. FDO 自动加入术语

本节提供有关 FDO 术语的信息。

表 A.4. fdo 术语

命令描述

FDO

FIDO Device Onboarding(FIDO 设备加入)。

设备

任何硬件、设备或计算机。

所有者

设备的最终所有者 - 公司或 IT 部门。

制造商

设备制造商。

制造商服务器

为该设备创建设备凭证。

制造商客户端

告知 manufacturing 服务器的位置。

所有权变量(OV)

单独设备的所有权的记录。包含以下信息:

* Owner (fdo-owner-onboarding-service)

* Rendezvous Server - FIDO server (fdo-rendezvous-server)

* Device (at least one combination) (fdo-manufacturing-service)

设备凭据(DC)

存储在制造商设备的密钥凭证和 rendezvous。

Keys

配置 manufacturing 服务器的密钥

* key_path

* cert_path

* key_type

* mfg_string_type: 设备序列号

* allowed_key_storage_types:文件系统和受信任的平台模块(TPM),用于保护用来验证您使用的设备的数据。

Rendezvous 服务器

指向设备使用的服务器及之后使用的服务器,用于查找该设备的所有者是谁

其他资源

A.5. FDO 自动加入技术

以下是在上下文中用于 FDO 自动加入的技术。

表 A.5. ostree 和 rpm-ostree 术语

技术定义

UEFI

统一可扩展固件接口.

RHEL

Red Hat® Enterprise Linux® operating system (OS)

rpm-ostree

基于镜像的后台升级。

Greenboot

rpm-ostree 中 systemd 的健康检查框架。

osbuild

用于操作系统工件的基于管道的构建系统。

Container

Linux® 容器是由一个或多个与系统其余部分隔离的进程组成的集合。

Coreos-installer

辅助安装 RHEL 镜像,使用 UEFI 引导系统。

FIDO FDO

调配配置和加入设备的规格协议。