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

Red Hat Enterprise Linux 8

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

摘要

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

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。如需了解更多详细信息,请参阅 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 镜像。

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

编写和部署 RHEL for Edge 镜像的整体过程会因您的部署环境是基于网络还是非网络环境而有所不同。

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

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

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

  • RHEL for Edge Commit(.tar)- 适用于基于网络的环境.提交镜像类型不可直接引导,即使它包含完整的操作系统。要引导提交镜像类型,您必须进行部署。
  • RHEL for Edge 容器(.tar)- 适用于非基于网络的部署。镜像类型创建 OSTree 提交,并使用 Web 服务器嵌入到 OCI 容器中。容器启动后,Web 服务器将提交充当 OSTree 存储库。
  • RHEL for Edge 安装程序(.iso)- 适用于非基于网络的部署.镜像类型从正在运行的容器调取提交,并创建一个可安装的引导 ISO,该文件配置为使用嵌入式 OSTree 提交。

镜像类型在内容上有所不同,因此适合不同类型的部署环境。虽然 RHEL for Edge Commit 适合基于网络的环境,但 RHEL for Edge Container 和 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. 下载 RHEL for Edge 镜像容器文件
  7. 使用 RHEL for Edge 提交部署容器服务软件仓库
  8. 使用 Image Builder,为 RHEL for Edge 安装程序镜像创建一个空蓝图
  9. 下载 RHEL boot.iso 镜像
  10. 运行安装
  11. 创建镜像

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

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

RHEL for Edge 非网络部署工作流

基于网络的部署

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

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

您可以通过 composer-cli 工具中的命令行界面访问 Image Builder,或使用 RHEL 8 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. 在网络环境中为 Edge 部署 RHEL

RHEL for Edge 网络部署工作流

其它资源

有关安装和注册 RHEL 系统的详情,请参考 执行标准 RHEL 安装

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

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

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

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

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

主要属性

RHEL RPM 镜像

RHEL for Edge 镜像

OS assemble

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

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

OS 更新

您可以使用 yum update 从已启用的存储库应用可用的更新。

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

软件仓库

软件包包含 Yum 存储库

软件包包含 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)

网络

连接至互联网

2.2. 安装镜像构建器

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

先决条件

  • 虚拟机已创建并开机。
  • 您已安装 RHEL,并且已订阅 RHSM 或 Redhat Satellite。

流程

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

    • osbuild-composer
    • composer-cli
    • cockpit-composer
    • bash-completion
    # yum install osbuild-composer composer-cli cockpit-composer bash-completion

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

  2. 重启虚拟机
  3. 启用镜像构建器.

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

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

  4. 将系统防火墙配置为允许访问 Web 控制台:

    # firewall-cmd --add-service=cockpit && firewall-cmd --add-service=cockpit --permanent
  5. 载入 shell 配置脚本,以便在不重启的情况下立即启动 composer-cli 命令的自动完成功能:

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

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

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

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

本节提供有关使用 RHEL web 控制台访问镜像构建器和为 Edge 镜像创建 RHEL 的信息。要访问镜像构建器并使用 CLI 创建 RHEL for Edge 镜像,请参阅 第 4 章 使用 Image Builder 命令行编写 RHEL for Edge 镜像

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

  1. 在 RHEL web 控制台中访问镜像构建器
  2. 为 RHEL for Edge 镜像创建蓝图
  3. 为 RHEL for Edge 镜像蓝图创建用户帐户
  4. 创建 RHEL for Edge 镜像
  5. 下载 RHEL for Edge 镜像

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

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

先决条件

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

流程

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

3.2. 在 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

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

  4. 在 Available 组件中点您要包含在蓝图中的组件的 +

    要搜索特定组件,请在 Filter By Name 文本框中输入组件名称,然后按 Enter 键组件详情窗格显示组件详情及其依赖组件。您可以选择所需的版本。默认情况下,Web 控制台选择最新版本。

    要从蓝图中删除组件,在 Available 组件窗格中,针对组件名称点击 -

    注意

    创建"RHEL for Edge 安装程序(.tar)"的蓝图必须是空的,即,不会在创建软件包或用户时自定义。

  5. Components Details 窗格中,单击 Add
  6. Commit 保存蓝图。

    此时会出现一个包含蓝图概述的对话框。

  7. Commit
  8. 在¼ breadcrumbs 中点 Back to Blueprints

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

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

Image Builder 中定义的源提供您可以添加到蓝图中的内容。这些源是全局的,因此适用于所有蓝图。系统源是本地设置且无法从 Image Builder 中删除的软件仓库。您可以添加额外的自定义源,从而能够访问系统中可用的系统源之外的其他内容执行以下步骤将源添加到您的蓝图中

先决条件

  • 在浏览器中打开了 RHEL 8 web 控制台的 Image Builder 界面。

流程

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

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

  2. 在弹出窗口的右侧点击 Add Source 按钮。
  3. 添加所需的 Source name 、Source 路径和 Source Type

    Security 字段是可选的。

  4. 单击 Add Source。屏幕中显示可用的源窗口并列出您添加的源。

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

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

要构建和部署您创建的 RHEL for Edge 镜像,您必须在镜像蓝图上具有管理用户权限。使用 Image Builder 为镜像蓝图创建管理用户帐户。然后,您可以使用此用户帐户部署您创建的镜像。对于管理用户帐户,您可以具有基于密码的访问或基于 SSH 密钥的访问。

先决条件

  • 您已创建了可用于要创建的用户帐户的 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 管理员复选框。

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

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

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

按照以下步骤,在 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 窗口中,执行以下步骤:

    1. 从类型下拉列表中 ,为基于网络的部署选择"RHEL for Edge Commit(.tar)"。对于基于网络的部署,请选择 "RHEL for Edge Container(.tar)" 来提供提交或"RHEL for Edge 安装程序(.tar)",以使用该提交来使用提交和部署操作系统。
    2. 在父提交文本框中,指定上一个提交,或将它留空;如果此时没有提交。
    3. Ref textbox 中,指定创建您的提交的位置的引用。默认情况下,Web 控制台指定 rhel/8/arch_name/edge
    4. Create

      注意

      如果您之前对蓝图进行了任何编辑,但还没有提交,请单击 Commit 并创建

      镜像构建器为您创建的蓝图创建 RHEL for Edge 镜像。

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

      注意

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

3.6. 下载 RHEL for Edge 镜像

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

流程

下载镜像:

  1. More Options 菜单中点 Download

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

下载的文件包含包含 OSTree 存储库的 a .tar 文件。此存储库包含提交和 json 文件,其中包含有关存储库内容的信息元数据。

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

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

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

本章提供有关使用 CLI 为 Edge 镜像创建 RHEL 的信息。要使用 RHEL web 控制台创建 RHEL for Edge 镜像,请参阅 第 3 章 在 RHEL web 控制台中使用 Image Builder 编写 RHEL for Edge 镜像

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

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

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

注意

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

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

  1. 为 RHEL for Edge 镜像创建蓝图
  2. 创建 RHEL for Edge 容器镜像
  3. 为 Edge 安装程序创建 RHEL
  4. 下载 RHEL for Edge 镜像

4.1. 使用 Image Builder 命令行界面创建 RHEL for Edge 镜像蓝图

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

流程

  1. 以 Tom 的 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. 包含所需的软件包,并在蓝图中自定义其他详情以满足您的要求。

    有关您可以在蓝图中包含和自定义的软件包的更多信息,请参阅 支持的镜像自定义。

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

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

    其中,

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

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

    • 对于特定版本,请使用具体版本号,如 8.3.0。
    • 对于最新可用版本,请使用星号 *。
    • 对于最新的次版本,请使用如 8.* 的格式。
  3. 将蓝图推送到镜像构建器服务器:

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

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

    # composer-cli blueprints depsolve blueprint-name

4.2. 使用 Image Builder 命令行界面为 Edge 镜像创建 RHEL

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

先决条件

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

流程

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

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

    其中,

  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>

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

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

先决条件

  • 您已为 RHEL for Edge 镜像创建了空蓝图

    空蓝图没有自定义,即没有添加的软件包和创建的用户。添加的软件包和创建的用户是从用于构建 ISO 镜像的存储库中拉取的。

流程

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

    # composer-cli compose start-ostree --ref rhel/8/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/。请查看 第 5.2 节 “设置 web 服务器以安装 RHEL for Edge 镜像”
    • Blueprint-name 是 RHEL for Edge 蓝图名称。
    • image-typerhel-edge-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>

4.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 文件,位于 <var/lib/osbuild-composer/composer/results/<UUID>/compose/>

    UUID 编号和映像大小同时显示。

    $ <UUID>-commit.tar: size MB

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

第 5 章 部署 RHEL for Edge 镜像

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

注意

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

基于网络的部署

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

  1. 提取镜像文件内容。有关如何下载 RHEL for Edge 镜像的详情,请查看 第 3.6 节 “下载 RHEL for Edge 镜像”
  2. 设置 Web 服务器
  3. 安装镜像

非基于网络的部署

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

  1. 下载 RHEL for Edge 容器和 RHEL for Edge Install。有关如何下载 RHEL for Edge 镜像的详情,请查看 第 3.6 节 “下载 RHEL for Edge 镜像”
  2. 将 RHEL for Edge 容器镜像加载到 Podman 中
  3. 在 Podman 中运行 RHEL for Edge 容器镜像
  4. 加载空蓝图
  5. 构建 RHEL for Edge 安装程序镜像
  6. 准备 qcow 磁盘
  7. 引导虚拟机(VM)
  8. 安装镜像

5.1. 提取 RHEL for Edge 镜像提交

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

下载的提交文件包含包含 OSTree 存储库的 a .tar 文件。OSTree 存储库包含提交和 compose.json 文件。

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

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

先决条件

  1. 创建 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/8/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/8/x86_64/edge

其它资源

有关如何创建 Kickstart 文件的详情,请参考:

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

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

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

先决条件

流程

  1. 按照以下说明创建一个 dockerfile:

    FROM registry.access.redhat.com/ubi8/ubi
    RUN yum -y install httpd && yum clean all
    ADD kickstart.ks /var/www/html/
    ARG commit=commit.tar
    ADD $commit /var/www/html/
    EXPOSE 80
    CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

    其中,

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

      /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
    • The ARG commit=commit.tar 行是容器构建期间用于 提交 参数的默认值。您可以在容器构建 期间将不同的 tar 文件指定为构建参数。
    • ADD $commit /var/www/html 命令复制 commit.tar 文件,并自动将其提取到所选位置。您可以选择其他位置来提取和保存提交。

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

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

        通过 line ARG commit=commit.tar,您可以使用命令行指定将来的提交。

  2. 构建 docker 容器

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

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

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

5.3. 下载 RHEL Boot.iso 镜像

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

先决条件

流程

  1. 打开浏览器并访问 https://access.redhat.com/downloads
  2. Red Hat Enterprise Linux 8。
  3. 单击立即下载按钮以选择 "Red Hat Enterprise Linux 8.2 Boot ISO"

有关下载 Boot.iso 镜像的详情,请参考下载安装 ISO 镜像

5.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 path=prepared_disk_image.qcow2,format=qcow2 --os-variant rhel8.0 --cdrom /home/username/Downloads/rhel8-edge.iso
  2. 在安装屏幕上,按 TAB 指定附加内核参数:

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

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

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

  3. 在 Login 屏幕上,指定您的用户帐户凭证并点 Enter
  4. 验证 RHEL for Edge 镜像是否已成功安装。

    $ rpm-ostree status

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

    以下是输出示例:

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

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

下载 RHEL for Edge 容器提交后,您可以通过将下载的提交加载到 Podman 中来构建容器。为此,请执行以下步骤:

先决条件

流程

  1. 进入您下载了 RHEL for Edge 容器镜像的目录。
  2. 将 RHEL for Edge 容器镜像加载到 Podman 中。

    $ cat ./commit_ID-container.tar | sudo podman load

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

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

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

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

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

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

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

  5. 列出容器:

    $  $ 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 容器提交提供存储库。

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

构建运行中的容器以通过 RHEL for Edge 容器提交提供存储库后,创建 RHEL for Edge Installer(.iso) 镜像。安装程序(.iso)将 RHEL for Edge Container(.tar)提供的提交按 HTTP 拉取。以下示例提供了使用容器设置 Web 服务器的步骤:

先决条件

流程

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

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

      镜像构建器拉取在镜像构建期间由运行中的容器提供的提交。镜像构建完成后,您可以下载生成的镜像。请参阅下载 RHEL for Edge 镜像。

      您可以将相同的工作流用于 CLI。请参阅为非网络部署使用命令行界面创建 RHEL for Edge 安装程序镜像。

.

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

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

先决条件

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

流程

  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/Fedora-Server-netinst-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. 在 Login 屏幕上,指定您的用户帐户凭证并点 Enter

验证步骤

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

    $  rpm-ostree status

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

第 6 章 管理 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 自动恢复镜像

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

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

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

6.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

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

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

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

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

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

先决条件

  • 在 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

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

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

6.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

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

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

6.2. 使用命令行界面编辑 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

6.3. 更新 RHEL for Edge 镜像

6.3.1. RHEL for Edge 镜像如何更新

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

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

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

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

镜像部署

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

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

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

先决条件

  • 在 RHEL 系统中,您已访问 Image Builder 仪表板。
  • 您已创建了 RHEL for Edge 镜像蓝图。
  • 您编辑了 RHEL for Edge 镜像蓝图。请参阅 ???

流程

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

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

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

      注意

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

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

  3. 下载生成的 RHEL for Edge 镜像。有关下载 RHEL for Edge 镜像的详情请参考 第 3.6 节 “下载 RHEL for Edge 镜像”
  4. 提取 OSTree 提交。有关提取 OSTree 提交的更多信息,请参阅 第 5.1 节 “提取 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

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

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

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

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

先决条件

  • RHEL for Edge 系统已启动且正在运行。
  • OSTree 存储库通过 HTTP 提供。
  • 您已创建了 RHEL for Edge 镜像蓝图。
  • 您编辑了 RHEL for Edge 镜像蓝图。请参阅 ???

流程

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

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

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

      注意

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

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

  3. 下载生成的 RHEL for Edge 镜像。有关下载 RHEL for Edge 镜像的详情请参考 第 3.6 节 “下载 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:80 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

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

6.3.4. 为 RHEL 部署 Edge 自动镜像更新

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

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

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

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

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

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

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

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

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

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

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

流程

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

    • 更改 AutomaticUpdatePolicy 的值 以检查
    • 要运行更新检查,请为 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)

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

6.3.6. 启用 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 命令。

6.4. 为 Edge 镜像回滚 RHEL

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

6.4.1. RHEL for Edge 镜像如何回滚

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

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

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

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

镜像恢复过程

6.4.2. 手动回滚 RHEL for Edge 镜像

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

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

流程

  1. 运行 回滚 命令:

    # rpm-ostree rollback

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

  2. 重启系统。

    # systemctl reboot

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

6.4.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. 术语和命令

本节提供 rpmostree 术语和命令。

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 /8/x86_64/edge

修订(Rev)

特定提交的 SHA-256。

远程

托管 ostree 内容的 http 或 https 端点。这与 yum 存储库的 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 summary

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 commands

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

表 A.3. rpm-ostree commands

命令描述

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。