10.2. 更新 RHEL for Edge 镜像
10.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 镜像中的部署更新,您可以从跨多个设备的更好的系统一致性中受益、更容易的再现性,以及系统状态更改前后之间更好地隔离中获益。
10.2.2. 构建一个提交更新 复制链接链接已复制到粘贴板!
您可以在蓝图中进行更改后构建提交更新,例如:
- 添加系统所需的额外软件包
- 修改任何现有组件的软件包版本
- 删除任何现有的软件包。
先决条件
- 您已更新了运行 RHEL 镜像构建器的系统。
- 您创建了一个蓝图更新。
- 您之前已创建了一个 OSTree 存储库,并通过 HTTP 提供服务。请参阅 设置 web 服务器以安装 RHEL for Edge 镜像。
流程
使用以下参数启动新提交镜像的 compose:
--url
、--ref
、blueprint-name
、edge-commit
。composer-cli compose start-ostree --ref rhel/8/x86_64/edge --url http://localhost:8080/repo <blueprint-name> edge-commit
# composer-cli compose start-ostree --ref rhel/8/x86_64/edge --url http://localhost:8080/repo <blueprint-name> edge-commit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在启动 compose 之前,命令指示 compose 进程从 OStree 存储库获取元数据。生成的新 OSTree 提交包含作为父镜像的原始 OSTree 提交的引用。
compose 进程完成后,获取
.tar
文件。composer-cli compose image <UUID>
# composer-cli compose image <UUID>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将提交提取到一个临时目录,以便您可以将提交历史记录存储在 OSTree 存储库中。
tar -xf UUID.tar -C /var/tmp
$ tar -xf UUID.tar -C /var/tmp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
tar -xf
命令检查生成的 OSTree 存储库提交。它将 tar 文件提取到磁盘,以便您可以检查生成的 OSTree 存储库:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在输出示例中,仓库中有一个引用父提交的 OSTree 提交。父提交与之前所做的原始 OSTree 提交中的校验和相同。
使用
ostree pull-local
命令合并两个提交:sudo ostree --repo=/var/srv/httpd/repo pull-local /var/tmp/repo
$ sudo ostree --repo=/var/srv/httpd/repo pull-local /var/tmp/repo 20 metadata, 22 content objects imported; 0 bytes content written
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令将磁盘位置(如
/var/tmp
)上的任何新元数据和内容复制到/var/srv/httpd
中的目标 OSTree 存储库。
验证
检查目标 OSTree 存储库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以看到目标 OSTree 存储库现在按逻辑顺序在存储库中包含两个提交。验证成功后,您可以更新 RHEL for Edge 系统。
10.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 窗口中,执行以下步骤:
在镜像输出页面中:
- 从 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/8/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
# tar -xf UUID-commit.tar -C UPGRADE_FOLDER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 升级 OSTree 存储库:
ostree --repo=/usr/share/nginx/html/repo pull-local UPGRADE_FOLDER ostree --repo=/usr/share/nginx/html/repo summary -u
# ostree --repo=/usr/share/nginx/html/repo pull-local UPGRADE_FOLDER # ostree --repo=/usr/share/nginx/html/repo summary -u
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在置备的 RHEL 系统上,从原始边缘镜像验证当前状态。
rpm-ostree status
$ rpm-ostree status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有新的提交 ID,请运行以下命令验证是否有可用的升级:
rpm-ostree upgrade --check
$ rpm-ostree upgrade --check
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出提供当前活动的 OSTree 提交 ID。
更新 OSTree,使新 OSTree 提交 ID 可用。
rpm-ostree upgrade
$ rpm-ostree upgrade
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ostree 验证存储库是否有更新。如果是,它将获取您重新引导系统的更新和请求,以便您可以激活此新提交更新的部署。
再次检查当前状态:
rpm-ostree status
$ rpm-ostree status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,您可以看到有 2 个提交可用:
- 活跃的父级提交。
- 一个未激活且包含 1 个添加的差异的新提交。
要激活新部署并使新提交处于活动状态,请重启您的系统。
systemctl reboot
# systemctl reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Anaconda 安装程序将重新引导至新部署。在登录屏幕上,您可以看到可供您引导的新部署。
-
如果要引导到最新的部署(提交),
rpm-ostree
upgrade 命令会自动排序引导条目,以便新部署是列表中的第一个。(可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按 。 - 提供您的登录用户帐户凭证。
验证 OSTree 状态:
rpm-ostree status
$ rpm-ostree status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出提供活动的提交 ID。
要查看更改的软件包(如果有),请在父提交和新提交之间运行差异:
rpm-ostree db diff parent_commit new_commit
$ rpm-ostree db diff parent_commit new_commit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新显示您已安装的软件包可用并可供使用。
10.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
# composer-cli compose start-ostree --ref ostree_ref --url URL-OSTree-repository -blueprint_name_ image-type
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
-
ref
是您在为 Edge Container 提交创建 RHEL 时提供的引用。例如,rhel/8/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
# composer-cli compose status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意镜像创建过程可能需要长达十到 30 分钟才能完成。
生成的镜像包含您添加的最新软件包(若有),并且具有原始
提交 ID
作为父项。- 下载生成的 RHEL for Edge 镜像。如需更多信息,请参阅 使用 RHEL 镜像构建器命令行界面下载一个 RHEL for Edge 镜像。
提取 OSTree 提交。
tar -xf UUID-commit.tar -C upgrade_folder
# tar -xf UUID-commit.tar -C upgrade_folder
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 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
# ostree --repo=/var/www/html/repo pull-local /tmp/ostree-commit/repo # ostree --repo=/var/www/html/repo summary -u
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在从原始边缘镜像置备的 RHEL 系统中,验证当前状态:
rpm-ostree status
$ rpm-ostree status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有新的提交 ID,请运行以下命令验证是否有可用的升级:
rpm-ostree upgrade --check
$ rpm-ostree upgrade --check
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出提供当前活动的 OSTree 提交 ID。
更新 OSTree 以使新的 OSTree 提交 ID 可用:
rpm-ostree upgrade
$ rpm-ostree upgrade
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ostree 验证存储库是否有更新。如果是,它将获取您重新引导系统的更新和请求,以便您可以激活此新提交更新的部署。
再次检查当前状态:
rpm-ostree status
$ rpm-ostree status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,您应看到有 2 个可用的提交:
- 活跃的父级提交
- 一个未激活且包含 1 个添加的差异的新提交。
要激活新部署并使新提交处于活动状态,请重启您的系统。
systemctl reboot
# systemctl reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Anaconda 安装程序将重新引导至新部署。在登录屏幕上,您可以看到可供您引导的新部署。
-
如果要引导进入最新的部署,
rpm-ostree upgrade
命令会自动订购引导条目,以便新部署在列表中第一个。(可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按 。 - 使用您的帐户凭据登录。
验证 OSTree 状态:
rpm-ostree status
$ rpm-ostree status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出提供活动的提交 ID。
要查看更改的软件包(如果有),请在父提交和新提交之间运行差异:
rpm-ostree db diff parent_commit new_commit
$ rpm-ostree db diff parent_commit new_commit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新显示您已安装的软件包可用并可供使用。
10.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/8/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
$ cat ./child-commit_ID-container.tar | sudo podman load
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
Podman
。sudo podman run -p 8080:8080 localhost/edge-test
# sudo podman run -p 8080:8080 localhost/edge-test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 升级 OSTree 存储库:
ostree --repo=/var/www/html/repo pull-local /tmp/ostree-commit/repo ostree --repo=/var/www/html/repo summary -u
# ostree --repo=/var/www/html/repo pull-local /tmp/ostree-commit/repo # ostree --repo=/var/www/html/repo summary -u
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在置备的 RHEL 系统上,从原始边缘镜像验证当前状态。
rpm-ostree status
$ rpm-ostree status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有新的提交 ID,请运行以下命令验证是否有可用的升级:
rpm-ostree upgrade --check
$ rpm-ostree upgrade --check
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果有可用的更新,命令输出提供关于 OSTree 存储库中可用更新的信息,如当前活动的 OSTree 提交 ID。否则,它会提示一条信息通知没有可用的更新。
更新 OSTree,使新 OSTree 提交 ID 可用。
rpm-ostree upgrade
$ rpm-ostree upgrade
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ostree 验证存储库是否有更新。如果是,它将获取您重新引导系统的更新和请求,以便您可以激活此新提交更新的部署。
检查当前系统状态:
rpm-ostree status
$ rpm-ostree status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,您可以看到有 2 个提交可用:
- 活跃的父级提交。
- 一个未激活且包含 1 个添加的差异的新提交。
要激活新部署并使新提交处于活动状态,请重启您的系统。
systemctl reboot
# systemctl reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Anaconda 安装程序将重新引导至新部署。在登录屏幕上,您可以看到可供您引导的新部署。
要引导至最新的提交,请运行以下命令来自动给引导条目排序,以便新部署是列表中的第一个:
rpm-ostree upgrade
$ rpm-ostree upgrade
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)您可以使用键盘中的箭头键选择 GRUB 菜单条目并按
。
- 提供您的登录用户帐户凭证。
验证 OSTree 状态:
rpm-ostree status
$ rpm-ostree status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出提供活动的提交 ID。
要查看更改的软件包(如果有),请在父提交和新提交之间运行差异:
rpm-ostree db diff parent_commit new_commit
$ rpm-ostree db diff parent_commit new_commit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新显示您已安装的软件包可用并可供使用。