7.3. Image Builder コマンドラインインターフェイスを使用したシステムイメージの作成
Image Builder は、カスタムのシステムイメージを作成するツールです。Image Builder を制御し、カスタムシステムイメージを作成するには、コマンドラインインターフェイス (CLI) または Web コンソールインターフェイスを使用できます。ただし、現在、Image Builder を使用するには CLI が推奨されます。
7.3.1. Image Builder コマンドラインインターフェイスの紹介
現在、Image Builder コマンドラインインターフェイス (CLI) は、Image Builder を使用するための推奨される方法です。Web コンソールインターフェイスよりも多くの機能を提供します。CLI を使用するには、適切なオプションとサブコマンドを指定して composer-cli
コマンドを実行します。
コマンドラインインターフェイスのワークフローの概要は次のようになります。
- 平文テキストファイルにブループリント定義をエクスポート (保存) する。
- テキストエディターでこのファイルを編集する。
- Image Builder でブループリントのテキストファイルをインポート (プッシュ) する。
- compose を実行して、ブループリントからイメージを構築する。
- イメージファイルをエクスポートして、ダウンロードする。
この手順を実行する基本的なサブコマンドとは別に、composer-cli
コマンドには、設定したブループリントと Compose の状態を調べるサブコマンドが多数あります。
composer-cli
コマンドを非 root として実行するには、ユーザーは、weldr
または root
グループに属している必要があります。
ユーザーを
weldr
またはroot
グループに追加するには、次のコマンドを実行します:$ sudo usermod -a -G weldr user $ newgrp weldr
7.3.2. コマンドラインインターフェイスを使用した Image Builder ブループリントの作成
コマンドラインインターフェイス (CLI) を使用して、新しい Image Builder ブループリントを作成できます。ブループリントには、最終的なイメージと、パッケージやカーネルのカスタマイズなどのそのカスタマイズが記述されています。
前提条件
- イメージビルダーツールへのアクセス。
手順
以下の内容で平文テキストファイルを作成します。
name = "BLUEPRINT-NAME" description = "LONG FORM DESCRIPTION TEXT" version = "0.0.1" modules = [] groups = []
BLUEPRINT-NAME および LONG FORM DESCRIPTION TEXT は、ブループリントの名前および説明に置き換えます。
Semantic Versioning スキームに従って、0.0.1 をバージョン番号に置き換えます。
ブループリントに含まれるすべてのパッケージに、次の行をファイルに追加します。
[[packages]] name = "package-name" version = "package-version"
package-name は、パッケージ名 (httpd、gdb-doc、coreutils など) に置き換えます。
package-version を使用するバージョンに置き換えます。このフィールドは、
dnf
バージョンの指定に対応します。- 特定のバージョンについては、8.7.0 などの正確なバージョン番号を使用してください。
- 利用可能な最新バージョンについては、アスタリスク * を使用してください。
- 最新のマイナーバージョンを指定する場合は、8.* などの形式を使用してください。
ニーズに合わせてブループリントをカスタマイズします。たとえば、Simultaneous Multi Threading (SMT) を無効にするには、ブループリントファイルに次の行を追加します。
[customizations.kernel] append = "nosmt=force"
その他に利用できるカスタマイズについては、サポートされているイメージのカスタマイズ を参照してください。
- たとえば、ファイルを BLUEPRINT-NAME.toml として保存し、テキストエディターを閉じます。
ブループリントをプッシュ (インポート) します。
# composer-cli blueprints push BLUEPRINT-NAME.toml
BLUEPRINT-NAME は、前の手順で使用した値に置き換えます。
注記composer-cli
を非 root として使用してイメージを作成するには、ユーザーをweldr
またはroot
グループに追加します。# usermod -a -G weldr user $ newgrp weldr
検証
ブループリントがプッシュされ存在していることを確認するには、既存のブループリントを一覧表示します。
# composer-cli blueprints list
追加したばかりのブループリント設定を表示します。
# composer-cli blueprints show BLUEPRINT-NAME
ブループリントに記載されているコンポーネントおよびバージョンと、その依存関係が有効かどうかを確認します。
# composer-cli blueprints depsolve BLUEPRINT-NAME
Image Builder がカスタムリポジトリーからパッケージを解決できない場合は、次の手順に従います。
osbuild-composer キャッシュを削除します。
$ sudo rm -rf /var/cache/osbuild-composer/* $ sudo systemctl restart osbuild-composer
7.3.3. コマンドラインインターフェイスで Image Builder のブループリントの編集
コマンドライン (CLI) インターフェイスで既存の Image Builder ブループリントを編集して、たとえば、新しいパッケージを追加したり、新しいグループを定義したり、カスタマイズしたイメージを作成したりできます。そのためには、以下の手順に従います。
前提条件
- ブループリントを作成している。
手順
ローカルのテキストファイルにブループリントを保存 (エクスポート) します。
# composer-cli blueprints save BLUEPRINT-NAME
- BLUEPRINT-NAME .toml ファイルをテキストエディターで編集し、変更を加えます。
編集を完了する前に、ファイルが有効なブループリントであることを確認します。
次の行がある場合は削除します。
packages = []
- たとえば、バージョン番号を 0.0.1 から 0.1.0 に増やします。Image Builder のブループリントバージョンは Semantic Versioning スキームを使用する必要があります。また、バージョンを変更しない場合、パッチバージョンコンポーネントが自動的に増加することにも注意してください。
コンテンツが有効な TOML 仕様かどうかを確認します。詳細は、TOML のドキュメント を参照してください。
注記TOML のドキュメントはコミュニティーが提供しているため、Red Hat のサポート対象外となります。このツールの問題は、https://github.com/toml-lang/toml/issues から報告できます。
- ファイルを保存し、テキストエディターを閉じます。
ブループリントを Image Builder にプッシュ (インポート) します。
# composer-cli blueprints push BLUEPRINT-NAME.toml
注記ブループリントを Image Builder にインポートして戻すには、
.toml
拡張子を含むファイル名を指定しますが、他のコマンドではブループリント名のみを使用します。Image Builder にアップロードしたコンテンツが編集内容と一致することを確認するには、ブループリントのコンテンツの一覧を表示します。
# composer-cli blueprints show BLUEPRINT-NAME
ブループリントに記載されているコンポーネントおよびバージョンと、その依存関係が有効かどうかを確認します。
# composer-cli blueprints depsolve BLUEPRINT-NAME
関連情報
7.3.4. Image Builder コマンドラインインターフェイスでシステムイメージの作成
Image Builder コマンドラインインターフェイスを使用して、カスタムイメージを作成できます。
前提条件
- イメージにブループリントを用意している。コマンドラインインターフェイスを使用した Image Builder ブループリントの作成 を参照してください。
手順
Compose を起動します。
# composer-cli compose start BLUEPRINT-NAME IMAGE-TYPE
BLUEPRINT-NAME をブループリントの名前に、IMAGE-TYPE をイメージのタイプに置き換えます。使用可能な値は、
composer-cli compose types
コマンドの出力を参照してください。作成プロセスはバックグラウンドで開始され、作成者の Universally Unique Identifier (UUID) が表示されます。
作成プロセスが完了するまで待ちます。イメージの作成が完了するまでに最大 10 分かかる場合があります。
Compose のステータスを確認するには、以下のコマンドを実行します。
# composer-cli compose status
終了した設定には、FINISHED ステータス値が表示されます。リストで設定を識別するには、その UUID を使用します。
作成プロセスが完了したら、結果のイメージファイルをダウンロードします。
# composer-cli compose image UUID
UUID は、前の手順で示した UUID 値に置き換えます。
検証
イメージを作成したら、次のコマンドを使用してイメージ作成の進行状況を確認できます。
作成ステータスを確認します。
$ sudo composer-cli compose status
イメージのメタデータをダウンロードします。
$ sudo composer-cli compose metadata UUID
イメージのログをダウンロードします。
$ sudo composer-cli compose logs UUID
このコマンドは、イメージ作成のログを含む
.tar
ファイルを作成します。ログが空の場合は、ジャーナルを確認できます。ジャーナルを確認してください。
$ journalctl | grep osbuild
マニフェストを確認します。
$ sudo cat /var/lib/osbuild-composer/jobs/job_UUID.json
ジャーナルで job_UUID .json を見つけることができます。
7.3.5. Image Builder コマンドラインの基本的なコマンド
Image Builder コマンドラインインターフェイスでは、以下のサブコマンドを利用できます。
ブループリント操作
- 利用可能なブループリント一覧の表示
# composer-cli blueprints list
- TOML 形式でブループリントの内容の表示
# composer-cli blueprints show BLUEPRINT-NAME
- TOML 形式のブループリントの内容を
BLUEPRINT-NAME.toml
ファイルに保存 (エクスポート) # composer-cli blueprints save BLUEPRINT-NAME
- ブループリントの削除
# composer-cli blueprints delete BLUEPRINT-NAME
- TOML 形式のブループリントファイルを Image Builder へプッシュ (インポート)
# composer-cli blueprints push BLUEPRINT-NAME
ブループリントでイメージの設定
- 利用可能なイメージタイプをリスト表示します。
# composer-cli compose types
- Compose の起動
# composer-cli compose start BLUEPRINT COMPOSE-TYPE
BLUEPRINT は、構築するブループリントの名前に、COMPOSE-TYPE は、出力イメージタイプに置き換えます。
- Compose のリスト表示
# composer-cli compose list
- Compose、およびそのステータスのリスト表示
# composer-cli compose status
- 実行中の Compose のキャンセル
# composer-cli compose cancel COMPOSE-UUID
- 完了した Compose の削除
# composer-cli compose delete COMPOSE-UUID
- Compose の詳細情報の表示
# composer-cli compose info COMPOSE-UUID
- Compose のイメージファイルのダウンロード
# composer-cli compose image COMPOSE-UUID
- サブコマンドとオプションをもっと見る
# composer-cli help
関連情報
- composer-cli(1) man ページ
7.3.6. Image Builder のブループリント形式
Image Builder のブループリントは、TOML 形式のプレーンテキストとしてユーザーに表示されます。
一般的なブループリントファイルの要素には、次のものが含まれます。
- ブループリントのメタデータ
name = "BLUEPRINT-NAME" description = "LONG FORM DESCRIPTION TEXT" version = "VERSION"
BLUEPRINT-NAME および LONG FORM DESCRIPTION TEXT フィールドは、ブループリントの名前と説明です。
VERSION は、セマンティックバージョニング スキームに従ったバージョン番号です。
この部分は、ブループリントファイル全体に対して 1 回だけ存在します。
modules エントリーには、イメージにインストールされるパッケージの名前とバージョンが一覧表示されます。
group エントリーは、イメージにインストールするパッケージのグループを説明します。グループは、次のパッケージカテゴリーを使用します。
- 必須
- デフォルト
オプション
ブループリントは、必須パッケージとデフォルトパッケージをインストールします。オプションパッケージを選択するメカニズムはありません。
- イメージに追加するグループ
[[groups]] name = "group-name"
group-name は、anaconda-tools、widget、wheel または users などのグループの名前です。
- イメージに追加するパッケージ
[[packages]] name = "package-name" version = "package-version"
package-name は、httpd、gdb-doc、または coreutils などのパッケージの名前です。
package-version は使用するバージョンです。このフィールドは、
dnf
バージョンの指定に対応します。- 特定のバージョンについては、8.7.0 などの正確なバージョン番号を使用してください。
- 利用可能な最新バージョンを指定する場合は、アスタリスク (*) を使用します。
- 最新のマイナーバージョンの場合は、8.* などの形式を使用します。
追加するすべてのパッケージにこのブロックを繰り返します。
現在、Image Builder ツールのパッケージとモジュールの間に違いはありません。どちらも RPM パッケージの依存関係として扱われます。
7.3.7. サポートされているイメージのカスタマイズ
ブループリントに追加の RPM パッケージを追加するか、サービスを有効にするか、カーネルコマンドラインパラメーターをカスタマイズすることで、イメージをカスタマイズできます。ブループリント内でいくつかのイメージのカスタマイズを使用できます。これらのオプションを利用するには、最初にブループリントでカスタマイズを設定し、それを Image Builder にインポート (プッシュ) する必要があります。
Web コンソールで Image Builder を使用する場合、これらのカスタマイズはサポートされません。
- パッケージグループの選択
[[packages]] name = "package_group_name"
"package_group_name" は、パッケージグループの名前に置き換えます。たとえば、"@server with gui" です。
- イメージのホスト名の設定
[customizations] hostname = "baseimage"
- 作成されるシステムイメージに対するユーザー指定
[[customizations.user]] name = "USER-NAME" description = "USER-DESCRIPTION" password = "PASSWORD-HASH" key = "PUBLIC-SSH-KEY" home = "/home/USER-NAME/" shell = "/usr/bin/bash" groups = ["users", "wheel"] uid = NUMBER gid = NUMBER
GID はオプションであり、イメージにすでに存在している必要があります。必要に応じて、パッケージで作成するか、ブループリントで
customizations.group
エントリーを使用して GID を作成します。重要password hash
を生成するには、システムに python3 をインストールする必要があります。# yum install python3
PASSWORD-HASH は、実際の
password hash
に置き換えます。password hash
を生成するには、次のようなコマンドを使用します。$ python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
PUBLIC-SSH-KEY を、実際の公開鍵に置き換えます。
その他のプレースホルダーを、適切な値に置き換えます。
name
を入力する必要があります。不要な行は省略できます。追加するすべてのユーザーにこのブロックを繰り返します。
- 作成されるシステムイメージに対するグループ指定
[[customizations.group]] name = "GROUP-NAME" gid = NUMBER
追加するすべてのグループにこのブロックを繰り返します。
- 既存ユーザーの SSH 鍵を設定します。
[[customizations.sshkey]] user = "root" key = "PUBLIC-SSH-KEY"
注記既存のユーザーの SSH キーの設定のカスタマイズは、既存ユーザーにのみ適用されます。ユーザーの作成と SSH キーの設定は、システムイメージのカスタマイズに関するユーザー仕様 を参照してください。
- デフォルトにカーネルの起動パラメーターオプションを追加
[customizations.kernel] append = "KERNEL-OPTION"
- デフォルトでは、Image Builder はデフォルトのカーネルをイメージにビルドします。ただし、ブループリントで次の設定を使用してカーネルをカスタマイズできます
[customizations.kernel] name = "KERNEL-rt"
- イメージで使用するカーネル名を定義
[customizations.kernel.name] name = "KERNEL-NAME"
- 作成されたシステムイメージにタイムゾーンおよび Network Time Protocol (NTP) サーバーを設定
[customizations.timezone] timezone = "TIMEZONE" ntpservers = "NTP_SERVER"
タイムゾーンを設定しないと、システムはデフォルトとして Universal Time, Coordinated (UTC) を使用します。NTP サーバーの設定はオプションです。
- 作成されたシステムイメージのロケール設定
[customizations.locale] languages = ["LANGUAGE"] keyboard = "KEYBOARD"
言語とキーボードオプションの両方を設定する必要があります。他の多くの言語を追加できます。最初に追加する言語はプライマリー言語で、他の言語はセカンダリーになります。以下に例を示します。
[customizations.locale] languages = ["en_US.UTF-8"] keyboard = "us"
言語でサポートされている値を一覧表示するには、以下のコマンドを実行します。
$ localectl list-locales
キーボードでサポートされている値を一覧表示するには、以下のコマンドを実行します。
$ localectl list-keymaps
- 作成されたシステムイメージのファイアウォールを設定
[customizations.firewall] port = ["PORTS"]
リストを有効にするには、数値ポートまたは
/etc/services
ファイルの名前を使用できます。- ファイアウォールサービスのカスタマイズ
利用可能なファイアウォールサービスを確認します。
$ firewall-cmd --get-services
ブループリントの
customizations.firewall.service
セクションで、カスタマイズするファイアウォールサービスを指定します。[customizations.firewall.services] enabled = ["SERVICES"] disabled = ["SERVICES"]
firewall.services
にリストされているサービスは、/etc/services
ファイルで使用可能なサービス名とは異なります。注記ファイアウォールサービスをカスタマイズしない場合は、ブループリントの
[customizations.firewall]
セクションおよび[customizations.firewall.services]
セクションを省略します。- システムの起動時に有効にするサービスの設定
[customizations.services] enabled = ["SERVICES"] disabled = ["SERVICES"]
システムの起動時に有効にするサービスを制御することができます。一部のイメージタイプでは、イメージが正しく機能し、この設定を上書きできないようにするために、すでにサービスが有効または無効になっています。ブループリントの
customizations.services
カスタマイズは、これらのサービスを置き換えるのではなく、イメージテンプレートにすでに存在するサービスのリストに追加します。注記ビルドが開始されるたびに、ホストシステムのリポジトリーのクローンが作成されます。大量の履歴を持つリポジトリーを参照すると、クローンに時間がかかり、大量のディスク領域が使用される場合があります。また、クローンは一時的なものであり、RPM パッケージの作成後にビルドによって削除されます。
- カスタムファイルシステム設定を指定します。
ブループリントでカスタムファイルシステム設定を指定できるため、デフォルトのレイアウト設定ではなく、特定のディスクレイアウトでイメージを作成できます。ブループリントでデフォルト以外のレイアウト設定を使用すると、次の利点が得られます。
- セキュリティーベンチマークコンプライアンス
- ディスク外エラーに対する保護
- 改良された性能
既存の設定との一貫性
ブループリントでファイルシステム設定をカスタマイズするには:
[[customizations.filesystem]] mountpoint = "MOUNTPOINT" size = MINIMUM-PARTITION-SIZE
ブループリントは、次の
mountpoints
とそのサブディレクトリーをサポートしています。-
/
- ルートマウントポイント -
/var
-
/home
-
/opt
-
/srv/
-
/usr
-
/app
-
/data
/boot
- RHEL 8.7 および RHEL 9.1 以降でサポートされています。注記マウントポイントのカスタマイズは、CLI を使用することで、RHEL 8.5 および RHEL 9.0 ディストリビューション以降でのみサポートされます。以前のディストリビューションでは、
root
パーティションをマウントポイントとして指定し、size 引数をイメージsize
のエイリアスとして指定することしかできません。カスタマイズされたイメージに複数のパーティションがある場合、LVM でカスタマイズされたファイルシステムパーティションを使用してイメージを作成し、実行時にそれらのパーティションのサイズを変更できます。これを行うには、ブループリントでカスタマイズされたファイルシステム設定を指定して、目的のディスクレイアウトでイメージを作成します。デフォルトのファイルシステムレイアウトは変更されません。ファイルシステムをカスタマイズせずにプレーンイメージを使用すると、ルートパーティションは
cloud-init
によってサイズ変更されます。注記8.6 以降、
osbuild-composer-46.1-1.el8
RPM 以降のバージョンでは、物理パーティションは使用できなくなり、ファイルシステムのカスタマイズによって論理ボリュームが作成されます。ブループリントは、ファイルシステムのカスタマイズを LVM パーティションに自動的に変換します。
MINIMUM-PARTITION-SIZE
値には、デフォルトのサイズ形式はありません。ブループリントのカスタマイズでは、kB から TB、および KiB から TiB の値と単位がサポートされています。たとえば、マウントポイントのサイズをバイト単位で定義できます。[[customizations.filesystem]] mountpoint = "/var" size = 1073741824
単位を使用してマウントポイントのサイズを定義することもできます。
注記RHEL 8.6 および RHEL 9.0 ディストリビューション以降に提供されているパッケージバージョンの単位を使用してのみ、マウントポイントサイズを定義できます。
以下に例を示します。
[[customizations.filesystem]] mountpoint = "/opt" size = "20 GiB" or [[customizations.filesystem]] mountpoint = "/boot" size = "1 GiB"
-
7.3.8. Image Builder によってインストールされるパッケージ
Image Builder を使用してシステムイメージを作成すると、システムはベースパッケージのセットをインストールします。デフォルトでは、Image Builder は Core
グループをパッケージの基本リストとして使用します。
イメージタイプ | デフォルトパッケージ |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ブループリントにコンポーネントを追加する場合は、追加したコンポーネント内のパッケージが他のパッケージコンポーネントと競合しないようにしてください。そうしないと、システムは依存関係を解決できず、カスタマイズされたイメージの作成に失敗します。次のコマンドを実行して、パッケージ間に競合がないかどうかを確認できます。
# composer-cli blueprints depsolve BLUEPRINT-NAME
関連情報
7.3.9. カスタムイメージで有効なサービス
Image Builder を使用してカスタムイメージを設定する場合、イメージが使用するデフォルトのサービスは次のように決定されます。
-
osbuild-composer
ユーティリティーを使用する RHEL リリース - イメージの種類
たとえば、ami
イメージタイプは、デフォルトで sshd
、chronyd
、および cloud-init
サービスを有効にします。これらのサービスが有効になっていない場合、カスタムイメージは起動しません。
イメージタイプ | デフォルトで有効化されているサービス |
---|---|
| sshd, cloud-init, cloud-init-local, cloud-config, cloud-final |
| sshd, cloud-init, cloud-init-local, cloud-config, cloud-final |
| cloud-init |
| デフォルトでは、追加のサービスは有効になりません。 |
| デフォルトでは、追加のサービスは有効になりません。 |
| sshd, chronyd, waagent, cloud-init, cloud-init-local, cloud-config, cloud-final |
| sshd、chronyd、vmtoolsd、cloud-init |
注記:システムの起動時に有効にするサービスをカスタマイズできます。ただし、カスタマイズは、前述のイメージタイプに対してデフォルトで有効になっているサービスを上書きしません。
関連情報