9.3. RHEL Image Builder CLI を使用したシステムイメージの作成
RHEL Image Builder は、カスタムのシステムイメージを作成するツールです。RHEL Image Builder を制御し、カスタムシステムイメージを作成するには、コマンドライン (CLI) または Web コンソールインターフェイスを使用できます。
9.3.1. RHEL Image Builder コマンドラインインターフェイスの紹介 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder コマンドラインインターフェイス (CLI) を使用してブループリントを作成するには、適切なオプションとサブコマンドを指定して composer-cli コマンドを実行します。
コマンドラインのワークフローの概要は次のとおりです。
- ブループリントを作成するか、既存のブループリント定義をプレーンテキストファイルにエクスポート (保存) します。
- テキストエディターでこのファイルを編集します。
- ブループリントテキストファイルを Image Builder にインポートします。
- Compose を実行して、ブループリントからイメージをビルドします。
- イメージファイルをエクスポートしてダウンロードします。
composer-cli コマンドには、ブループリントを作成する基本的なサブコマンドとは別に、設定したブループリントと Compose の状態を調べるための多くのサブコマンドが用意されています。
9.3.2. RHEL Image Builder を非 root ユーザーとして使用する リンクのコピーリンクがクリップボードにコピーされました!
非 root として composer-cli コマンドを実行するには、ユーザーが weldr グループに属している必要があります。
前提条件
- ユーザーを作成している。
手順
ユーザーを
weldrまたはrootグループに追加するには、次のコマンドを実行します:$ sudo usermod -a -G weldr user $ newgrp weldr
9.3.3. コマンドラインを使用したブループリントの作成 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder のコマンドラインインターフェイス (CLI) を使用して、新しいブループリントを作成できます。ブループリントには、最終的なイメージと、パッケージやカーネルのカスタマイズなどのそのカスタマイズが記述されています。
前提条件
-
root ユーザーまたは
weldrグループのメンバーであるユーザーとしてログインしている。
手順
次の内容のプレーンテキストファイルを作成します。
name = "BLUEPRINT-NAME" description = "LONG FORM DESCRIPTION TEXT" version = "0.0.1" modules = [] groups = []BLUEPRINT-NAME および LONG FORM DESCRIPTION TEXT は、ブループリントの名前および説明に置き換えます。
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"その他に利用できるカスタマイズについては、サポートされているイメージのカスタマイズ を参照してください。
[]と[[]]は TOML で表現される異なるデータ構造であることに注意してください。-
[customizations.kernel]ヘッダーは、キーと各値のペアの集合によって定義される単一のテーブルを表します (例:append = "nosmt=force")。 -
[[packages]]ヘッダーはテーブルの配列を表します。最初のインスタンスで、配列とその最初のテーブル要素を定義します (例:name = "package-name"、version = "package-version")。後続の各インスタンスで、指定の順序で、その配列内に新しいテーブル要素を作成して定義します。
-
- たとえば、ファイルを BLUEPRINT-NAME.toml として保存し、テキストエディターを閉じます。
オプション: Blueprint TOML ファイルのすべての設定が正しく解析されているかどうかを確認します。ブループリントを保存し、保存した出力を入力ファイルと比較します。
# composer-cli blueprints save BLUEPRINT-NAME.toml-
保存した
BLUEPRINT-NAME.tomlファイルを入力ファイルと比較します。
-
保存した
ブループリントをプッシュします。
# composer-cli blueprints push BLUEPRINT-NAME.tomlBLUEPRINT-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-NAMERHEL Image Builder がカスタムリポジトリーのパッケージの依存関係を解決できない場合は、
osbuild-composerキャッシュを削除します。3$ sudo rm -rf /var/cache/osbuild-composer/* $ sudo systemctl restart osbuild-composer
9.3.4. コマンドラインを使用したブループリントの編集 リンクのコピーリンクがクリップボードにコピーされました!
コマンドライン (CLI) で既存のブループリントを編集して、たとえば、新しいパッケージを追加したり、新しいグループを定義したり、カスタマイズしたイメージを作成したりできます。
前提条件
- ブループリントを作成している。
手順
既存のブループリントをリストします。
# composer-cli blueprints listブループリントをローカルテキストファイルに保存します。
# composer-cli blueprints save BLUEPRINT-NAME- BLUEPRINT-NAME .toml ファイルをテキストエディターで編集し、変更を加えます。
編集を完了する前に、ファイルが有効なブループリントであることを確認します。
ブループリントに次の行が存在する場合は、それを削除します。
packages = []- たとえば、バージョン番号を 0.0.1 から 0.1.0 に増やします。RHEL Image Builder のブループリントバージョンでは、セマンティックバージョニングスキームを使用する必要があります。また、バージョンを変更しない場合、パッチバージョンコンポーネントが自動的に増加することにも注意してください。
- ファイルを保存し、テキストエディターを閉じます。
ブループリントを RHEL Image Builder にプッシュして戻します。
# composer-cli blueprints push BLUEPRINT-NAME.toml注記ブループリントを RHEL Image Builder にインポートして戻すには、
.toml拡張子を含むファイル名を指定しますが、他のコマンドではブループリント名のみを使用します。
検証
RHEL Image Builder にアップロードした内容が編集内容と一致することを確認するには、ブループリントの内容をリストします。
# composer-cli blueprints show BLUEPRINT-NAMEブループリントに記載されているコンポーネントおよびバージョンと、その依存関係が有効かどうかを確認します。
# composer-cli blueprints depsolve BLUEPRINT-NAME
9.3.5. RHEL Image Builder コマンドラインでのシステムイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder のコマンドラインインターフェイスを使用して、カスタマイズした RHEL イメージをビルドできます。そのためには、ブループリントとイメージタイプを指定する必要があります。必要に応じて、ディストリビューションを指定することもできます。ディストリビューションを指定しない場合は、ホストシステムと同じディストリビューションとバージョンが使用されます。アーキテクチャーもホストのアーキテクチャーと同じになります。
前提条件
- イメージにブループリントを用意している。コマンドラインを使用して RHEL Image Builder ブループリントを作成するを 参照してください。
手順
オプション: 作成できるイメージ形式をリストします。
# composer-cli compose typesCompose を起動します。
# composer-cli compose start BLUEPRINT-NAME IMAGE-TYPEBLUEPRINT-NAME をブループリントの名前に、IMAGE-TYPE をイメージのタイプに置き換えます。使用可能な値は、
composer-cli compose typesコマンドの出力を参照してください。作成プロセスはバックグラウンドで開始され、作成者の Universally Unique Identifier (UUID) が表示されます。
イメージの作成が完了するまでに最大 10 分かかる場合があります。
Compose のステータスを確認するには、以下のコマンドを実行します。
# composer-cli compose statusCompose が完了すると、ステータスが FINISHED になります。リスト内の Compose を識別するには、その UUID を使用します。
Compose プロセスが完了したら、作成されたイメージファイルをダウンロードします。
# composer-cli compose image UUIDUUID は、前の手順で示した UUID 値に置き換えます。
検証
イメージを作成した後、次のコマンドを使用してイメージ作成の進行状況を確認できます。
イメージのメタデータをダウンロードして、Compose 用のメタデータの
.tarファイルを取得します。$ 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 を見つけることができます。
9.3.6. RHEL Image Builder コマンドラインの基本的なコマンド リンクのコピーリンクがクリップボードにコピーされました!
RHEL 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 形式のブループリントファイルを RHEL Image Builder へプッシュ (インポート)
# composer-cli blueprints push <BLUEPRINT-NAME>
ブループリントでイメージの設定
- 利用可能なイメージタイプをリスト表示します。
# composer-cli compose types- Compose の起動
# composer-cli compose start <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
9.3.7. RHEL Image Builder のブループリント形式 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder のブループリントは、TOML 形式のプレーンテキストとしてユーザーに表示されます。
一般的なブループリントファイルの要素には、次のものが含まれます。
- ブループリントのメタデータ
name = "<BLUEPRINT-NAME>" description = "<LONG FORM DESCRIPTION TEXT>" version = "<VERSION>"BLUEPRINT-NAME および LONG FORM DESCRIPTION TEXT フィールドは、ブループリントの名前と説明です。
VERSION は、セマンティックバージョニングスキームに従ったバージョン番号であり、ブループリントファイル全体で 1 つだけ存在するものです。
- イメージに追加するグループ
[[groups]] name = "group-name"group エントリーは、イメージにインストールするパッケージのグループを説明します。グループは、次のパッケージカテゴリーを使用します。
- 必須
- デフォルト
任意
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.* などの形式を使用します。
追加するすべてのパッケージにこのブロックを繰り返します。
RHEL Image Builder ツールのパッケージとモジュールの間に違いはありません。どちらも RPM パッケージの依存関係として扱われます。
9.3.8. サポートされているイメージのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
ブループリントに次のようなカスタマイズを追加することで、イメージをカスタマイズできます。
- RPM パッケージの追加
- サービスの有効化
- カーネルコマンドラインパラメーターのカスタマイズ
とりわけ、ブループリント内ではいくつかのイメージのカスタマイズを使用できます。カスタマイズを使用すると、デフォルトのパッケージでは使用できないパッケージやグループをイメージに追加できます。これらのオプションを使用するには、ブループリントでカスタマイズを設定し、それを RHEL Image Builder にインポート (プッシュ) します。
9.3.8.1. ディストリビューションの選択 リンクのコピーリンクがクリップボードにコピーされました!
distro フィールドを使用して、イメージを作成するときやブループリント内の依存関係を解決するときに使用するディストリビューションを指定できます。distro フィールドが空白のままの場合、ブループリントはホストのオペレーティングシステムディストリビューションを自動的に使用します。ディストリビューションを指定しない場合、ブループリントはホストディストリビューションを使用します。ホストオペレーティングシステムをアップグレードすると、指定されたディストリビューションがないブループリントは、アップグレードされたオペレーティングシステムのバージョンを使用してイメージをビルドします。
新しいシステムで古いメジャーバージョンのイメージをビルドできます。たとえば、RHEL 10 ホストを使用して、RHEL 9 および RHEL 8 のイメージを作成できます。ただし、古いシステムで新しいメジャーバージョンのイメージをビルドすることはできません。
RHEL Image Builder ホストとは異なるオペレーティングシステムイメージをビルドすることはできません。たとえば、RHEL システムを使用して Fedora または CentOS のイメージをビルドすることはできません。
指定の RHEL イメージを常にビルドするように、RHEL ディストリビューションを使用してブループリントをカスタマイズします。
name = "blueprint_name" description = "blueprint_version" version = "0.1" distro = "different_minor_version"以下に例を示します。
name = "tmux" description = "tmux image with openssh" version = "1.2.16" distro = "rhel-9.5"
別のマイナーバージョンをビルドするには、"different_minor_version" を置き換えます。たとえば、RHEL 8.10 イメージをビルドする場合は、distro = "rhel-810" を使用します。RHEL 8.10 イメージでは、RHEL 8.9 以前のリリースなどのマイナーバージョンをビルドできます。
9.3.8.2. パッケージグループの選択 リンクのコピーリンクがクリップボードにコピーされました!
パッケージグループを使用してブループリントをカスタマイズします。イメージにインストールするパッケージのグループを、groups リストに記述します。パッケージグループはリポジトリーのメタデータで定義されます。各グループには、主にユーザーインターフェイスでの表示に使用されるわかりやすい名前と、キックスタートファイルでよく使用される ID があります。この場合、ID を使用してグループをリストする必要があります。グループでは、必須、デフォルト、任意の 3 つの方法でパッケージを分類できます。ブループリントには、必須パッケージとデフォルトパッケージのみがインストールされます。任意のパッケージを選択することはできません。
name 属性は、必須の文字列であり、リポジトリー内のパッケージグループ ID と正確に一致する必要があります。
現在、osbuild-composer のパッケージとモジュールの間に違いはありません。どちらも RPM パッケージの依存関係として扱われます。
パッケージを使用してブループリントをカスタマイズします。
[[groups]] name = "group_name"group_nameは、グループの名前に置き換えます。たとえば、anaconda-toolsです。[[groups]] name = "anaconda-tools"
9.3.8.3. コンテナーの埋め込み リンクのコピーリンクがクリップボードにコピーされました!
ブループリントをカスタマイズして、最新の RHEL コンテナーを埋め込むことができます。ソースを含むオブジェクトと、必要に応じて tls-verify 属性をコンテナーリストに含めます。
イメージに埋め込むコンテナーイメージを、コンテナーリストのエントリーに記述します。
-
source- 必須フィールド。これは、レジストリーにあるコンテナーイメージへの参照です。この例では、registry.access.redhat.comレジストリーを使用します。タグのバージョンを指定できます。デフォルトのタグバージョンは latest です。 -
name- ローカルレジストリー内のコンテナーの名前。 -
tls-verify- ブールフィールド。tls-verify ブールフィールドは、Transport Layer Security を制御します。デフォルト値は true です。
埋め込まれたコンテナーは自動的に起動しません。これを起動するには、systemd ユニットファイルまたは quadlets を作成し、ファイルをカスタマイズします。
registry.access.redhat.com/ubi9/ubi:latestのコンテナーとホストのコンテナーを埋め込むには、ブループリントに次のカスタマイズを追加します。[[containers]] source = "registry.access.redhat.com/ubi9/ubi:latest" name = "local-name" tls-verify = true [[containers]] source = "localhost/test:latest" local-storage = true
containers-auth.json ファイルを使用して、保護されたコンテナーリソースにアクセスできます。コンテナーレジストリーの認証情報 を参照してください。
9.3.8.4. イメージのホスト名の設定 リンクのコピーリンクがクリップボードにコピーされました!
customizations.hostname は、最終イメージのホスト名を設定するために使用できるオプションの文字列です。このカスタマイズはオプションであり、設定しない場合、ブループリントはデフォルトのホスト名を使用します。
ブループリントをカスタマイズしてホスト名を設定します。
[customizations] hostname = "baseimage"
9.3.8.5. 追加ユーザーの指定 リンクのコピーリンクがクリップボードにコピーされました!
ユーザーをイメージに追加し、必要に応じて SSH キーを設定します。このセクションのフィールドは、name を除いてすべてオプションです。
手順
ブループリントをカスタマイズして、イメージにユーザーを追加します。
[[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[[customizations.user]] name = "admin" description = "Administrator account" password = "$6$CHO2$3rN8eviE2t50lmVyBYihTgVRHcaecmeCk31L..." key = "PUBLIC SSH KEY" home = "/srv/widget/" shell = "/usr/bin/bash" groups = ["widget", "users", "wheel"] uid = 1200 gid = 1200 expiredate = 12345GID はオプションであり、イメージにすでに存在している必要があります。GID は、必要に応じて、パッケージによって作成されるか、ブループリントによって
[[customizations.group]]エントリーを使用して作成されます。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())'その他のプレースホルダーを、適切な値に置き換えます。
nameの値を入力し、不要な行は省略します。追加するすべてのユーザーにこのブロックを繰り返します。
9.3.8.6. 追加グループの指定 リンクのコピーリンクがクリップボードにコピーされました!
作成されるシステムイメージのグループを指定します。name 属性と gid 属性は両方とも必須です。
グループを使用してブループリントをカスタマイズします。
[[customizations.group]] name = "GROUP-NAME" gid = NUMBER追加するすべてのグループにこのブロックを繰り返します。以下に例を示します。
[[customizations.group]] name = "widget" gid = 1130
9.3.8.7. 既存ユーザーの SSH キーの設定 リンクのコピーリンクがクリップボードにコピーされました!
customizations.sshkey を使用して、最終イメージ内の既存ユーザーの SSH キーを設定できます。user 属性と key 属性は両方とも必須です。
既存ユーザーの SSH キーを設定してブループリントをカスタマイズします。
[[customizations.sshkey]] user = "root" key = "PUBLIC-SSH-KEY"以下に例を示します。
[[customizations.sshkey]] user = "root" key = "SSH key for root"注記既存ユーザーに対してのみ、
customizations.sshkeyカスタマイズを設定できます。ユーザーを作成して SSH キーを設定するには、追加ユーザーの指定 のカスタマイズを参照してください。
9.3.8.8. カーネル引数の追加 リンクのコピーリンクがクリップボードにコピーされました!
ブートローダーのカーネルコマンドラインに引数を追加できます。デフォルトでは、RHEL Image Builder はデフォルトのカーネルをイメージにビルドします。ただし、ブループリントでカーネルを設定することでカーネルをカスタマイズできます。
デフォルト設定にカーネルの起動パラメーターオプションを追加します。
[customizations.kernel] append = "KERNEL-OPTION"以下に例を示します。
[customizations.kernel] name = "kernel-debug" append = "nosmt=force"
9.3.8.9. リアルタイムカーネルを使用した RHEL イメージのビルド リンクのコピーリンクがクリップボードにコピーされました!
リアルタイムカーネル (kernel-rt) を使用して RHEL イメージをビルドするには、デフォルトカーネルとして kernel-rt が正しく選択されたイメージをビルドできるように、リポジトリーをオーバーライドする必要があります。/usr/share/osbuild-composer/repositories/ ディレクトリーの .json を使用してください。その後、ビルドしたイメージをシステムにデプロイし、リアルタイムカーネル機能を使用できます。
リアルタイムカーネルは、Red Hat Enterprise Linux の動作認定を受けた AMD64 および Intel 64 サーバープラットフォームで動作します。
前提条件
- システムが登録され、RHEL が RHEL for Real Time サブスクリプションに割り当てられている。dnf を使用した RHEL for Real Time のインストール を参照してください。
手順
以下のディレクトリーを作成します。
# mkdir /etc/osbuild-composer/repositories//usr/share/osbuild-composer/repositories/rhel-8.version.jsonファイルの内容を新しいディレクトリーにコピーします。# cp /usr/share/osbuild-composer/repositories/rhel-8.version.json /etc/osbuild-composer/repositories/etc/osbuild-composer/repositories/rhel-8.version.jsonファイルを編集して、RT カーネルリポジトリーを含めます。# grep -C 6 kernel-rt /etc/osbuild-composer/repositories/rhel-8.version.json "baseurl": "https://cdn.redhat.com/content/dist/rhel8/8.version/x86_64/appstream/os", "gpgkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nm………..=\n=UZd/\n-----END PGP PUBLIC KEY BLOCK-----\n", "rhsm": true, "check_gpg": true }, { "name": "kernel-rt", "baseurl": "https://cdn.redhat.com/content/dist/rhel8/8.version/x86_64/rt/os", "gpgkey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBEr………fg==\n=UZd/\n-----END PGP PUBLIC KEY BLOCK-----\n", "rhsm": true, "check_gpg": true },サービスを再起動します。
# systemctl restart osbuild-composerkernel-rtが.jsonファイルに含まれていることを確認します。# composer-cli sources list # composer-cli sources info kernel-rt以前に設定した URL が表示されます。
ブループリントを作成します。ブループリントに、"[customizations.kernel]" カスタマイズを追加します。以下は、ブループリントに "[customizations.kernel]" を追加した例です。
name = "rt-kernel-image" description = "" version = "2.0.0" modules = [] groups = [] distro = "rhel-8_version_" [[customizations.user]] name = "admin" password = "admin" groups = ["users", "wheel"] [customizations.kernel] name = "kernel-rt" append = ""ブループリントをサーバーにプッシュします。
# composer-cli blueprints push rt-kernel-image.toml作成したブループリントからイメージをビルドします。次の例では、(
.qcow2) イメージをビルドします。# composer-cli compose start rt-kernel-image qcow2- ビルドしたイメージを、リアルタイムカーネル機能を使用するシステムにデプロイします。
検証
イメージから仮想マシンを起動した後、デフォルトのカーネルとして
kernel-rtが正しく選択されたイメージがビルドされていることを確認します。$ cat /proc/cmdline BOOT_IMAGE=(hd0,got3)/vmlinuz-5.14.0-362.24.1..el8_version_.x86_64+rt...
9.3.8.10. タイムゾーンと NTP の設定 リンクのコピーリンクがクリップボードにコピーされました!
ブループリントをカスタマイズして、タイムゾーンと Network Time Protocol (NTP) を設定できます。timezone 属性と ntpservers 属性は両方ともオプションの文字列です。タイムゾーンをカスタマイズしない場合、システムは 協定世界時 (UTC) を使用します。NTP サーバーを設定しない場合、システムはデフォルトのディストリビューションを使用します。
必要な
timezoneとntpserversを使用してブループリントをカスタマイズします。[customizations.timezone] timezone = "TIMEZONE" ntpservers = "NTP_SERVER"以下に例を示します。
[customizations.timezone] timezone = "US/Eastern" ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"]注記Google Cloud などの一部のイメージタイプには、すでに NTP サーバーがセットアップされています。そのようなイメージでは、選択されている環境で NTP サーバーを起動する必要があるため、これをオーバーライドすることはできません。ただし、ブループリントでタイムゾーンをカスタマイズできます。
9.3.8.11. ロケール設定のカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
作成されるシステムイメージのロケール設定をカスタマイズできます。language 属性と keyboard 属性は両方とも必須です。他の多くの言語を追加できます。最初に追加する言語はプライマリー言語で、他の言語はセカンダリー言語です。
手順
ロケール設定を行います。
[customizations.locale] languages = ["LANGUAGE"] keyboard = "KEYBOARD"以下に例を示します。
[customizations.locale] languages = ["en_US.UTF-8"] keyboard = "us"言語でサポートされている値を一覧表示するには、以下のコマンドを実行します。
$ localectl list-localesキーボードでサポートされている値を一覧表示するには、以下のコマンドを実行します。
$ localectl list-keymaps
9.3.8.12. ファイアウォールのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
生成されたシステムイメージのファイアウォールを設定します。デフォルトでは、ファイアウォールは、sshd など、ポートを明示的に有効にするサービスを除き、着信接続をブロックします。
[customizations.firewall] または [customizations.firewall.services] を使用したくない場合は、属性を削除するか、空のリスト [] に設定します。デフォルトのファイアウォールセットアップのみを使用する場合は、ブループリントからカスタマイズを省略できます。
Google および OpenStack テンプレートは、環境のファイアウォールを明示的に無効にします。ブループリントを設定してこの動作をオーバーライドすることはできません。
手順
他のポートとサービスを開くには、次の設定を使用してブループリントをカスタマイズします。
[customizations.firewall] ports = ["PORTS"]ここで、
portsは、ポート、または開くポートとプロトコルの範囲を含む文字列のオプションのリストです。port:protocol形式を使用してポートを設定できます。portA-portB:protocol形式を使用してポート範囲を設定できます。以下に例を示します。[customizations.firewall] ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp", "30000-32767:tcp", "30000-32767:udp"]/etc/servicesの数値ポートまたはその名前を使用して、ポートリストを有効または無効にすることができます。customizations.firewall.serviceセクションで、どのファイアウォールサービスを有効または無効にするかを指定します。[customizations.firewall.services] enabled = ["SERVICES"] disabled = ["SERVICES"]利用可能なファイアウォールサービスを確認できます。
$ firewall-cmd --get-services以下に例を示します。
[customizations.firewall.services] enabled = ["ftp", "ntp", "dhcp"] disabled = ["telnet"]注記firewall.servicesにリストされているサービスは、/etc/servicesファイルで使用可能なservice-namesとは異なります。
9.3.8.13. サービスの有効化または無効化 リンクのコピーリンクがクリップボードにコピーされました!
システムの起動時に有効にするサービスを制御することができます。一部のイメージタイプでは、イメージが正しく機能するようにすでにサービスが有効または無効になっており、このセットアップをオーバーライドすることができません。ブループリントの [customizations.services] 設定はこれらのサービスを置き換えるものではありませんが、イメージテンプレートにすでに存在するサービスのリストにサービスを追加します。
起動時に有効にするサービスをカスタマイズします。
[customizations.services] enabled = ["SERVICES"] disabled = ["SERVICES"]以下に例を示します。
[customizations.services] enabled = ["sshd", "cockpit.socket", "httpd"] disabled = ["postfix", "telnetd"]
9.3.8.14. キックスタートファイルへの ISO イメージの注入 リンクのコピーリンクがクリップボードにコピーされました!
[customization.installer] ブループリントのカスタマイズを使用すると、イメージインストーラー や エッジインストーラー などの ISO インストーラーのビルドに独自のキックスタートファイルを追加して、ベアメタルデプロイメント用の ISO イメージを構築する際の柔軟性を高めることができます。
キックスタートはシステム上の最初のディスクを自動的に再フォーマットするように設定されています。そのため、既存のオペレーティングシステムまたはデータを有するマシンで ISO を起動すると、破壊的な結果を招く可能性があります。
次の中から、独自のキックスタートファイルを追加する方法を選択できます。
- インストールプロセス中にすべての値を設定する。
-
キックスタートで
unattended = trueフィールドを有効にし、デフォルト設定を使用した完全に無人のインストールを実行する。 - キックスタートフィールドを使用して独自のキックスタートを注入する。これにより、すべての必須フィールドを指定した場合に完全に無人のインストールが実行されるか、またはインストーラーが欠落している可能性のあるいくつかのフィールドの入力を要求することになります。
Anaconda インストーラーの ISO イメージタイプでは、次のブループリントのカスタマイズがサポートされています。
[customizations.installer]
unattended = true
sudo-nopasswd = ["user", "%wheel"]
無人:インストールを完全に自動化するキックスタートファイルを作成します。これには、デフォルトで次のオプションの設定が含まれます。
- テキスト表示モード
- en_US.UTF-8 言語/ロケール
- US キーボードレイアウト
- UTC タイムゾーン
- zerombr、clearpart、autopart による最初のディスクの自動的なワイプおよびパーティション設定
- DHCP と自動アクティブ化を有効にするネットワークオプション
以下に例を示します。
liveimg --url file:///run/install/<_repo_>/liveimg.tar.gz
lang en_US.UTF-8
keyboard us
timezone UTC
zerombr
clearpart --all --initlabel
text
autopart --type=plain --fstype=xfs --nohome
reboot --eject
network --device=link --bootproto=dhcp --onboot=on --activate
sudo-nopasswd:インストール後に /etc/sudoers.d にドロップインファイルを作成し、指定されたユーザーとグループがパスワードなしで sudo を実行できるようにするスニペットをキックスタートファイルに追加します。グループには % という接頭辞を付ける必要があります。たとえば、値を ["user", "%wheel"] に設定すると、次のようなキックスタートの %post セクションが作成されます。
%post
echo -e "user\tALL=(ALL)\tNOPASSWD: ALL" > "/etc/sudoers.d/user"
chmod 0440 /etc/sudoers.d/user
echo -e "%wheel\tALL=(ALL)\tNOPASSWD: ALL" > "/etc/sudoers.d/%wheel"
chmod 0440 /etc/sudoers.d/%wheel
restorecon -rvF /etc/sudoers.d
%end
インストーラーキックスタート
または、次のカスタマイズを使用して、カスタムのキックスタートを含めることもできます。
[customizations.installer.kickstart]
contents = """
text --non-interactive
zerombr
clearpart --all --initlabel --disklabel=gpt
autopart --noswap --type=lvm
network --bootproto=dhcp --device=link --activate --onboot=on
"""
osbuild-composer を使用すると、image-installer または edge-installer イメージタイプに関連する場合に、システムをインストールするコマンド liveimg または ostreesetup が自動的に追加されます。[customizations.installer.kickstart] によるカスタマイズを、他のインストーラーカスタマイズと組み合わせて使用することはできません。
9.3.8.15. パーティションモードの指定 リンクのコピーリンクがクリップボードにコピーされました!
ビルドするディスクイメージをパーティション設定する方法を選択するには、partitioning_mode 変数を使用します。サポートされている次のモードでイメージをカスタマイズできます。
-
auto-lvm: 1 つ以上のファイルシステムのカスタマイズがない限り、RAW パーティションモードを使用します。ある場合は、LVM パーティションモードを使用します。 -
lvm: 追加のマウントポイントがない場合でも、常に LVM パーティションモードを使用します。 -
raw: マウントポイントが 1 つ以上ある場合でも、RAW パーティションを使用します。 次のカスタマイズを使用して、
partitioning_mode変数を使用してブループリントをカスタマイズできます。[customizations] partitioning_mode = "lvm"
9.3.8.16. カスタムファイルシステム設定の指定 リンクのコピーリンクがクリップボードにコピーされました!
ブループリントでカスタムファイルシステム設定を指定できるため、デフォルトのレイアウト設定ではなく、特定のディスクレイアウトでイメージを作成できます。ブループリントでデフォルト以外のレイアウト設定を使用すると、次の利点が得られます。
- セキュリティーベンチマークへの準拠
- ディスク外エラーに対する保護
- パフォーマンスの向上
- 既存のセットアップとの整合性
OSTree イメージには読み取り専用などの独自のマウントルールがあるため、OSTree システムではファイルシステムのカスタマイズはサポートされません。次のイメージタイプはサポートされません。
-
image-installer -
edge-installer -
edge-simplified-installer
さらに、次のイメージタイプはパーティション設定されたオペレーティングシステムイメージを作成しないため、ファイルシステムのカスタマイズをサポートしません。
-
edge-commit -
edge-container -
tar -
container
ただし、次のイメージタイプではファイルシステムのカスタマイズがサポートされています。
-
simplified-installer -
edge-raw-image -
edge-ami -
edge-vsphere
OSTree システムの一部例外を除き、ファイルシステムの /root レベルで任意のディレクトリー名を選択できます (例: `/local`、`/mypartition`、/$PARTITION)。論理ボリュームでは、これらの変更は LVM パーティションシステム上で行われます。別の論理ボリューム上の /var、`/var/log`、および /var/lib/containers ディレクトリーがサポートされています。root レベルでの例外は次のとおりです。
- "/home": {Deny: true},
- "/mnt": {Deny: true},
- "/opt": {Deny: true},
- "/ostree": {Deny: true},
- "/root": {Deny: true},
- "/srv": {Deny: true},
- "/var/home": {Deny: true},
- "/var/mnt": {Deny: true},
- "/var/opt": {Deny: true},
- "/var/roothome": {Deny: true},
- "/var/srv": {Deny: true},
- "/var/usrlocal": {Deny: true},
RHEL 8.10 および 9.5 より前のリリースディストリビューションの場合、ブループリントは次の mountpoints とそのサブディレクトリーをサポートしています。
-
/- ルートマウントポイント -
/var -
/home -
/opt -
/srv/ -
/usr -
/app -
/data -
/tmp
RHEL 9.5 および 8.10 以降のリリースディストリビューションでは、オペレーティングシステム用に予約されている特定のパスを除き、任意のカスタムマウントポイントを指定できます。
次のマウントポイントとそのサブディレクトリーに任意のカスタムマウントポイントを指定することはできません。
-
/bin -
/boot/efi -
/dev -
/etc -
/lib -
/lib64 -
/lost+found -
/proc -
/run -
/sbin -
/sys -
/sysroot -
/var/lock -
/var/run
ブループリントで /usr カスタムマウントポイントのファイルシステムはカスタマイズできますが、そのサブディレクトリーはカスタマイズできません。
マウントポイントのカスタマイズは、RHEL 8.5 ディストリビューション以降、CLI を使用した場合のみサポートされます。以前のディストリビューションでは、root パーティションをマウントポイントとして指定し、size 引数をイメージ size のエイリアスとして指定することしかできません。RHEL 8.6 以降、osbuild-composer-46.1-1.el8 RPM 以降のバージョンでは、物理パーティションは使用できなくなり、ファイルシステムのカスタマイズによって論理ボリュームが作成されます。
カスタマイズされたイメージに複数のパーティションがある場合、LVM でカスタマイズされたファイルシステムパーティションを使用してイメージを作成し、実行時にそれらのパーティションのサイズを変更できます。これを行うには、ブループリントでカスタマイズされたファイルシステム設定を指定して、必要なディスクレイアウトでイメージを作成します。デフォルトのファイルシステムレイアウトは変更されません。ファイルシステムをカスタマイズせずにプレーンイメージを使用すると、cloud-init によってルートパーティションのサイズが変更されます。
ブループリントは、ファイルシステムのカスタマイズを LVM パーティションに自動的に変換します。
カスタムファイルブループリントのカスタマイズを使用して、新しいファイルを作成したり、既存のファイルを置き換えたりできます。指定するファイルの親ディレクトリーが存在している必要があります。存在しない場合、イメージのビルドが失敗します。[[customizations.directories]] のカスタマイズで親ディレクトリーを指定して、親ディレクトリーが存在することを確認してください。
ファイルのカスタマイズを他のブループリントのカスタマイズと組み合わせると、他のカスタマイズの機能に影響が生じたり、現在のファイルのカスタマイズがオーバーライドされる可能性があります。
9.3.8.16.1. カスタマイズされたファイルをブループリントで指定する リンクのコピーリンクがクリップボードにコピーされました!
[[customizations.files]] ブループリントのカスタマイズを使用すると、次のことが可能になります。
- 新しいテキストファイルを作成する。
- 既存のファイルを変更する。警告: これにより、既存のコンテンツが上書きされる可能性があります。
- 作成するファイルのユーザーとグループの所有権を設定する。
- モード許可を 8 進数形式で設定する。
以下のファイルは作成または置き換えることはできません。
-
/etc/fstab -
/etc/shadow -
/etc/passwd -
/etc/group
[[customizations.files]] および [[customizations.directories]] ブループリントのカスタマイズを使用して、イメージ内にカスタマイズされたファイルとディレクトリーを作成できます。これらのカスタマイズは、/etc ディレクトリーでのみ使用できます。
これらのブループリントのカスタマイズは、OSTree コミットをデプロイするイメージタイプ (edge-raw-image、edge-installer、edge-simplified-installer など) を除く、すべてのイメージタイプでサポートされます。
mode、user、または group がすでに設定されているイメージ内にすでに存在するディレクトリーパスで customizations.directories を使用すると、イメージビルドで既存のディレクトリーの所有権または権限の変更を防ぐことができません。
9.3.8.16.2. カスタマイズされたディレクトリーをブループリントで指定する リンクのコピーリンクがクリップボードにコピーされました!
[[customizations.directories]] ブループリントのカスタマイズを使用すると、以下を行うことができます。
- 新しいディレクトリーを作成する。
- 作成するディレクトリーのユーザーとグループの所有権を設定する。
- ディレクトリーモードのパーミッションを 8 進数形式で設定する。
- 必要に応じて親ディレクトリーを作成する。
[[customizations.files]] ブループリントのカスタマイズを使用すると、次のことが可能になります。
- 新しいテキストファイルを作成する。
- 既存のファイルを変更する。警告: これにより、既存のコンテンツが上書きされる可能性があります。
- 作成するファイルのユーザーとグループの所有権を設定する。
- モード許可を 8 進数形式で設定する。
以下のファイルは作成または置き換えることはできません。
-
/etc/fstab -
/etc/shadow -
/etc/passwd -
/etc/group
以下のカスタマイズが可能です。
ブループリントのファイルシステム設定をカスタマイズします。
[[customizations.filesystem]] mountpoint = "MOUNTPOINT" minsize = MINIMUM-PARTITION-SIZEMINIMUM-PARTITION-SIZE値には、デフォルトのサイズ形式はありません。ブループリントのカスタマイズでは、kB から TB、および KiB から TiB の値と単位がサポートされています。たとえば、マウントポイントのサイズをバイト単位で定義できます。[[customizations.filesystem]] mountpoint = "/var" minsize = 1073741824単位を使用してマウントポイントのサイズを定義します。以下に例を示します。
[[customizations.filesystem]] mountpoint = "/opt" minsize = "20 GiB"[[customizations.filesystem]] mountpoint = "/boot" minsize = "1 GiB"minsizeを設定して最小パーティションを定義します。以下に例を示します。[[customizations.filesystem]] mountpoint = "/var" minsize = 2147483648[[customizations.directories]]を使用して、イメージ用にカスタマイズされたディレクトリーを/etcディレクトリーの下に作成します。[[customizations.directories]] path = "/etc/directory_name" mode = "octal_access_permission" user = "user_string_or_integer" group = "group_string_or_integer" ensure_parents = booleanブループリントの各エントリーを説明します。
-
path- 必須 - 作成するディレクトリーへのパスを入力します。/etcディレクトリー下の絶対パスである必要があります。 -
mode- オプション - ディレクトリーのアクセスパーミッションを 8 進数形式で設定します。パーミッションを指定しない場合、デフォルトで 0755 に設定されます。先頭のゼロは任意です。 -
user- オプション - ユーザーをディレクトリーの所有者として設定します。ユーザーを指定しない場合は、デフォルトでrootに設定されます。ユーザーは文字列または整数として指定できます。 -
group- オプション - グループをディレクトリーの所有者として設定します。グループを指定しない場合は、デフォルトでrootになります。グループは文字列または整数として指定できます。 -
ensure_parents- オプション - 必要に応じて親ディレクトリーを作成するかどうかを指定します。値を指定しない場合は、デフォルトでfalseに設定されます。
-
[[customizations.directories]]を使用して、イメージ用にカスタマイズされたファイルを/etcディレクトリーの下に作成します。[[customizations.files]] path = "/etc/directory_name" mode = "octal_access_permission" user = "user_string_or_integer" group = "group_string_or_integer" data = "Hello world!"ブループリントの各エントリーを説明します。
-
path- 必須 - 作成するファイルへのパスを入力します。/etcディレクトリー下の絶対パスである必要があります。 -
mode- オプション - ファイルのアクセスパーミッションを 8 進数形式で設定します。パーミッションを指定しない場合、デフォルトで 0644 に設定されます。先頭のゼロは任意です。 -
user- オプション - ユーザーをファイルの所有者として設定します。ユーザーを指定しない場合は、デフォルトでrootに設定されます。ユーザーは文字列または整数として指定できます。 -
group- オプション - グループをファイルの所有者として設定します。グループを指定しない場合は、デフォルトでrootになります。グループは文字列または整数として指定できます。 -
data- オプション - プレーンテキストファイルの内容を指定します。コンテンツを指定しない場合は、空のファイルが作成されます。
-
9.3.8.17. ブループリントでボリュームグループと論理ボリュームの命名を指定する リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder は次の操作に使用できます。
-
高度なパーティションレイアウトを使用して RHEL ディスクイメージを作成します。カスタムのマウントポイント、LVM ベースのパーティション、LVM ベースの SWAP を使用してディスクイメージを作成できます。たとえば、
config.tomlファイルを使用して、/および/bootディレクトリーのサイズを変更できます。 -
使用するファイルシステムを選択します。
ext4とxfsのどちらかを選択できます。 - スワップパーティションと LV を追加します。ディスクイメージに LV ベースの SWAP を含めることができます。
- LVM エンティティーの名前を変更します。イメージ内の論理ボリューム (LV) とボリュームグループ (VG) にカスタム名を付けることができます。
次のオプションはサポートされていません。
- 1 つのイメージに複数の PV または VG を含める
- SWAP ファイル
-
/dev/shmや/tmpなどの非物理パーティションのマウントオプション
たとえば、以下のようになります。ファイルシステムが存在する VG および LG カスタマイズ名を追加します。
[[customizations.disk.partitions]]
type = "plain"
label = "data"
mountpoint = "/data"
fs_type = "ext4"
minsize = "50 GiB"
[[customizations.disk.partitions]]
type = "lvm"
name = "mainvg"
minsize = "20 GiB"
[[customizations.disk.partitions.logical_volumes]]
name = "rootlv"
mountpoint = "/"
label = "root"
fs_type = "ext4"
minsize = "2 GiB"
[[customizations.disk.partitions.logical_volumes]]
name = "homelv"
mountpoint = "/home"
label = "home"
fs_type = "ext4"
minsize = "2 GiB"
[[customizations.disk.partitions.logical_volumes]]
name = "swaplv"
fs_type = "swap"
minsize = "1 GiB"
9.3.9. RHEL Image Builder によってインストールされるパッケージ リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder を使用してシステムイメージを作成すると、システムは一連のベースパッケージグループをインストールします。
ブループリントにコンポーネントを追加する場合は、追加したコンポーネント内のパッケージが他のパッケージコンポーネントと競合しないようにしてください。そうしないと、システムは依存関係を解決できず、カスタマイズされたイメージの作成に失敗します。次のコマンドを実行して、パッケージ間に競合がないかどうかを確認できます。
# composer-cli blueprints depsolve BLUEPRINT-NAME
デフォルトでは、RHEL Image Builder は Core グループをパッケージの基本リストとして使用します。
| イメージタイプ | デフォルトパッケージ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9.3.10. カスタムイメージで有効なサービス リンクのコピーリンクがクリップボードにコピーされました!
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 |
注記:システムの起動時に有効にするサービスをカスタマイズできます。ただし、カスタマイズは、前述のイメージタイプに対してデフォルトで有効になっているサービスを上書きしません。