28 Kiwiを使用したSUSE Linux Microの更新イメージの構築 #
このセクションでは、SUSE Linux Microの更新イメージを生成して、Edge Image BuilderまたはCluster API (CAPI) + Metal3で使用するか、あるいはディスクイメージをブロックデバイスに直接書き込む方法について説明します。このプロセスは、初期のシステムブートイメージに最新のパッチを含める必要がある状況や(インストール後のパッチ転送を最小化するため)、CAPIを使用するシナリオにおいて、ホストをインプレースでアップグレードするのではなく、新しいイメージを使用してオペレーティングシステムを再インストールする場合に役立ちます。
このプロセスでは、Kiwiを利用してイメージの構築を実行します。SUSE Edgeには、組み込みのヘルパーユーティリティによって全体的なプロセスが簡素化されるコンテナ化バージョンが付属しており、必要なターゲットプロファイルを指定できます。このプロファイルで、必要な出力イメージのタイプを定義します。以下に一般的なものを示します。
「Base」 - 縮小版のパッケージセットが含まれるSUSE Linux Microディスクイメージ(podmanを含む)。
「Base-SelfInstall」 - 上の「Base」に基づくセルフインストールイメージ。
「Base-RT」 - 上の「Base」と同じですが、代わりにリアルタイム(rt)カーネルを使用します。
「Base-RT-SelfInstall」 - 上の「Base-RT」に基づくセルフインストールイメージ。
「Default」 - 上の「Base」に基づくSUSE Linux Microディスクイメージですが、仮想化スタック、Cockpit、salt-minionなどのツールがいくつか追加されています。
「Default-SelfInstall」 - 上の「Default」に基づくセルフインストールイメージ。
詳細については、SUSE Linux Micro 6.1のドキュメントを参照してください。
このプロセスはAMD64/Intel 64およびAArch64のどちらのアーキテクチャでも動作しますが、両方のアーキテクチャですべてのイメージプロファイルが利用できるわけではありません。たとえば、SUSE Edge 3.3では、SUSE Linux Micro 6.1が使用されており、リアルタイムカーネルが含まれるプロファイル(つまり「Base-RT」または「Base-RT-SelfInstall」)は現在のところAArch64では利用できません。
構築するイメージと同じアーキテクチャの構築ホストを使用する必要があります。つまり、AArch64のイメージを構築するにはAArch64の構築ホストを使用する必要があり、AMD64/Intel 64の場合も同様です。クロス構築は現在のところサポートされていません。
28.1 前提条件 #
Kiwi Image Builderには以下が必要です。
構築するイメージと同じアーキテクチャのSUSE Linux Micro 6.1ホスト(「構築システム」)。
構築システムは
SUSEConnect
を介して登録済みである必要があります(この登録を使用してSUSEリポジトリから最新のパッケージをプルします)。必要なパッケージをプルするために使用できるインターネット接続。プロキシ経由で接続している場合、構築ホストを再設定する必要があります。
構築ホスト上でSELinuxを無効化する必要があります(コンテナ内でSELinuxのラベル付けが実行され、これがホストのポリシーと競合する可能性があるためです)。
コンテナイメージ、構築ホスト、および作成される出力イメージを格納するための10GB以上の空きディスク容量。
28.2 はじめに #
特定の制限のため、現在はSELinuxを無効化する必要があります。SUSE Linux Micro 6.1イメージ構築ホストに接続し、SELinuxを確実に無効化します。
# setenforce 0
作成されるイメージを保存するためにKiwi構築コンテナと共有する出力ディレクトリを作成します。
# mkdir ~/output
SUSEレジストリから最新のKiwi Builderイメージをプルします。
# podman pull registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0
(...)
28.3 デフォルトイメージの構築 #
コンテナイメージの実行時に引数が指定されていない場合、これがKiwiイメージコンテナのデフォルトの動作です。以下のコマンドは、次の2つのディレクトリをコンテナにマップした状態でpodman
を実行します。
基になるホストのSUSE Linux Microパッケージリポジトリディレクトリである
/etc/zypp/repos.d
。上記で作成される出力の
~/output
ディレクトリ。
Kiwiイメージコンテナでは、build-image
ヘルパースクリプトを次のように実行する必要があります。
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image
(...)
このスクリプトを初めて実行すると、開始直後にスクリプトが失敗し、「ERROR: Early loop device test failed, please retry the container run. (エラー: ループデバイスの早期テストが失敗しました。もう一度コンテナの実行を試してください。)」というエラーが発生すると予想されます。これは、基になるホストシステム上に作成されるループデバイスがすぐにはコンテナイメージ内に表示されないことを示す症状です。単にコマンドを再実行すれば、問題なく続行されるはずです。
数分後、ローカルのoutputディレクトリ内にイメージを確認できます。
(...)
INFO: Image build successful, generated images are available in the 'output' directory.
# ls -1 output/
SLE-Micro.x86_64-6.1.changes
SLE-Micro.x86_64-6.1.packages
SLE-Micro.x86_64-6.1.raw
SLE-Micro.x86_64-6.1.verified
build
kiwi.result
kiwi.result.json
28.4 他のプロファイルを使用したイメージの構築 #
異なるイメージプロファイルを構築するには、Kiwiコンテナイメージのヘルパースクリプトで「-p」コマンドオプションを使用します。たとえば、「Default-SelfInstall」のISOイメージを構築するには、次のコマンドを使用します。
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image -p Default-SelfInstall
(...)
データの消失を防ぐため、Kiwiは、output
ディレクトリにイメージが存在する場合、実行を拒否します。rm
-f output/*
を使用して続行する前に、outputディレクトリの内容を削除する必要があります。
または、リアルタイムカーネル(「kernel-rt」)を使用してSelfInstall ISOイメージを構築するには、次のコマンドを使用します。
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image -p Base-RT-SelfInstall
(...)
28.5 大きいセクタサイズを使用したイメージの構築 #
ハードウェアによっては、大きいセクタサイズ、つまり標準の512バイトではなく4096バイトのイメージが必要になることがあります。コンテナ化されたKiwi Builderでは、「-b」パラメータを指定することで、大きいブロックサイズのイメージを生成できます。たとえば、大きいセクタサイズを使用して「Default-SelfInstall」イメージを構築するには、次のコマンドを使用します。
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image -p Default-SelfInstall -b
(...)
28.6 カスタムのKiwiイメージ定義ファイルの使用 #
高度なユースケースでは、カスタムのKiwiイメージ定義ファイル(SL-Micro.kiwi
)を、必要な構築後スクリプトとともに使用できます。このためには、SUSE
Edgeチームによって事前にパッケージ化されているデフォルトの定義を上書きする必要があります。
新しいディレクトリを作成し、ヘルパースクリプトが参照するコンテナイメージにマップします(/micro-sdk/defs
)。
# mkdir ~/mydefs/
# cp /path/to/SL-Micro.kiwi ~/mydefs/
# cp /path/to/config.sh ~/mydefs/
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output -v ~/mydefs/:/micro-sdk/defs/ \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image
(...)
これは、高度なユースケースにおいて、サポート性に問題が生じる可能性がある場合にのみ必要です。詳細なアドバイスとガイダンスについては、SUSEの担当者にお問い合わせください。
コンテナに含まれるデフォルトのKiwiイメージ定義ファイルを取得するには、次のコマンドを使用できます。
$ podman create --name kiwi-builder registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0
$ podman cp kiwi-builder:/micro-sdk/defs/SL-Micro.kiwi .
$ podman cp kiwi-builder:/micro-sdk/defs/SL-Micro.kiwi.4096 .
$ podman rm kiwi-builder
$ ls ./SL-Micro.*
(...)