15.2. 更新 RHEL for Edge 镜像
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
目录中的另一个文件。
操作系统使用以下方法选择部署:
-
dracut
工具解析initramfs root
文件系统中的ostree
内核参数,并将/usr
目录设置为只读
绑定挂载。 -
将
/sysroot
中的部署目录绑定到/
目录。 -
使用
MS_MOVE
挂载标志重新挂载已挂载dirs
的操作系统
如果出现错误,您可以使用 rpm-ostree
清楚命令,通过删除旧部署来执行部署回滚。每个客户端机器都包含一个存储在 /ostree/repo
中的 OSTree
存储库,以及存储在 /ostree/deploy/$STATEROOT/$CHECKSUM
中的一组部署。
借助 RHEL for Edge 镜像中的部署更新,您可以从跨多个设备的更好的系统一致性、更容易的可重复性,以及系统状态更改前后之间更好的隔离中受益。
15.2.2. 构建一个提交更新
您可以在蓝图中进行更改后构建一个提交更新,例如:
- 添加系统所需的附加软件包
- 修改任何现有组件的软件包版本
- 删除任何现有的软件包。
先决条件
- 您已更新了运行 RHEL 镜像构建器的系统。
- 您创建了一个蓝图更新。
- 您之前已创建了一个 OSTree 存储库,并通过 HTTP 提供服务。请参阅 设置一个 web 服务器以安装 RHEL for Edge 镜像。
流程
使用以下参数开始新提交镜像的 compose:
--url
、--ref
、blueprint-name
、edge-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 提交的引用。
compose 进程完成后,获取
.tar
文件。# composer-cli compose image <UUID>
将提交提取到一个临时目录,以便您可以将提交历史记录存储在 OSTree 仓库中。
$ tar -xf UUID.tar -C /var/tmp
使用
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 提交中的校验和相同。
使用
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 存储库。
验证
检查目标 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 镜像蓝图。
流程
- 在 RHEL 镜像构建器仪表盘上,单击 。
在 Create Image 窗口中,执行以下步骤:
在 Image 输出页面中:
- 从 Select a blueprint 下拉列表中,选择您编辑的蓝图。
-
从 Image output type 下拉列表中,选择
RHEL for Edge Commit (.tar)
。点 。
在 OSTree settings 页面中,输入:
- 在 Repository URL 字段中,输入要嵌入到镜像中的提交的 OSTree 存储库的 URL。例如: http://10.0.2.2:8080/repo/。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像。
- 在 Parent commit 字段中,指定之前生成的父提交 ID。请参阅提取 RHEL for Edge 镜像提交
-
在 Ref 字段中,您可以为提交指定名称或将其留空。默认情况下,web 控制台将
Ref
指定为rhel/9/arch_name/edge
。点 。
在 Review 页面中,检查自定义,并点 。RHEL 镜像构建器开始为更新的蓝图创建一个 RHEL for Edge 镜像。完成镜像创建过程需要几分钟时间。
要查看 RHEL for Edge 镜像创建进度,点 breadcrumbs 中的蓝图名称,然后单击 Images 选项卡。
生成的镜像包含您添加的最新软件包(若有),并且具有原始
提交 ID
作为父项。
下载生成的 RHEL for Edge Commit (
.tar
)镜像。-
在 Images 选项卡中,点 将 RHEL for Edge Commit (
.tar
)镜像保存到您的系统上。
-
在 Images 选项卡中,点 将 RHEL for Edge Commit (
提取 OSTree 提交(
.tar
)文件。# tar -xf UUID-commit.tar -C UPGRADE_FOLDER
升级 OSTree 存储库:
# ostree --repo=/usr/share/nginx/html/repo pull-local UPGRADE_FOLDER # ostree --repo=/usr/share/nginx/html/repo summary -u
在置备的 RHEL 系统上,从原始边缘镜像验证当前状态。
$ rpm-ostree status
如果没有新的提交 ID,请运行以下命令验证是否有可用的升级:
$ rpm-ostree upgrade --check
命令输出提供当前活动的 OSTree 提交 ID。
更新 OSTree,使新 OSTree 提交 ID 可用。
$ rpm-ostree upgrade
ostree 验证存储库是否有更新。如果是,它将获取您重新引导系统的更新和请求,以便您可以激活此新提交更新的部署。
再次检查当前状态:
$ rpm-ostree status
现在,您可以看到有 2 个提交可用:
- 活跃的父级提交。
- 一个未激活且包含 1 个添加的差异的新提交。
要激活新部署并使新提交处于活动状态,请重启您的系统。
# systemctl reboot
Anaconda 安装程序将重新引导至新部署。在登录屏幕上,您可以看到可供您引导的新部署。
-
如果要引导到最新的部署(提交),
rpm-ostree
upgrade 命令会自动排序引导条目,因此新部署使列表中的第一个。(可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按 。 - 提供您的登录用户帐户凭证。
验证 OSTree 状态:
$ rpm-ostree status
命令输出提供活动的提交 ID。
要查看更改的软件包(如果有),请在父提交和新提交之间运行差异:
$ 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 镜像更新,请确保您满足先决条件,然后按照以下步骤执行。
先决条件
- 已创建 RHEL for Edge 镜像蓝图。
- 已编辑 RHEL for Edge 镜像蓝图。请参阅 使用命令行界面编辑 RHEL for Edge 镜像蓝图。
流程
使用以下参数创建 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-type
为edge-commit
。RHEL 镜像构建器为更新的蓝图创建一个 RHEL for Edge 镜像。
-
检查 RHEL 中的 Edge 镜像创建进度:
# composer-cli compose status
注意镜像创建过程可能需要长达十到 30 分钟才能完成。
生成的镜像包含您添加的最新软件包(若有),并且具有原始
提交 ID
作为父项。- 下载生成的 RHEL for Edge 镜像。如需更多信息,请参阅 使用 RHEL 镜像构建器命令行界面下载 RHEL for Edge 镜像。
提取 OSTree 提交。
# tar -xf UUID-commit.tar -C upgrade_folder
- 使用 httpd 为 OSTree 提交提供服务。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像。
升级 OSTree 存储库:
# ostree --repo=/var/www/html/repo pull-local /tmp/ostree-commit/repo # ostree --repo=/var/www/html/repo summary -u
在从原始边缘镜像置备的 RHEL 系统中,验证当前状态:
$ rpm-ostree status
如果没有新的提交 ID,请运行以下命令验证是否有可用的升级:
$ rpm-ostree upgrade --check
命令输出提供当前活动的 OSTree 提交 ID。
更新 OSTree 以使新的 OSTree 提交 ID 可用:
$ rpm-ostree upgrade
ostree 验证存储库是否有更新。如果是,它将获取您重新引导系统的更新和请求,以便您可以激活此新提交更新的部署。
再次检查当前状态:
$ rpm-ostree status
现在,您应看到有 2 个可用的提交:
- 活跃的父级提交
- 一个未激活且包含 1 个添加的差异的新提交。
要激活新部署并使新提交处于活动状态,请重启您的系统。
# systemctl reboot
Anaconda 安装程序将重新引导至新部署。在登录屏幕上,您可以看到可供您引导的新部署。
-
如果要引导进入最新的部署,
rpm-ostree upgrade
命令会自动订购引导条目,以便新部署在列表中第一个。(可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按 。 - 使用您的帐户凭据登录。
验证 OSTree 状态:
$ rpm-ostree status
命令输出提供活动的提交 ID。
要查看更改的软件包(如果有),请在父提交和新提交之间运行差异:
$ 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 镜像蓝图。
流程
- 在系统主机上,在 RHEL 镜像构建器仪表盘上,单击 。
在 Create Image 窗口中,执行以下步骤:
在 Image output 页面中:
- 从 Select a blueprint 下拉列表中,选择您编辑的蓝图。
-
从 Image output type 下拉列表中,选择
RHEL for Edge Container (.tar)
。 - 点 。
在 OSTree settings 页面中,输入:
- 在 Repository URL 字段中,输入要嵌入到镜像中的提交的 OSTree 存储库的 URL。例如: http://10.0.2.2:8080/repo/。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像。
- 在 Parent commit 字段中,指定之前生成的父提交 ID。请参阅提取 RHEL for Edge 镜像提交
-
在 Ref 字段中,您可以为提交指定名称或将其留空。默认情况下,web 控制台将
Ref
指定为rhel/9/arch_name/edge
。 - 点 。
在 Review 页面中,检查自定义并点 。
RHEL 镜像构建器为更新的蓝图创建一个 RHEL for Edge 镜像。
点 Images 选项卡来查看 RHEL for Edge 镜像创建的进度。
注意完成镜像创建过程需要几分钟时间。
生成的镜像包含您添加的最新软件包(若有),并且具有原始
提交 ID
作为父项。
在主机上下载生成的 RHEL for Edge 镜像:
-
在 Images 选项卡中,点 将 RHEL for Edge Container (
.tar
)镜像保存到主机系统上。
-
在 Images 选项卡中,点 将 RHEL for Edge Container (
在从原始边缘镜像置备的 RHEL 系统上,执行以下步骤:
将 RHEL for Edge 容器镜像加载到 Podman 中,这一次提供子提交 ID。
$ cat ./child-commit_ID-container.tar | sudo podman load
运行
Podman
。# sudo podman run -p 8080:8080 localhost/edge-test
升级 OSTree 存储库:
# ostree --repo=/var/www/html/repo pull-local /tmp/ostree-commit/repo # ostree --repo=/var/www/html/repo summary -u
在置备的 RHEL 系统上,从原始边缘镜像验证当前状态。
$ rpm-ostree status
如果没有新的提交 ID,请运行以下命令验证是否有可用的升级:
$ rpm-ostree upgrade --check
如果有可用的更新,命令输出提供关于 OSTree 存储库中可用更新的信息,如当前活动的 OSTree 提交 ID。否则,它会提示一条信息通知没有可用的更新。
更新 OSTree,使新 OSTree 提交 ID 可用。
$ rpm-ostree upgrade
ostree 验证存储库是否有更新。如果是,它将获取您重新引导系统的更新和请求,以便您可以激活此新提交更新的部署。
检查当前系统状态:
$ rpm-ostree status
现在,您可以看到有 2 个提交可用:
- 活跃的父级提交。
- 一个未激活且包含 1 个添加的差异的新提交。
要激活新部署并使新提交处于活动状态,请重启您的系统。
# systemctl reboot
Anaconda 安装程序将重新引导至新部署。在登录屏幕上,您可以看到可供您引导的新部署。
要引导到最新的提交,请运行以下命令来自动排序引导条目,以便新部署是列表中的第一个:
$ rpm-ostree upgrade
(可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按
。
- 提供您的登录用户帐户凭证。
验证 OSTree 状态:
$ rpm-ostree status
命令输出提供活动的提交 ID。
要查看更改的软件包(如果有),请在父提交和新提交之间运行差异:
$ rpm-ostree db diff parent_commit new_commit
更新显示您已安装的软件包可用并可供使用。