4.3. 为 Red Hat Edge Manager 构建 引导 操作系统镜像
要准备由 Red Hat Edge Manager 管理的设备,请构建具有 Red Hat Edge Manager 代理的 bootc
操作系统镜像。然后为您的设备构建操作系统磁盘镜像。
如需更多信息,请参阅以下部分:
4.3.1. 先决条件 复制链接链接已复制到粘贴板!
请参阅以下构建 引导操作系统镜像
的先决条件:
-
安装
podman
版本 5.0 或更高版本,以及skopeo
版本 1.14 或更高版本。请参阅 获取容器工具。 -
安装
bootc-image-builder
。请参阅 安装 bootc-image-builder。
4.3.2. 安装 Red Hat Edge Manager CLI 复制链接链接已复制到粘贴板!
要安装 Red Hat Edge Manager CLI,请完成以下步骤:
流程
运行以下命令,为适合您的系统的软件仓库启用订阅管理器:
sudo subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms
sudo subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 Red Hat Edge Manager 可用存储库的完整列表,请参阅附加资源部分。
运行以下命令,使用软件包管理器安装
flightctl
CLI:sudo dnf install flightctl
sudo dnf install flightctl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您 手动设置 OAuth 应用程序,您还需要确保一个工具 xdg-open
、x-www-browser
或 www-browser
可用,例如通过安装 xdg-utils
。
4.3.3. 通过 CLI 登录到 Red Hat Edge Manager 复制链接链接已复制到粘贴板!
如何登录 Red Hat Edge Manager 取决于您在初始设置应用程序时选择 自动 还是 手动 方法。
流程
如果您使用自动设置,您可以创建一个个人访问令牌,甚至只使用 Read scope (在 Ansible Automation Platform UI > User details > Tokens 选项卡右上角的配置集图标下),然后使用此令牌直接通过 CLI 登录,并使用以下示例语法直接登录:
flightctl login https://<your-edge-manager-ip-or-domain>:3443 --token=<your-aap-oauth-token> --insecure-skip-tls-verify
flightctl login https://<your-edge-manager-ip-or-domain>:3443 --token=<your-aap-oauth-token> --insecure-skip-tls-verify
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用手动设置,请使用 Client ID 通过基于 Web 的过程登录,如下例所示:
flightctl login https://<your-edge-manager-ip-or-domain>:3443 --web --client-id=<your-aap-client-id> --insecure-skip-tls-verify
flightctl login https://<your-edge-manager-ip-or-domain>:3443 --web --client-id=<your-aap-client-id> --insecure-skip-tls-verify
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在 Web 浏览器中打开,并要求您批准。
只有在您没有生成自己的有效证书时,才会使用
--insecure-skip-tls-verify
参数。
后续步骤
使用以下命令可帮助您使用 CLI:
要输出可用命令列表,请使用:
flightctl
flightctl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要输出 flightctl CLI 版本和后端 Red Hat Edge Manager 版本,请使用:
flightctl version
flightctl version
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为确保支持性和正确功能,flightctl CLI 的版本必须与正在使用的 Red Hat Edge Manager 版本匹配。不支持不匹配的版本。
4.3.4. 可选:为早期绑定请求注册证书 复制链接链接已复制到粘贴板!
如果要在镜像中包含代理配置,请完成以下步骤:
流程
按照通过 CLI 登录到 Red Hat Edge Manager 中的步骤登录到 flightctl CLI。
注意CLI 使用主机的证书颁发机构池来验证 Red Hat Edge Manager 服务的身份。如果您不将证书颁发机构证书添加到池中,则验证可能会导致 TLS 验证错误。您可以通过在命令中添加
--insecure-skip-tls-verify
标志来绕过服务器验证。运行以下命令,以代理配置文件的格式获取注册凭证:
flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意-
--expiration=365d
选项指定凭据有效期为一年。 -
--output=embedded
选项指定输出是一个带有嵌入注册凭证的代理配置文件。
返回的
config.yaml
包含 Red Hat Edge Manager 服务、证书颁发机构捆绑包以及代理注册客户端证书和密钥的 URL。请参见以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
4.3.5. 可选:使用镜像 pull secret 复制链接链接已复制到粘贴板!
如果您的设备依赖于私有存储库中的容器,您必须为 registry 配置 pull secret。完成以下步骤:
流程
根据您使用的容器镜像类型,将 pull secret 放在该设备中的以下一个或多个系统路径中:
-
操作系统镜像使用
/etc/ostree/auth.json
路径。 应用程序容器镜像使用
/root/.config/containers/auth.json
路径。重要在 secret 可以被消耗前,该设备中必须存在 pull secret。
-
操作系统镜像使用
确保 pull secret 使用以下格式:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请参阅附加资源部分。
4.3.6. 使用 bootc构建操作系统镜像 复制链接链接已复制到粘贴板!
使用包含 Red Hat Edge Manager 代理的 bootc
构建操作系统镜像。您可以选择在操作系统镜像中包含以下项目:
- 早期绑定的代理配置
- 任何驱动程序
- 主机配置
- 您需要的应用程序工作负载
完成以下步骤:
流程
创建包含以下内容的
Containerfile
文件来构建基于 RHEL 9 的操作系统镜像,其中包含 Red Hat Edge Manager 代理和配置:FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version> RUN dnf --enablerepo ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms -y install flightctl-agent-0.7.2-1.el9fc && \ dnf -y clean all && \ systemctl enable flightctl-agent.service && \ systemctl mask bootc-fetch-apply-updates.timer
FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version>
1 RUN dnf --enablerepo ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms -y install flightctl-agent-0.7.2-1.el9fc && \ dnf -y clean all && \ systemctl enable flightctl-agent.service && \ systemctl mask bootc-fetch-apply-updates.timer
2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果您的设备依赖于私有软件仓库的容器,您必须将设备 pull secret 放在
/etc/ostree/auth.json
路径中。在 secret 可以被消耗前,该设备中必须存在 pull secret。可选: 要启用
podman-compose
应用程序支持,请在Containerfile
文件中添加以下部分:RUN dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ dnf -y install podman-compose && \ dnf -y clean all && \ systemctl enable podman.service
RUN dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ dnf -y install podman-compose && \ dnf -y clean all && \ systemctl enable podman.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果您为早期绑定创建了
config.yaml
,请在Containerfile
中添加以下部分:ADD config.yaml /etc/flightctl/
ADD config.yaml /etc/flightctl/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请参阅 可选:为早期绑定请求注册证书。
运行以下命令定义开放容器项目(OCI) registry:
OCI_REGISTRY=registry.redhat.io
OCI_REGISTRY=registry.redhat.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,定义您具有写入权限的镜像存储库:
OCI_IMAGE_REPO=${OCI_REGISTRY}/<your_org>/<your_image>
OCI_IMAGE_REPO=${OCI_REGISTRY}/<your_org>/<your_image>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来定义镜像标签:
OCI_IMAGE_TAG=v1
OCI_IMAGE_TAG=v1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的目标平台构建操作系统镜像:
sudo podman build -t ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .
sudo podman build -t ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.7. 使用 Sigstore 签名并发布 bootc 操作系统镜像 复制链接链接已复制到粘贴板!
要使用 Sigstore 为 bootc
操作系统镜像签名,请完成以下步骤:
流程
生成名为
signingkey.pub
和signingkey.private
的 Sigstore 密钥对:skopeo generate-sigstore-key --output-prefix signingkey
skopeo generate-sigstore-key --output-prefix signingkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置 Podman 和 Skopeo 等容器工具,将 Sigstore 签名与您的签名镜像一起上传到 OCI registry:
sudo tee "/etc/containers/registries.d/${OCI_REGISTRY}.yaml" > /dev/null <<EOF docker: ${OCI_REGISTRY}: use-sigstore-attachments: true EOF
sudo tee "/etc/containers/registries.d/${OCI_REGISTRY}.yaml" > /dev/null <<EOF docker: ${OCI_REGISTRY}: use-sigstore-attachments: true EOF
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令登录到您的 OCI registry:
sudo podman login ${OCI_REGISTRY}
sudo podman login ${OCI_REGISTRY}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令签名并发布操作系统镜像:
sudo podman push \ --sign-by-sigstore-private-key ./signingkey.private \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
sudo podman push \ --sign-by-sigstore-private-key ./signingkey.private \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.8. 构建操作系统磁盘镜像 复制链接链接已复制到粘贴板!
构建包含设备文件系统的操作系统磁盘镜像。
完成以下步骤:
流程
运行以下命令,创建一个名为
output
的目录:mkdir -p output
mkdir -p output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用
bootc-image-builder
从操作系统镜像生成类型为iso
的操作系统磁盘镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
当 bootc-image-builder
完成后,您可以在 ${PWD}/output/bootiso/install.iso
路径中找到 ISO 磁盘镜像。
4.3.9. 可选:将操作系统磁盘镜像签名并发布到开放容器项目 registry 复制链接链接已复制到粘贴板!
将您的磁盘镜像签名并发布到您的开放容器项目(OCI)注册表。另外,您还可以将磁盘镜像压缩并作为 OCI 工件发布到与 bootc
镜像相同的 OCI registry,这有助于统一托管并分发 bootc
和 disk 镜像。将您的 ISO 磁盘镜像发布到以 bootc
镜像命名的存储库,并附加 /diskimage-iso
。
先决条件
- 已使用 Sigstore 创建私钥。请参阅使用 Sigstore 签名并发布 bootc 操作系统镜像。
通过完成以下步骤,签署您的磁盘镜像并将其发布到您的 OCI registry:
流程
运行以下命令,将 ISO 磁盘镜像所在的目录的所有者从
root
更改为您的当前用户:sudo chown -R $(whoami):$(whoami) "${PWD}/output"
sudo chown -R $(whoami):$(whoami) "${PWD}/output"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,定义
OCI_DISK_IMAGE_REPO
环境变量与bootc
镜像相同的存储库,并附加/diskimage-iso
:OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-iso
OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-iso
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建清单列表:
sudo podman manifest create \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
sudo podman manifest create \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将 ISO 磁盘镜像作为 OCI 工件添加到清单列表中:
sudo podman manifest add \ --artifact --artifact-type application/vnd.diskimage.iso \ --arch=amd64 --os=linux \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \ "${PWD}/output/bootiso/install.iso"
sudo podman manifest add \ --artifact --artifact-type application/vnd.diskimage.iso \ --arch=amd64 --os=linux \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \ "${PWD}/output/bootiso/install.iso"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用私有 Sigstore 密钥为清单列表签名:
sudo podman manifest push --all \ --sign-by-sigstore-private-key ./signingkey.private \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \ docker://${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
sudo podman manifest push --all \ --sign-by-sigstore-private-key ./signingkey.private \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \ docker://${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.10. 其他资源 复制链接链接已复制到粘贴板!
- 有关在不同的目标平台上构建操作系统镜像的更多信息,请参阅配置容器 pull secret。
4.3.11. 特定目标平台的要求 复制链接链接已复制到粘贴板!
请参阅以下平台注意事项:
4.3.11.1. 为 Red Hat OpenShift Virtualization 构建镜像 复制链接链接已复制到粘贴板!
在为 Red Hat OpenShift Virtualization 构建操作系统镜像和磁盘镜像时,您可以使用以下更改跟踪通用镜像构建过程:
-
在置备虚拟设备时,通过
cloud-init
注入注册证书或代理配置来使用后绑定。 -
将
open-vm-tools
客户机工具添加到镜像中。 -
构建类型为
qcow2
的磁盘镜像,而不是iso
。
通过对以下步骤的更改完成通用步骤:
流程
- 基于 RHEL 9 构建操作系统镜像,其中包含 Red Hat Edge Manager 代理和虚拟机客户机工具,但排除代理配置。
使用以下内容创建一个名为
Containerfile
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要启用
podman-compose
应用程序支持,请在Containerfile
文件中添加以下部分:RUN dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ dnf -y install podman-compose && \ dnf -y clean all && \ systemctl enable podman.service
RUN dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ dnf -y install podman-compose && \ dnf -y clean all && \ systemctl enable podman.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.11.2. 构建 bootc 镜像 复制链接链接已复制到粘贴板!
按照通用镜像构建过程构建、签名和发布 bootc
操作系统镜像:
流程
运行以下命令,创建一个名为
output
的目录:mkdir -p output
mkdir -p output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从您的操作系统镜像生成类型为
vmdk
的操作系统磁盘镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
当 bootc-image-builder
完成后,您可以在 ${PWD}/output/vmdk/disk.vmdk
下找到磁盘镜像。
4.3.11.3. 构建 QCoW2 磁盘镜像 复制链接链接已复制到粘贴板!
Red Hat OpenShift Virtualization 可以从 OCI registry 下载磁盘镜像,但它需要一个容器磁盘镜像而不是 OCI 工件。
完成以下步骤以构建、签名并上传 QCoW2 磁盘镜像:
流程
使用以下内容创建一个名为
Containerfile.qcow2
的文件:FROM registry.access.redhat.com/ubi9/ubi:latest AS builder ADD --chown=107:107 output/qcow2/disk.qcow2 /disk/ RUN chmod 0440 /disk/* FROM scratch COPY --from=builder /disk/* /disk/
FROM registry.access.redhat.com/ubi9/ubi:latest AS builder ADD --chown=107:107 output/qcow2/disk.qcow2 /disk/
1 RUN chmod 0440 /disk/*
2 FROM scratch COPY --from=builder /disk/* /disk/
3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,构建、签名和发布您的磁盘镜像:
sudo chown -R $(whoami):$(whoami) "${PWD}/output" OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-qcow2 sudo podman build -t ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} -f Containerfile.qcow2 . sudo podman push --sign-by-sigstore-private-key ./signingkey.private ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
sudo chown -R $(whoami):$(whoami) "${PWD}/output" OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-qcow2 sudo podman build -t ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} -f Containerfile.qcow2 . sudo podman push --sign-by-sigstore-private-key ./signingkey.private ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.11.4. 为 VMware vSphere 构建镜像 复制链接链接已复制到粘贴板!
在为 VMware vSphere 构建操作系统镜像和磁盘镜像时,您可以使用以下更改跟踪通用镜像构建过程:
-
在置备虚拟设备时,通过
cloud-init
注入注册证书或代理配置来使用后绑定。 -
将
open-vm-tools
客户机工具添加到镜像中。 -
构建类型为
vmdk
的磁盘镜像,而不是iso
。
通过对以下步骤的更改完成通用步骤:
流程
- 基于 RHEL 9 构建操作系统镜像,其中包含 Red Hat Edge Manager 代理和虚拟机客户机工具,但排除代理配置。
使用以下内容创建一个名为
Containerfile
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,创建一个名为
output
的目录:mkdir -p output
mkdir -p output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从您的操作系统镜像生成类型为
vmdk
的操作系统磁盘镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
当 bootc-image-builder
完成后,您可以在 ${PWD}/output/vmdk/disk.vmdk
下找到磁盘镜像。