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有关 Red Hat Edge Manager 可用存储库的完整列表,请参阅附加资源部分。
运行以下命令,使用软件包管理器安装
flightctlCLI:sudo dnf install flightctl
如果您 手动设置 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如果使用手动设置,请使用 Client ID 通过基于 Web 的过程登录,如下例所示:
flightctl login https://<your-edge-manager-ip-or-domain>:3443 --web --client-id=<your-aap-client-id> --insecure-skip-tls-verify这会在 Web 浏览器中打开,并要求您批准。
只有在您没有生成自己的有效证书时,才会使用
--insecure-skip-tls-verify参数。
后续步骤
使用以下命令可帮助您使用 CLI:
要输出可用命令列表,请使用:
flightctl要输出 flightctl CLI 版本和后端 Red Hat Edge Manager 版本,请使用:
flightctl version
为确保支持性和正确功能,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注意-
--expiration=365d选项指定凭据有效期为一年。 -
--output=embedded选项指定输出是一个带有嵌入注册凭证的代理配置文件。
返回的
config.yaml包含 Red Hat Edge Manager 服务、证书颁发机构捆绑包以及代理注册客户端证书和密钥的 URL。请参见以下示例:enrollment-service: authentication: client-certificate-data: LS0tLS1CRUdJTiBD... client-key-data: LS0tLS1CRUdJTiBF... service: certificate-authority-data: LS0tLS1CRUdJTiBD... server: https://agent-api.flightctl.127.0.0.1.nip.io:7443 enrollment-ui-endpoint: https://ui.flightctl.127.0.0.1.nip.io:8081-
4.3.5. 可选:使用镜像 pull secret 复制链接链接已复制到粘贴板!
如果您的设备依赖于私有存储库中的容器,您必须为 registry 配置 pull secret。完成以下步骤:
流程
根据您使用的容器镜像类型,将 pull secret 放在该设备中的以下一个或多个系统路径中:
-
操作系统镜像使用
/etc/ostree/auth.json路径。 应用程序容器镜像使用
/root/.config/containers/auth.json路径。重要在 secret 可以被消耗前,该设备中必须存在 pull secret。
-
操作系统镜像使用
确保 pull secret 使用以下格式:
{ "auths": { "registry.example.com": { "auth": "base64-encoded-credentials" } } }
如需更多信息,请参阅附加资源部分。
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>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.timer2 重要如果您的设备依赖于私有软件仓库的容器,您必须将设备 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可选: 如果您为早期绑定创建了
config.yaml,请在Containerfile中添加以下部分:ADD config.yaml /etc/flightctl/
如需更多信息,请参阅 可选:为早期绑定请求注册证书。
运行以下命令定义开放容器项目(OCI) registry:
OCI_REGISTRY=registry.redhat.io运行以下命令,定义您具有写入权限的镜像存储库:
OCI_IMAGE_REPO=${OCI_REGISTRY}/<your_org>/<your_image>运行以下命令来定义镜像标签:
OCI_IMAGE_TAG=v1为您的目标平台构建操作系统镜像:
sudo podman build -t ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .
4.3.7. 使用 Sigstore 签名并发布 bootc 操作系统镜像 复制链接链接已复制到粘贴板!
要使用 Sigstore 为 bootc 操作系统镜像签名,请完成以下步骤:
流程
生成名为
signingkey.pub和signingkey.private的 Sigstore 密钥对:skopeo generate-sigstore-key --output-prefix signingkey配置 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运行以下命令登录到您的 OCI registry:
sudo podman login ${OCI_REGISTRY}运行以下命令签名并发布操作系统镜像:
sudo podman push \ --sign-by-sigstore-private-key ./signingkey.private \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
4.3.8. 构建操作系统磁盘镜像 复制链接链接已复制到粘贴板!
构建包含设备文件系统的操作系统磁盘镜像。
完成以下步骤:
流程
运行以下命令,创建一个名为
output的目录:mkdir -p output运行以下命令,使用
bootc-image-builder从操作系统镜像生成类型为iso的操作系统磁盘镜像:sudo podman run --rm -it --privileged --pull=newer \ --security-opt label=type:unconfined_t \ -v "${PWD}/output":/output \ -v /var/lib/containers/storage:/var/lib/containers/storage \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type iso \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
当 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"运行以下命令,定义
OCI_DISK_IMAGE_REPO环境变量与bootc镜像相同的存储库,并附加/diskimage-iso:OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-iso运行以下命令来创建清单列表:
sudo podman manifest create \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}运行以下命令,将 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"运行以下命令,使用私有 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}
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的文件:FROM registry.redhat.io/rhel9/bootc-image-builder:latest RUN subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms dnf -y install flightctl-agent && \ dnf -y clean all && \ systemctl enable flightctl-agent.service RUN dnf -y install cloud-init open-vm-tools && \ dnf -y clean all && \ ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \ systemctl enable vmtoolsd.service可选: 要启用
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
4.3.11.2. 构建 bootc 镜像 复制链接链接已复制到粘贴板!
按照通用镜像构建过程构建、签名和发布 bootc 操作系统镜像:
流程
运行以下命令,创建一个名为
output的目录:mkdir -p output运行以下命令,从您的操作系统镜像生成类型为
vmdk的操作系统磁盘镜像:sudo podman run --rm -it --privileged --pull=newer \ --security-opt label=type:unconfined_t \ -v "${PWD}/output":/output \ -v /var/lib/containers/storage:/var/lib/containers/storage \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type qcow2 \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
当 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/1 RUN chmod 0440 /disk/*2 FROM scratch COPY --from=builder /disk/* /disk/3 运行以下命令,构建、签名和发布您的磁盘镜像:
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}
4.3.11.4. 为 VMware vSphere 构建镜像 复制链接链接已复制到粘贴板!
在为 VMware vSphere 构建操作系统镜像和磁盘镜像时,您可以使用以下更改跟踪通用镜像构建过程:
-
在置备虚拟设备时,通过
cloud-init注入注册证书或代理配置来使用后绑定。 -
将
open-vm-tools客户机工具添加到镜像中。 -
构建类型为
vmdk的磁盘镜像,而不是iso。
通过对以下步骤的更改完成通用步骤:
流程
- 基于 RHEL 9 构建操作系统镜像,其中包含 Red Hat Edge Manager 代理和虚拟机客户机工具,但排除代理配置。
使用以下内容创建一个名为
Containerfile的文件:FROM registry.redhat.io/rhel9/bootc-image-builder:latest RUN subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms dnf -y install flightctl-agent && \ dnf -y clean all && \ systemctl enable flightctl-agent.service && \ RUN dnf -y install cloud-init open-vm-tools && \ dnf -y clean all && \ ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \ systemctl enable vmtoolsd.service运行以下命令,创建一个名为
output的目录:mkdir -p output运行以下命令,从您的操作系统镜像生成类型为
vmdk的操作系统磁盘镜像:sudo podman run --rm -it --privileged --pull=newer \ --security-opt label=type:unconfined_t \ -v "${PWD}/output":/output \ -v /var/lib/containers/storage:/var/lib/containers/storage \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type vmdk \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
当 bootc-image-builder 完成后,您可以在 ${PWD}/output/vmdk/disk.vmdk 下找到磁盘镜像。