搜索

15.2. 更新 RHEL for Edge 镜像

download PDF

15.2.1. RHEL for Edge 镜像更新是如何部署的

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

在镜像更新过程中,只有更新的操作系统内容通过网络传输。与传输整个镜像相比,这可以使部署过程更有效率。/usr 中的操作系统二进制文件和库是 只读的/var/etc 目录保持 读和写 状态。

移至新部署时,/etc/var 目录会复制到新部署中,具有 读和写 权限。/usr 目录作为软链接复制到新部署目录,具有 只读 权限。

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

镜像部署

默认情况下,使用与 chroot 操作类似的流程引导新系统,即系统启用对文件系统的控制访问,同时控制对底层服务器环境的公开。新的 /sysroot 目录主要有以下部分:

  • 位于 /sysroot/ostree/repo 目录中的存储库数据库。
  • 位于 /sysroot/ostree/deploy/rhel/deploy 目录中的文件系统修订,其由系统更新中的每个操作创建。
  • /sysroot/ostree/boot 目录,它链接到在之前点上的部署。请注意,/ostree 是到 /sysroot/ostree 的软链接。/sysroot/ostree/boot 目录中的文件不会重复。如果部署期间文件没有改变,则使用同一文件。这些文件是硬链接到存储在 /sysroot/ostree/repo/objects 目录中的另一个文件。

操作系统使用以下方法选择部署:

  1. dracut 工具解析 initramfs root 文件系统中的 ostree 内核参数,并将 /usr 目录设置为 只读 绑定挂载。
  2. /sysroot 中的部署目录绑定到 / 目录。
  3. 使用 MS_MOVE 挂载标志重新挂载已挂载 dirs 的操作系统

如果出现错误,您可以使用 rpm-ostree 清楚命令,通过删除旧部署来执行部署回滚。每个客户端机器都包含一个存储在 /ostree/repo 中的 OSTree 存储库,以及存储在 /ostree/deploy/$STATEROOT/$CHECKSUM 中的一组部署。

借助 RHEL for Edge 镜像中的部署更新,您可以从跨多个设备的更好的系统一致性、更容易的可重复性,以及系统状态更改前后之间更好的隔离中受益。

15.2.2. 构建一个提交更新

您可以在蓝图中进行更改后构建一个提交更新,例如:

  • 添加系统所需的附加软件包
  • 修改任何现有组件的软件包版本
  • 删除任何现有的软件包。

先决条件

流程

  1. 使用以下参数开始新提交镜像的 compose:--url--refblueprint-nameedge-commit

    # composer-cli compose start-ostree --ref rhel/9/x86_64/edge --url http://localhost:8080/repo <blueprint-name> edge-commit

    在开始 compose 前,命令指示 compose 进程从 OStree 存储库获取元数据。生成的新 OSTree 提交包含一个作为父镜像的原始 OSTree 提交的引用。

  2. compose 进程完成后,获取 .tar 文件。

    # composer-cli compose image <UUID>
  3. 将提交提取到一个临时目录,以便您可以将提交历史记录存储在 OSTree 仓库中。

    $ tar -xf UUID.tar -C /var/tmp
  4. 使用 tar -xf 命令检查生成的 OSTree 存储库提交。它将 tar 文件提取到磁盘,以便您可以检查生成的 OSTree 存储库:

    $ ostree --repo=/var/tmp/repo log rhel/9/x86_64/edge
    commit d523ef801e8b1df69ddbf73ce810521b5c44e9127a379a4e3bba5889829546fa
    Parent:  f47842de7e6859cee07d743d3c67949420874727883fa9dbbaeb5824ad949d91
    ContentChecksum:  f0f6703696331b661fa22d97358db48ba5f8b62711d9db83a00a79b3ae0dfe16
    Date:  2023-06-04 20:22:28 /+0000
    Version: 9

    在输出示例中,存储库中有一个引用父提交的 OSTree 提交。父提交与之前所做的原始 OSTree 提交中的校验和相同。

  5. 使用 ostree pull-local 命令合并两个提交:

    $ sudo ostree --repo=/var/srv/httpd/repo pull-local /var/tmp/repo
    20 metadata, 22 content objects imported; 0 bytes content written

    此命令将磁盘位置(如 /var/tmp )的任何新元数据和内容复制到 /var/srv/httpd 中的目标 OSTree 存储库。

验证

  1. 检查目标 OSTree 存储库:

    $ ostree --repo=/var/srv/httpd/repo log rhel/9/x86_64/edge
    commit d523ef801e8b1df69ddbf73ce810521b5c44e9127a379a4e3bba5889829546fa
    Parent:  f47842de7e6859cee07d743d3c67949420874727883fa9dbbaeb5824ad949d91
    ContentChecksum:  f0f6703696331b661fa22d97358db48ba5f8b62711d9db83a00a79b3ae0dfe16
    Date:  2023-06-04 20:22:28 /+0000
    Version: 9
    (no subject)
    
    commit f47842de7e6859cee07d743d3c67949420874727883fa9dbbaeb5824ad949d91
    ContentChecksum:  9054de3fe5f1210e3e52b38955bea0510915f89971e3b1ba121e15559d5f3a63
    Date:  2023-06-04 20:01:08 /+0000
    Version: 9
    (no subject)

    您可以看到目标 OSTree 存储库现在在存储库中按逻辑顺序包含两个提交。验证成功后,您可以更新 RHEL for Edge 系统。

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

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

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

先决条件

  • 在 RHEL 系统上,您已访问 RHEL 镜像构建器仪表盘。
  • 您已创建了 RHEL for Edge 镜像蓝图。
  • 您编辑了 RHEL for Edge 镜像蓝图。

流程

  1. 在 RHEL 镜像构建器仪表盘上,单击 Create Image
  2. Create Image 窗口中,执行以下步骤:

    1. 在 Image 输出页面中:

      1. Select a blueprint 下拉列表中,选择您编辑的蓝图。
      2. Image output type 下拉列表中,选择 RHEL for Edge Commit (.tar)。点 Next
    2. OSTree settings 页面中,输入:

      1. Repository URL 字段中,输入要嵌入到镜像中的提交的 OSTree 存储库的 URL。例如: http://10.0.2.2:8080/repo/。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像
      2. Parent commit 字段中,指定之前生成的父提交 ID。请参阅提取 RHEL for Edge 镜像提交
      3. Ref 字段中,您可以为提交指定名称或将其留空。默认情况下,web 控制台将 Ref 指定为 rhel/9/arch_name/edge。点 Next
    3. Review 页面中,检查自定义,并点 Create image。RHEL 镜像构建器开始为更新的蓝图创建一个 RHEL for Edge 镜像。完成镜像创建过程需要几分钟时间。

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

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

  3. 下载生成的 RHEL for Edge Commit (.tar)镜像。

    1. Images 选项卡中,点 Download 将 RHEL for Edge Commit (.tar)镜像保存到您的系统上。
  4. 提取 OSTree 提交(.tar)文件。

    # tar -xf UUID-commit.tar -C UPGRADE_FOLDER
  5. 升级 OSTree 存储库:

    # ostree --repo=/usr/share/nginx/html/repo pull-local UPGRADE_FOLDER
    # ostree --repo=/usr/share/nginx/html/repo summary -u
  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

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

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

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

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

先决条件

流程

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

    # composer-cli compose start-ostree --ref ostree_ref --url URL-OSTree-repository -blueprint_name_ image-type

    其中

    • ref 是您在为 Edge Container 提交创建 RHEL 时提供的引用。例如: rhel/9/x86_64/edge
    • URL-OSTree-repository 是要嵌入到镜像中的提交的 OSTree 存储库的 URL。例如: http://10.0.2.2:8080/repo/。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像
    • image-typeedge-commit

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

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

    # composer-cli compose status
    注意

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

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

  3. 下载生成的 RHEL for Edge 镜像。如需更多信息,请参阅 使用 RHEL 镜像构建器命令行界面下载 RHEL for Edge 镜像
  4. 提取 OSTree 提交。

    # tar -xf UUID-commit.tar -C upgrade_folder
  5. 使用 httpd 为 OSTree 提交提供服务。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像
  6. 升级 OSTree 存储库:

    # ostree --repo=/var/www/html/repo pull-local /tmp/ostree-commit/repo
    # ostree --repo=/var/www/html/repo summary -u
  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

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

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

编辑 RHEL for Edge 蓝图后,您可以使用这些更新更新 RHEL for Edge Commit 镜像。使用 RHEL 镜像构建器产生一个新提交来更新已在虚拟机中部署的 RHEL for Edge 镜像,例如:使用此新提交来部署具有最新软件包版本或附加软件包的镜像。

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

先决条件

  • 在您的主机上,您已在浏览器中从 web 控制台打开了 RHEL 镜像构建器应用程序。
  • 您已置备了一个启动并正在运行的 RHEL for Edge 系统。
  • 您有一个通过 HTTP 提供服务的 OSTree 存储库。
  • 您已编辑了之前创建的 RHEL for Edge 镜像蓝图。

流程

  1. 在系统主机上,在 RHEL 镜像构建器仪表盘上,单击 Create Image
  2. Create Image 窗口中,执行以下步骤:

    1. Image output 页面中:

      1. Select a blueprint 下拉列表中,选择您编辑的蓝图。
      2. Image output type 下拉列表中,选择 RHEL for Edge Container (.tar)
      3. Next
    2. OSTree settings 页面中,输入:

      1. Repository URL 字段中,输入要嵌入到镜像中的提交的 OSTree 存储库的 URL。例如: http://10.0.2.2:8080/repo/。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像
      2. Parent commit 字段中,指定之前生成的父提交 ID。请参阅提取 RHEL for Edge 镜像提交
      3. Ref 字段中,您可以为提交指定名称或将其留空。默认情况下,web 控制台将 Ref 指定为 rhel/9/arch_name/edge
      4. Next
    3. Review 页面中,检查自定义并点 Create

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

    4. Images 选项卡来查看 RHEL for Edge 镜像创建的进度。

      注意

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

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

  3. 在主机上下载生成的 RHEL for Edge 镜像:

    1. Images 选项卡中,点 Download 将 RHEL for Edge Container (.tar)镜像保存到主机系统上。
  4. 在从原始边缘镜像置备的 RHEL 系统上,执行以下步骤:

    1. 将 RHEL for Edge 容器镜像加载到 Podman 中,这一次提供子提交 ID。

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

      #  sudo podman run -p 8080:8080 localhost/edge-test
    3. 升级 OSTree 存储库:

      # ostree --repo=/var/www/html/repo pull-local /tmp/ostree-commit/repo
      # ostree --repo=/var/www/html/repo summary -u
    4. 在置备的 RHEL 系统上,从原始边缘镜像验证当前状态。

      $ rpm-ostree status

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

      $ rpm-ostree upgrade --check

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

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

      $ rpm-ostree upgrade

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

    6. 检查当前系统状态:

      $ rpm-ostree status

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

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

      # systemctl reboot

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

    8. 要引导到最新的提交,请运行以下命令来自动排序引导条目,以便新部署是列表中的第一个:

      $ rpm-ostree upgrade

      (可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按 Enter

  5. 提供您的登录用户帐户凭证。
  6. 验证 OSTree 状态:

    $ rpm-ostree status

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

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

    $ rpm-ostree db diff parent_commit new_commit

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.