1.3. Red Hat Edge Manager で使用するオペレーティングシステムイメージ
イメージベースのオペレーティングシステムでは、オペレーティングシステムとその設定やアプリケーションを単一のユニットとしてバージョン管理、デプロイ、および更新できます。
イメージベースのオペレーティングシステムを使用すると、以下を実行して運用上のリスクが軽減されます。
- テスト済みの環境と多数のデバイスにデプロイされる環境との間の潜在的なドリフトを最小限に抑える。
- トランザクションによる更新およびロールバックを通じて、コストのかかるメンテナンスまたは置き換えが必要となる更新の失敗によるリスクを最小限に抑える。
Red Hat Edge Manager は、起動可能なコンテナーイメージ (bootc
) を実行するイメージベースの Linux オペレーティングシステムに焦点を当てています。詳細は、bootc を参照してください。
重要: bootc
ツールは、パッケージベースのオペレーティングシステムを更新しません。
詳細は、関連情報 セクションを参照してください。
1.3.1. イメージのビルドプロセス
大まかに言うと、イメージのビルドプロセスは以下のように機能します。
-
Fedora、CentOS、RHEL イメージなどのベース
bootc
オペレーティングシステムイメージを選択します。 ベース
bootc
イメージに対して、以下の項目を重ねるコンテナーファイルを作成します。- Red Hat Edge Manager エージェントと設定。
- オプション: ターゲットデプロイメント環境に固有のドライバー。
- オプション: ホスト設定 (例: 認証局バンドル) およびすべてのデプロイメントに共通のアプリケーションワークロード。
-
podman
およびskopeo
を使用して、bootc
オペレーティングシステムイメージをビルド、公開、および署名します。 -
bootc-image-builder
を使用してオペレーティングシステムディスクイメージを作成します。 -
skopeo
を使用して、オペレーティングシステムディスクイメージをビルド、公開、および署名します。
注記: オペレーティングシステムディスクイメージには、パーティション、ボリューム、ファイルシステム、および初期 bootc
イメージが含まれます。オペレーティングシステムディスクイメージは、プロビジョニング中に 1 回だけ作成する必要があります。
後続のデバイス更新では、bootc
オペレーティングシステムイメージのみが必要になります。これには、ファイルシステム内のファイルが含まれます。
1.3.2. 関連情報
- Red Hat Edge Manager の bootc オペレーティングシステムイメージのビルド を参照してください。
- イメージのビルドに関する特別な考慮事項 を参照してください。
1.3.3. イメージのビルドに関する特別な考慮事項
テクノロジープレビュー: 次のトピックでは、Red Hat Edge Manager のイメージを構築する際の特別な考慮事項を説明します。
1.3.3.1. 動的ランタイム設定よりもビルド時設定を優先する
ビルド時にオペレーティングシステムイメージに設定を追加します。ビルド時に設定を追加することで、設定が一緒にテスト、配布、および更新されるようになります。ビルド時の設定が実行不可能または望ましくない場合には、Red Hat Edge Manager を使用して、ランタイム時にデバイスを動的に設定できます。
次の場合は、動的ランタイム設定が推奨されます。
- ホスト名やサイト固有のネットワーク認証情報など、デプロイメントまたはサイト固有の設定がある。
- イメージと共に配布する場合は安全でないシークレットがある。
- 再起動なしで追加、更新、削除が必要なアプリケーションワークロードがある、またはオペレーティングシステムよりも速い頻度で更新されるアプリケーションワークロードがある。
1.3.3.2. /usr
ディレクトリーの設定
設定が静的で、アプリケーションやサービスがその設定をサポートする場合は、設定ファイルを /usr
ディレクトリーに配置します。設定を /usr
ディレクトリーに配置すると、設定は読み取り専用のままとなり、イメージによって完全に定義されます。
次の場合は、/usr
ディレクトリーに設定を配置することは不可能または望ましくありません。
- この設定はデプロイメントまたはサイト固有です。
-
アプリケーションまたはサービスは、
/etc
ディレクトリーからの設定の読み取りのみをサポートします。 - 設定はランタイム時に変更する必要がある場合があります。
1.3.3.3. ドロップインディレクトリー
ドロップインディレクトリーを使用して、サービスが集約する設定ファイルを追加、置換、または削除します。ターゲット設定からの逸脱を引き起こす可能性のある設定ファイルを直接編集しないでください。
注記: ディレクトリー名の最後の .d/
でドロップインディレクトリーを特定できます。たとえば、/etc/containers/certs.d
、/etc/cron.d
、および /etc/NetworkManager/conf.d
などです。
1.3.3.4. スクリプトを使用したオペレーティングシステムイメージ
ファイルシステムを変更するスクリプトまたはコマンドを実行しないでください。bootc
または Red Hat Edge Manager は、逸脱や整合性チェックの失敗を引き起こす可能性のある変更されたファイルを上書きできます。
代わりに、イメージのビルド中にこのようなスクリプトやコマンドを実行するため、変更はイメージの一部になります。あるいは、Red Hat Edge Manager の設定管理メカニズムを使用します。
1.3.3.5. 関連情報
- Generic guidance for building images を参照してください。
- ランタイム時のデバイス設定の詳細は、エッジデバイスのオペレーティングシステム設定 を参照してください。
1.3.4. Red Hat Edge Manager の bootc オペレーティングシステムイメージのビルド
テクノロジープレビュー: デバイスを Red Hat Edge Manager で管理できるように準備するには、Red Hat Edge Manager エージェントを含む bootc
オペレーティングシステムイメージを構築します。次に、デバイス用のオペレーティングシステムディスクイメージをビルドします。
詳細は、次のセクションを参照してください。
1.3.4.1. 前提条件
bootc
オペレーティングシステムイメージをビルドするには、以下の前提条件を参照してください。
-
podman
バージョン 5.0 以降およびskopeo
バージョン 1.14 以降をインストールします。コンテナーツールの取得 を参照してください。 -
bootc-image-builder
をインストールします。bootc-image-builder のインストール を参照してください。
1.3.4.2. Red Hat Edge Manager CLI のインストール
Red Hat Edge Manager CLI をインストールするには、以下の手順を実行します。
以下のコマンドを実行して、お使いのシステムに適したリポジトリーのサブスクリプションマネージャーを有効にします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --enable rhacm-2.13-for-rhel-<version>-<arch>-rpms
subscription-manager repos --enable rhacm-2.13-for-rhel-<version>-<arch>-rpms
Red Hat Edge Manager で利用可能なリポジトリーの完全なリストは、関連情報 セクションを参照してください。
パッケージマネージャーを使用して
flightctl
CLI をインストールします。以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo dnf install flightctl-cli
sudo dnf install flightctl-cli
1.3.4.3. オプション: 早期バインディングの登録証明書の要求
イメージにエージェント設定を含める場合は、次の手順を実行します。
flightctl
CLI を使用して Red Hat Edge Manager サービスで認証します。以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow flightctl login --username=<your_user> --password=<your_password> https://<rhem_api_server_url>
flightctl login --username=<your_user> --password=<your_password> https://<rhem_api_server_url>
注記: CLI は、ホストの認証局プールを使用して、Red Hat Edge Manager サービスのアイデンティティーを確認します。プールに認証局証明書を追加しない場合に、自己署名証明書を使用すると、検証で TLS 検証エラーが発生する可能性があります。コマンドに
--insecure-skip-tls-verify
フラグを追加することで、サーバーの検証を回避できます。次のコマンドを実行して、エージェント設定ファイルの形式で登録認証情報を取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
注記:
-
この
--expiration=365d
オプションは、認証情報が 1 年間有効であることを指定します。 --output=embedded
オプションは、出力が登録認証情報が埋め込まれたエージェント設定ファイルであることを指定します。返された
config.yaml
には、Red Hat Edge Manager サービスの URL、認証局バンドル、およびエージェントの登録クライアント証明書およびキーが含まれます。以下の例を参照してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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
-
この
1.3.4.4. オプション: イメージプルシークレットの使用
デバイスがプライベートリポジトリーからコンテナーに依存している場合は、レジストリーのプルシークレットを設定する必要があります。以下の手順を実行します。
使用するコンテナーイメージの種類に応じて、デバイスの次のシステムパスのいずれかまたは両方にプルシークレットを配置します。
-
オペレーティングシステムイメージは、
/etc/ostree/auth.json
パスを使用します。 -
アプリケーションコンテナーイメージは、
/root/.config/containers/auth.json
パスを使用します。
重要: シークレットを使用する前に、プルシークレットがデバイスに存在している必要があります。
-
オペレーティングシステムイメージは、
プルシークレットが以下の形式であることを確認してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "auths": { "registry.example.com": { "auth": "base64-encoded-credentials" } } }
{ "auths": { "registry.example.com": { "auth": "base64-encoded-credentials" } } }
詳細は、関連情報 セクションを参照してください。
1.3.4.5. bootc を使用したオペレーティングシステムイメージのビルド
Red Hat Edge Manager エージェントを含む bootc
でオペレーティングシステムイメージをビルドします。オプションで、次の項目をオペレーティングシステムイメージに追加できます。
- 初期バインディングのエージェント設定
- 任意のドライバー
- ホストの設定
- 必要なアプリケーションワークロード
以下の手順を実行します。
以下の内容で
Containerfile
ファイルを作成して、Red Hat Edge Manager エージェントおよび設定を含む RHEL 9 ベースのオペレーティングシステムイメージをビルドします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version> RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \ dnf -y install flightctl-agent && \ 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 subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \ dnf -y install flightctl-agent && \ dnf -y clean all && \ systemctl enable flightctl-agent.service && \ systemctl mask bootc-fetch-apply-updates.timer
2 重要: デバイスがプライベートリポジトリーからコンテナーに依存している場合は、デバイスのプルシークレットを
/etc/ostree/auth.json
パスに配置する必要があります。シークレットが消費される前に、プルシークレットがデバイスに存在している必要があります。オプション:
podman-compose
アプリケーションのサポートを有効にするには、以下のセクションをContainerfile
ファイルに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
オプション: 初期バインディング用に
config.yaml
を作成した場合は、以下のセクションをContainerfile
に追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ADD config.yaml /etc/flightctl/
ADD config.yaml /etc/flightctl/
詳細は、オプション: 早期バインディングの登録証明書の要求 を参照してください。
次のコマンドを実行して、Open Container Initiative (OCI) レジストリーを定義します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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} .
1.3.4.6. Sigstore を使用した bootc オペレーティングシステムイメージの署名および公開
Sigstore を使用して bootc
オペレーティングシステムイメージに署名するには、以下の手順を実行します。
signingkey.pub
とsigningkey.private
という名前の Sigstore キーペアを生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow skopeo generate-sigstore-key --output-prefix signingkey
skopeo generate-sigstore-key --output-prefix signingkey
Podman や Skopeo などのコンテナーツールを設定して、署名済みイメージとともに Sigstore 署名を OCI レジストリーにアップロードします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
次のコマンドを実行して、OCI レジストリーにログインします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}
1.3.4.7. オペレーティングシステムディスクイメージのビルド
デバイスのファイルシステムを含むオペレーティングシステムディスクイメージをビルドします。以下の手順を実行します。
次のコマンドを実行して、
output
という名前のディレクトリーを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdir -p output
mkdir -p output
bootc-image-builder
を使用して、オペレーティングシステムイメージからiso
タイプのオペレーティングシステムディスクイメージを生成します。以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}
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 ディスクイメージを見つけることができます。
1.3.4.8. オプション: オペレーティングシステムディスクイメージの署名と Open Container Initiative レジストリーへの公開
ディスクイメージに署名して Open Container Initiative (OCI) レジストリーに公開します。オプションで、ディスクイメージを圧縮して OCI アーティファクトとして、bootc
イメージと同じ OCI レジストリーに公開できます。これにより、bootc
とディスクイメージの統一されたホスティングと配布が容易になります。/diskimage-iso
を追加した状態で、bootc
イメージの名前が付けられたリポジトリーに ISO ディスクイメージを公開するには、次の手順を実行します。
1.3.4.8.1. 前提条件
- Sigstore を使用して秘密鍵を作成している。Sigstore を使用した bootc オペレーティングシステムイメージの署名および公開 を参照してください。
1.3.4.8.2. オプション: オペレーティングシステムディスクイメージの OCI レジストリーへの署名と公開
ディスクイメージに署名して OCI レジストリーに公開します。以下の手順を実行します。
ISO ディスクイメージが存在するディレクトリーの所有者を
root
からカレントユーザーに変更します。以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo chown -R $(whoami):$(whoami) "${PWD}/output"
sudo chown -R $(whoami):$(whoami) "${PWD}/output"
/diskimage-iso
が追加されたbootc
イメージと同じリポジトリーになるようにOCI_DISK_IMAGE_REPO
環境変数を定義します。以下のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}
次のコマンドを実行して、ISO ディスクイメージを OCI アーティファクトとしてマニフェストリストに追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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"
Sigstore 秘密鍵でマニフェストリストに署名し、イメージをレジストリーにプッシュします。以下のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}
1.3.4.9. 関連情報
- Red Hat Edge Manager で利用可能なリポジトリーの完全なリストは、Red Hat Advanced Cluster Management for Kubernetes のダウンロード を参照してください。
- 異なるターゲットプラットフォームでのオペレーティングシステムイメージのビルドの詳細は、コンテナープルシークレットの設定 を参照してください。
1.3.4.10. 特定のターゲットプラットフォームの要件
イメージをビルドする際の次のプラットフォームの考慮事項を参照してください。
1.3.4.10.1. Red Hat OpenShift Virtualization のイメージビルド
VMware vSphere 用のオペレーティングシステムイメージとディスクイメージをビルドする場合は、以下の変更で汎用イメージビルドプロセスを実行できます。
-
仮想デバイスをプロビジョニングするときに、
cloud-init
を介して登録証明書またはエージェント設定を注入して、遅延バインディングを使用します。 -
open-vm-tools
ゲストツールをイメージに追加します。 -
iso
の代わりにqcow2
タイプのディスクイメージをビルドします。
以下の手順に変更を加えて、一般的な手順を実行します。
- Red Hat Edge Manager エージェントおよび仮想マシンゲストツールを含む RHEL 9 に基づいてオペレーティングシステムイメージをビルドしますが、エージェント設定を除外します。
以下の内容で、
Containerfile
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow FROM registry.redhat.io/rhel9/bootc-image-builder:latest RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-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
FROM registry.redhat.io/rhel9/bootc-image-builder:latest RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-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
ファイルに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
汎用イメージビルドプロセスに従って、bootc
オペレーティングシステムイメージをビルド、署名、および公開します。
次のコマンドを実行して、
output
という名前のディレクトリーを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdir -p output
mkdir -p output
次のコマンドを実行して、オペレーティングシステムイメージから
vmdk
タイプのオペレーティングシステムディスクイメージを生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}
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
パスで見つけることができます。
Red Hat OpenShift Virtualization は、OCI レジストリーからディスクイメージをダウンロードできますが、OCI アーティファクトではなくコンテナーディスクイメージを想定しています。QCoW2 ディスクイメージをビルド、署名、アップロードするには、以下の手順を実行します。
以下の内容で
Containerfile.qcow2
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}
1.3.4.10.2. VMware vSphere のイメージビルド
VMware vSphere 用のオペレーティングシステムイメージとディスクイメージをビルドする場合は、以下の変更で汎用イメージビルドプロセスを実行できます。
-
仮想デバイスをプロビジョニングするときに、
cloud-init
を介して登録証明書またはエージェント設定を注入して、遅延バインディングを使用します。 -
open-vm-tools
ゲストツールをイメージに追加します。 -
iso
の代わりにvmdk
タイプのディスクイメージをビルドします。
以下の手順に変更を加えて、一般的な手順を実行します。
- Red Hat Edge Manager エージェントおよび仮想マシンゲストツールを含む RHEL 9 に基づいてオペレーティングシステムイメージをビルドしますが、エージェント設定を除外します。
以下の内容で、
Containerfile
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow FROM registry.redhat.io/rhel9/bootc-image-builder:latest RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-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
FROM registry.redhat.io/rhel9/bootc-image-builder:latest RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-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
という名前のディレクトリーを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdir -p output
mkdir -p output
次のコマンドを実行して、オペレーティングシステムイメージから
vmdk
タイプのオペレーティングシステムディスクイメージを生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}
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
パスで見つけることができます。