4.3. Red Hat Edge Manager の bootc オペレーティングシステムイメージのビルド
デバイスを Red Hat Edge Manager で管理できるように準備するには、Red Hat Edge Manager エージェントを含む bootc オペレーティングシステムイメージをビルドします。次に、デバイス用のオペレーティングシステムディスクイメージをビルドします。
詳細は、以下のセクションを参照してください。
4.3.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
bootc オペレーティングシステムイメージをビルドするには、次の前提条件を確認してください。
-
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-rpmsRed Hat Edge Manager で利用可能なリポジトリーの完全なリストは、関連情報 セクションを参照してください。
次のコマンドを実行して、パッケージマネージャーを使用して
flightctlCLI をインストールします。sudo dnf install flightctl
OAuth アプリケーションを手動でセットアップ する場合は、たとえば xdg-utils をインストールするなどして、xdg-open、x-www-browser、または www-browser のいずれかのユーティリティーを利用できるようにする必要があります。
4.3.3. CLI での Red Hat Edge Manager へのログイン リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Edge Manager にログインする方法は、アプリケーションを最初にセットアップするときに 自動 方式を選択したか、手動 方式を選択したかによって異なります。
手順
自動セットアップを使用した場合は、読み取りスコープだけでも、Personal Access Token を作成し (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-verifyWeb ブラウザーが開き、承認を求められます。
--insecure-skip-tls-verifyパラメーターは、独自の有効な証明書を生成していない場合にのみ使用します。
次のステップ
CLI の使用に役立つ次のコマンドを使用します。
利用可能なコマンドのリストを出力するには、次のコマンドを使用します。
flightctlflightctl 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オプションは、認証情報が 1 年間有効であることを指定します。 -
--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. オプション: イメージプルシークレットの使用 リンクのコピーリンクがクリップボードにコピーされました!
デバイスがプライベートリポジトリーのコンテナーに依存している場合は、レジストリーのプルシークレットを設定する必要があります。以下の手順を実行します。
手順
使用するコンテナーイメージの種類に応じて、デバイスの次のシステムパスのいずれかまたは両方にプルシークレットを配置します。
-
オペレーティングシステムイメージは、パス
/etc/ostree/auth.jsonを使用します。 アプリケーションコンテナーイメージは、パス
/root/.config/containers/auth.jsonを使用します。重要プルシークレットを使用するには、その前にデバイス上にプルシークレットが存在している必要があります。
-
オペレーティングシステムイメージは、パス
プルシークレットが次の形式を使用していることを確認します。
{ "auths": { "registry.example.com": { "auth": "base64-encoded-credentials" } } }
詳細は、関連情報 セクションを参照してください。
4.3.6. bootc を使用したオペレーティングシステムイメージのビルド リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Edge Manager エージェントを含む bootc を使用してオペレーティングシステムイメージをビルドします。必要に応じて、オペレーティングシステムイメージに次の項目を含めることができます。
- 早期バインディングのエージェント設定
- 任意のドライバー
- ホストの設定
- 必要なアプリケーションワークロード
以下の手順を実行します。
手順
Red Hat Edge Manager エージェントと設定を含む RHEL 9 ベースのオペレーティングシステムイメージをビルドするには、次の内容を含む
Containerfileファイルを作成します。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 重要デバイスがプライベートリポジトリーのコンテナーに依存している場合は、デバイスのプルシークレットをパス
/etc/ostree/auth.jsonに配置する必要があります。プルシークレットを使用するには、その前にデバイス上にプルシークレットが存在している必要があります。オプション:
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/
詳細は、オプション: 早期バインディングの登録証明書の要求 を参照してください。
次のコマンドを実行して、Open Container Initiative (OCI) レジストリーを定義します。
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 signingkeyPodman や Skopeo などのコンテナーツールを設定して、署名済みイメージとともに Sigstore 署名を OCI レジストリーにアップロードします。
sudo tee "/etc/containers/registries.d/${OCI_REGISTRY}.yaml" > /dev/null <<EOF docker: ${OCI_REGISTRY}: use-sigstore-attachments: true EOF次のコマンドを実行して、OCI レジストリーにログインします。
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 の実行が完了すると、ISO ディスクイメージがパス ${PWD}/output/bootiso/install.iso に保存されます。
4.3.9. オプション: オペレーティングシステムディスクイメージの署名と Open Container Initiative レジストリーへの公開 リンクのコピーリンクがクリップボードにコピーされました!
ディスクイメージに署名して Open Container Initiative (OCI) レジストリーに公開します。必要に応じて、ディスクイメージを OCI アーティファクトとして圧縮し、bootc イメージと同じ OCI レジストリーに公開することができます。これにより、bootc とディスクイメージの一元的なホスティングと配布が容易になります。ISO ディスクイメージを、bootc イメージの名前に /diskimage-iso を付加した名前を持つリポジトリーに公開するには、次の手順を実行します。
前提条件
- Sigstore を使用して秘密鍵を作成した。Sigstore を使用した bootc オペレーティングシステムイメージの署名および公開 参照してください。
次の手順を実行して、ディスクイメージに署名し、OCI レジストリーに公開します。
手順
次のコマンドを実行して、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. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- 異なるターゲットプラットフォームでのオペレーティングシステムイメージのビルドの詳細は、コンテナープルシークレットの設定 を参照してください。
4.3.11. 特定のターゲットプラットフォームの要件 リンクのコピーリンクがクリップボードにコピーされました!
以下のプラットフォームに関する考慮事項を参照してください。
4.3.11.1. Red Hat OpenShift Virtualization のイメージのビルド リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Virtualization 用のオペレーティングシステムイメージとディスクイメージをビルドする際には、一般的なイメージビルドプロセスを使用できます。ただし、以下の変更を加えてください。
-
仮想デバイスをプロビジョニングするときに、
cloud-initを介して登録証明書またはエージェント設定を注入することにより、遅延バインディングを使用します。 -
イメージに
open-vm-toolsゲストツールを追加します。 -
isoではなくqcow2タイプのディスクイメージをビルドします。
以下のステップに変更を加えて、一般的な手順を実行してください。
手順
- Red Hat Edge Manager エージェントと仮想マシンゲストツールを含み、エージェント設定を除外した、RHEL 9 に基づくオペレーティングシステムイメージをビルドします。
次の内容を含む
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 レジストリーからディスクイメージをダウンロードできますが、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ゲストツールを追加します。 -
isoではなくvmdkタイプのディスクイメージをビルドします。
以下のステップに変更を加えて、一般的な手順を実行してください。
手順
- Red Hat Edge Manager エージェントと仮想マシンゲストツールを含み、エージェント設定を除外した、RHEL 9 に基づくオペレーティングシステムイメージをビルドします。
次の内容を含む
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 にディスクイメージが保存されます。