4.3. 为 Red Hat Edge Manager 构建 引导 操作系统镜像


要准备由 Red Hat Edge Manager 管理的设备,请构建具有 Red Hat Edge Manager 代理的 bootc 操作系统镜像。然后为您的设备构建操作系统磁盘镜像。

如需更多信息,请参阅以下部分:

4.3.1. 先决条件

请参阅以下构建 引导操作系统镜像 的先决条件:

4.3.2. 安装 Red Hat Edge Manager CLI

要安装 Red Hat Edge Manager CLI,请完成以下步骤:

流程

  1. 运行以下命令,为适合您的系统的软件仓库启用订阅管理器:

    sudo subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms
    Copy to Clipboard Toggle word wrap

    有关 Red Hat Edge Manager 可用存储库的完整列表,请参阅附加资源部分

  2. 运行以下命令,使用软件包管理器安装 flightctl CLI:

    sudo dnf install flightctl
    Copy to Clipboard Toggle word wrap

如果您 手动设置 OAuth 应用程序,您还需要确保一个工具 xdg-openx-www-browserwww-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
    Copy to Clipboard Toggle word wrap
  • 如果使用手动设置,请使用 Client ID 通过基于 Web 的过程登录,如下例所示:

    flightctl login https://<your-edge-manager-ip-or-domain>:3443 --web --client-id=<your-aap-client-id> --insecure-skip-tls-verify
    Copy to Clipboard Toggle word wrap
    • 这会在 Web 浏览器中打开,并要求您批准。

      只有在您没有生成自己的有效证书时,才会使用 --insecure-skip-tls-verify 参数。

后续步骤

使用以下命令可帮助您使用 CLI:

  • 要输出可用命令列表,请使用:

    flightctl
    Copy to Clipboard Toggle word wrap
  • 要输出 flightctl CLI 版本和后端 Red Hat Edge Manager 版本,请使用:

    flightctl version
    Copy to Clipboard Toggle word wrap
重要

为确保支持性和正确功能,flightctl CLI 的版本必须与正在使用的 Red Hat Edge Manager 版本匹配。不支持不匹配的版本。

4.3.4. 可选:为早期绑定请求注册证书

如果要在镜像中包含代理配置,请完成以下步骤:

流程

  1. 按照通过 CLI 登录到 Red Hat Edge Manager 中的步骤登录到 flightctl CLI

    注意

    CLI 使用主机的证书颁发机构池来验证 Red Hat Edge Manager 服务的身份。如果您不将证书颁发机构证书添加到池中,则验证可能会导致 TLS 验证错误。您可以通过在命令中添加 --insecure-skip-tls-verify 标志来绕过服务器验证。

  2. 运行以下命令,以代理配置文件的格式获取注册凭证:

    flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
    Copy to Clipboard Toggle word wrap
    注意
    • --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
    Copy to Clipboard Toggle word wrap

4.3.5. 可选:使用镜像 pull secret

如果您的设备依赖于私有存储库中的容器,您必须为 registry 配置 pull secret。完成以下步骤:

流程

  1. 根据您使用的容器镜像类型,将 pull secret 放在该设备中的以下一个或多个系统路径中:

    • 操作系统镜像使用 /etc/ostree/auth.json 路径。
    • 应用程序容器镜像使用 /root/.config/containers/auth.json 路径。

      重要

      在 secret 可以被消耗前,该设备中必须存在 pull secret。

  2. 确保 pull secret 使用以下格式:

    {
      "auths": {
        "registry.example.com": {
          "auth": "base64-encoded-credentials"
        }
      }
    }
    Copy to Clipboard Toggle word wrap

如需更多信息,请参阅附加资源部分

4.3.6. 使用 bootc构建操作系统镜像

使用包含 Red Hat Edge Manager 代理的 bootc 构建操作系统镜像。您可以选择在操作系统镜像中包含以下项目:

  • 早期绑定的代理配置
  • 任何驱动程序
  • 主机配置
  • 您需要的应用程序工作负载

完成以下步骤:

流程

  1. 创建包含以下内容的 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.timer  
    2
    Copy to Clipboard Toggle word wrap
    1
    FROM 中引用的基础镜像是一个可引导容器(bootc)镜像,该镜像已有 Linux 内核,它允许您重复使用现有的标准容器构建工具和工作流。
    2
    禁用默认的自动更新。更新由 Red Hat Edge Manager 管理。
    重要

    如果您的设备依赖于私有软件仓库的容器,您必须将设备 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
      Copy to Clipboard Toggle word wrap
    • 可选: 如果您为早期绑定创建了 config.yaml,请在 Containerfile 中添加以下部分:

      ADD config.yaml /etc/flightctl/
      Copy to Clipboard Toggle word wrap

    如需更多信息,请参阅 可选:为早期绑定请求注册证书

  2. 运行以下命令定义开放容器项目(OCI) registry:

    OCI_REGISTRY=registry.redhat.io
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,定义您具有写入权限的镜像存储库:

    OCI_IMAGE_REPO=${OCI_REGISTRY}/<your_org>/<your_image>
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来定义镜像标签:

    OCI_IMAGE_TAG=v1
    Copy to Clipboard Toggle word wrap
  5. 为您的目标平台构建操作系统镜像:

    sudo podman build -t ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .
    Copy to Clipboard Toggle word wrap

要使用 Sigstore 为 bootc 操作系统镜像签名,请完成以下步骤:

流程

  1. 生成名为 signingkey.pubsigningkey.private 的 Sigstore 密钥对:

    skopeo generate-sigstore-key --output-prefix signingkey
    Copy to Clipboard Toggle word wrap
  2. 配置 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
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令登录到您的 OCI registry:

    sudo podman login ${OCI_REGISTRY}
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令签名并发布操作系统镜像:

    sudo podman push \
        --sign-by-sigstore-private-key ./signingkey.private \
        ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
    Copy to Clipboard Toggle word wrap

4.3.8. 构建操作系统磁盘镜像

构建包含设备文件系统的操作系统磁盘镜像。

完成以下步骤:

流程

  1. 运行以下命令,创建一个名为 output 的目录:

    mkdir -p output
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,使用 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}
    Copy to Clipboard Toggle word wrap

bootc-image-builder 完成后,您可以在 ${PWD}/output/bootiso/install.iso 路径中找到 ISO 磁盘镜像。

将您的磁盘镜像签名并发布到您的开放容器项目(OCI)注册表。另外,您还可以将磁盘镜像压缩并作为 OCI 工件发布到与 bootc 镜像相同的 OCI registry,这有助于统一托管并分发 bootc 和 disk 镜像。将您的 ISO 磁盘镜像发布到以 bootc 镜像命名的存储库,并附加 /diskimage-iso

先决条件

通过完成以下步骤,签署您的磁盘镜像并将其发布到您的 OCI registry:

流程

  1. 运行以下命令,将 ISO 磁盘镜像所在的目录的所有者从 root 更改为您的当前用户:

    sudo chown -R $(whoami):$(whoami) "${PWD}/output"
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,定义 OCI_DISK_IMAGE_REPO 环境变量与 bootc 镜像相同的存储库,并附加 /diskimage-iso

    OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-iso
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令来创建清单列表:

    sudo podman manifest create \
        ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,将 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"
    Copy to Clipboard Toggle word wrap
  5. 运行以下命令,使用私有 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}
    Copy to Clipboard Toggle word wrap

4.3.10. 其他资源

4.3.11. 特定目标平台的要求

请参阅以下平台注意事项:

4.3.11.1. 为 Red Hat OpenShift Virtualization 构建镜像

在为 Red Hat OpenShift Virtualization 构建操作系统镜像和磁盘镜像时,您可以使用以下更改跟踪通用镜像构建过程:

  • 在置备虚拟设备时,通过 cloud-init 注入注册证书或代理配置来使用后绑定。
  • open-vm-tools 客户机工具添加到镜像中。
  • 构建类型为 qcow2 的磁盘镜像,而不是 iso

通过对以下步骤的更改完成通用步骤:

流程

  1. 基于 RHEL 9 构建操作系统镜像,其中包含 Red Hat Edge Manager 代理和虚拟机客户机工具,但排除代理配置。
  2. 使用以下内容创建一个名为 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
    Copy to Clipboard Toggle word wrap
  3. 可选: 要启用 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
    Copy to Clipboard Toggle word wrap

4.3.11.2. 构建 bootc 镜像

按照通用镜像构建过程构建、签名和发布 bootc 操作系统镜像:

流程

  1. 运行以下命令,创建一个名为 output 的目录:

    mkdir -p output
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,从您的操作系统镜像生成类型为 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}
    Copy to Clipboard Toggle word wrap

bootc-image-builder 完成后,您可以在 ${PWD}/output/vmdk/disk.vmdk 下找到磁盘镜像。

4.3.11.3. 构建 QCoW2 磁盘镜像

Red Hat OpenShift Virtualization 可以从 OCI registry 下载磁盘镜像,但它需要一个容器磁盘镜像而不是 OCI 工件。

完成以下步骤以构建、签名并上传 QCoW2 磁盘镜像:

流程

  1. 使用以下内容创建一个名为 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
    Copy to Clipboard Toggle word wrap
    1
    将 QCoW2 磁盘镜像添加到构建器容器中,以设置所需的 107 文件所有权,即 QEMU 用户。
    2
    设置所需的 0440 文件权限。
    3
    将文件复制到全新镜像。
  2. 运行以下命令,构建、签名和发布您的磁盘镜像:

    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 Toggle word wrap

4.3.11.4. 为 VMware vSphere 构建镜像

在为 VMware vSphere 构建操作系统镜像和磁盘镜像时,您可以使用以下更改跟踪通用镜像构建过程:

  • 在置备虚拟设备时,通过 cloud-init 注入注册证书或代理配置来使用后绑定。
  • open-vm-tools 客户机工具添加到镜像中。
  • 构建类型为 vmdk 的磁盘镜像,而不是 iso

通过对以下步骤的更改完成通用步骤:

流程

  1. 基于 RHEL 9 构建操作系统镜像,其中包含 Red Hat Edge Manager 代理和虚拟机客户机工具,但排除代理配置。
  2. 使用以下内容创建一个名为 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
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,创建一个名为 output 的目录:

    mkdir -p output
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,从您的操作系统镜像生成类型为 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}
    Copy to Clipboard Toggle word wrap

bootc-image-builder 完成后,您可以在 ${PWD}/output/vmdk/disk.vmdk 下找到磁盘镜像。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat