5.3. サポートされているイメージのカスタマイズ

ブループリントに次のようなカスタマイズを追加することで、イメージをカスタマイズできます。

  • RPM パッケージの追加
  • サービスの有効化
  • カーネルコマンドラインパラメーターのカスタマイズ

とりわけ、ブループリント内ではいくつかのイメージのカスタマイズを使用できます。カスタマイズを使用すると、デフォルトのパッケージでは使用できないパッケージやグループをイメージに追加できます。これらのオプションを使用するには、ブループリントでカスタマイズを設定し、それを RHEL Image Builder にインポート (プッシュ) します。

5.3.1. ディストリビューションの選択

distro フィールドを使用して、イメージの作成時またはブループリントの depsolve 時に使用するディストリビューションを選択できます。ディストリビューションを指定しない場合、ホストディストリビューションが使用されます。ディストリビューションを指定しない場合、ブループリントはホストディストリビューションを使用します。ホストオペレーティングシステムをアップグレードする場合、ディストリビューションが設定されていないブループリントでは、新しいオペレーティングシステムのバージョンを使用してイメージがビルドされます。RHEL Image Builder ホストとは異なるオペレーティングシステムイメージをビルドすることはできません。

手順

  • 指定の RHEL イメージを常にビルドするように、ディストリビューションを使用してブループリントをカスタマイズします。

    name = "blueprint_name"
    description = "blueprint_version"
    version = "0.1"
    distro = "different_minor_version"

別のマイナーバージョンをビルドするには、"different_minor_version" を置き換えます。たとえば、RHEL 9.3 イメージをビルドする場合は、distro = "rhel-93" を使用します。RHEL 9.3 イメージでは、RHEL 9.2、RHEL 8.9、およびそれ以前のリリースなどのマイナーバージョンをビルドできます。

5.3.2. パッケージグループの選択

パッケージとモジュールを使用してブループリントをカスタマイズします。name 属性は必須の文字列です。version 属性はオプションの文字列で、指定しない場合はリポジトリー内の最新バージョンが使用されます。

注記

現在、osbuild-composer のパッケージとモジュールの間に違いはありません。どちらも RPM パッケージの依存関係として扱われます。

手順

  • パッケージを使用してブループリントをカスタマイズします。

    [[packages]]
    name = "package_group_name"

    "package_group_name" は、パッケージグループの名前に置き換えます。たとえば、"tmux" とします。

    [[packages]]
    name = "tmux"
    version = "2.9a"

5.3.3. イメージのホスト名の設定

customizations.hostname は、最終イメージのホスト名を設定するために使用できるオプションの文字列です。このカスタマイズはオプションであり、設定しない場合、ブループリントはデフォルトのホスト名を使用します。

手順

  • ブループリントをカスタマイズしてホスト名を設定します。

    [customizations]
    hostname = "baseimage"

5.3.4. 追加ユーザーの指定

ユーザーをイメージに追加し、必要に応じて 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

    GID はオプションであり、イメージにすでに存在している必要があります。必要に応じて、パッケージで作成するか、ブループリントで customizations.group エントリーを使用して GID を作成します。

    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 の値を入力し、不要な行は省略します。

    追加するすべてのユーザーにこのブロックを繰り返します。

5.3.5. 追加グループの指定

作成されるシステムイメージのグループを指定します。name 属性と gid 属性は両方とも必須です。

手順

  • グループを使用してブループリントをカスタマイズします。

    [[customizations.group]]
    name = "GROUP-NAME"
    gid = NUMBER

    追加するすべてのグループにこのブロックを繰り返します。

5.3.6. 既存ユーザーの SSH キーの設定

customizations.sshkey を使用して、最終イメージ内の既存ユーザーの SSH キーを設定できます。user 属性と key 属性は両方とも必須です。

手順

  • 既存ユーザーの SSH キーを設定してブループリントをカスタマイズします。
[[customizations.sshkey]]
user = "root"
key = "PUBLIC-SSH-KEY"
注記

既存ユーザーに対してのみ、customizations.sshkey カスタマイズを設定できます。ユーザーの作成と SSH キーの設定は、システムイメージのカスタマイズに関するユーザー仕様 を参照してください。

5.3.7. カーネル引数の追加

ブートローダーのカーネルコマンドラインに引数を追加できます。デフォルトでは、RHEL Image Builder はデフォルトのカーネルをイメージにビルドします。ただし、ブループリントでカーネルを設定することでカーネルをカスタマイズできます。

手順

  • デフォルト設定にカーネルの起動パラメーターオプションを追加します。

    [customizations.kernel]
    append = "KERNEL-OPTION"
  • イメージで使用するカーネル名を定義

    [customizations.kernel]
    name = "KERNEL-rt"

5.3.8. タイムゾーンと NTP の設定

ブループリントをカスタマイズして、タイムゾーンと Network Time Protocol (NTP) を設定できます。timezone 属性と ntpservers 属性は両方ともオプションの文字列です。タイムゾーンをカスタマイズしない場合、システムは 協定世界時 (UTC) を使用します。NTP サーバーを設定しない場合、システムはデフォルトのディストリビューションを使用します。

手順

  • 必要な timezonentpservers を使用してブループリントをカスタマイズします。

    [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 サーバーを起動する必要があるため、これをオーバーライドすることはできません。ただし、ブループリントでタイムゾーンをカスタマイズできます。

5.3.9. ロケール設定のカスタマイズ

作成されるシステムイメージのロケール設定をカスタマイズできます。language 属性と keyboard 属性は両方とも必須です。他の多くの言語を追加できます。最初に追加する言語はプライマリー言語で、他の言語はセカンダリー言語です。

手順

  • ロケール設定を行います。
[customizations.locale]
languages = ["LANGUAGE"]
keyboard = "KEYBOARD"

以下に例を示します。

[customizations.locale]
languages = ["en_US.UTF-8"]
keyboard = "us"
  • 言語でサポートされている値を一覧表示するには、以下のコマンドを実行します。

    $ localectl list-locales
  • キーボードでサポートされている値を一覧表示するには、以下のコマンドを実行します。

    $ localectl list-keymaps

5.3.10. ファイアウォールのカスタマイズ

生成されたシステムイメージのファイアウォールを設定します。デフォルトでは、ファイアウォールは、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 とは異なります。

5.3.11. サービスの有効化または無効化

システムの起動時に有効にするサービスを制御することができます。一部のイメージタイプでは、イメージが正しく機能するようにすでにサービスが有効または無効になっており、このセットアップをオーバーライドすることができません。ブループリントの [customizations.services] 設定はこれらのサービスを置き換えるものではありませんが、イメージテンプレートにすでに存在するサービスのリストにサービスを追加します。

手順

  • 起動時に有効にするサービスをカスタマイズします。

    [customizations.services]
    enabled = ["SERVICES"]
    disabled = ["SERVICES"]

    以下に例を示します。

    [customizations.services]
    enabled = ["sshd", "cockpit.socket", "httpd"]
    disabled = ["postfix", "telnetd"]

5.3.12. カスタムファイルシステム設定の指定

ブループリントでカスタムファイルシステム設定を指定できるため、デフォルトのレイアウト設定ではなく、特定のディスクレイアウトでイメージを作成できます。ブループリントでデフォルト以外のレイアウト設定を使用すると、次の利点が得られます。

  • セキュリティーベンチマークへの準拠
  • ディスク外エラーに対する保護
  • パフォーマンスの向上
  • 既存のセットアップとの整合性
注記

OSTree イメージには、読み取り専用などの独自のマウントルールがあるため、ファイルシステムのカスタマイズは OSTree システムではサポートされません。

ブループリントは、次の mountpoints とそのサブディレクトリーをサポートしています。

  • / - ルートマウントポイント
  • /var
  • /home
  • /opt
  • /srv/
  • /usr
  • /app
  • /data
  • /boot - ブループリントは、RHEL 8.7 および RHEL 9.1 以降で /boot のカスタマイズをサポートしています。
注記

マウントポイントのカスタマイズは、RHEL 9.0 ディストリビューション以降、CLI を使用した場合のみサポートされます。以前のディストリビューションでは、root パーティションをマウントポイントとして指定し、size 引数をイメージ size のエイリアスとして指定することしかできません。

カスタマイズされたイメージに複数のパーティションがある場合、LVM でカスタマイズされたファイルシステムパーティションを使用してイメージを作成し、実行時にそれらのパーティションのサイズを変更できます。これを行うには、ブループリントでカスタマイズされたファイルシステム設定を指定して、必要なディスクレイアウトでイメージを作成します。デフォルトのファイルシステムレイアウトは変更されません。ファイルシステムをカスタマイズせずにプレーンイメージを使用すると、ルートパーティションは cloud-init によってサイズ変更されます。

ブループリントは、ファイルシステムのカスタマイズを LVM パーティションに自動的に変換します。

カスタムファイルブループリントのカスタマイズを使用して、新しいファイルを作成したり、既存のファイルを置き換えたりできます。指定するファイルの親ディレクトリーが存在している必要があります。存在しない場合、イメージのビルドが失敗します。[[customizations.directories]] のカスタマイズで親ディレクトリーを指定して、親ディレクトリーが存在することを確認してください。

警告

ファイルのカスタマイズを他のブループリントのカスタマイズと組み合わせると、他のカスタマイズの機能に影響が生じたり、現在のファイルのカスタマイズがオーバーライドされる可能性があります。

[[customizations.files]] ブループリントのカスタマイズを使用すると、次のことが可能になります。

  • 新しいテキストファイルを作成する。
  • 既存のファイルを変更する。警告: これにより、既存のコンテンツが上書きされる可能性があります。
  • 作成するファイルのユーザーとグループの所有権を設定する。
  • モード許可を 8 進数形式で設定する。

以下のファイルは作成または置き換えることはできません。

  • /etc/fstab
  • /etc/shadow
  • /etc/passwd
  • /etc/group

[[customizations.files]] および [[customizations.directories]] ブループリントのカスタマイズを使用して、イメージ内にカスタマイズされたファイルとディレクトリーを作成できます。これらのカスタマイズは、/etc ディレクトリーでのみ使用できます。

注記

これらのブループリントのカスタマイズは、OSTree コミットをデプロイするイメージタイプ (edge-raw-imageedge-installeredge-simplified-installer など) を除く、すべてのイメージタイプでサポートされます。

警告

modeuser、または group がすでに設定されているイメージ内にすでに存在するディレクトリーパスで customizations.directories を使用すると、イメージビルドで既存のディレクトリーの所有権または権限の変更を防ぐことができません。

[[customizations.directory]] ブループリントのカスタマイズを使用すると、以下を行うことができます。

  • 新しいディレクトリーを作成する。
  • 作成するディレクトリーのユーザーとグループの所有権を設定する。
  • ディレクトリーモードのパーミッションを 8 進数形式で設定する。
  • 必要に応じて親ディレクトリーを作成する。

[[customizations.files]] ブループリントのカスタマイズを使用すると、次のことが可能になります。

  • 新しいテキストファイルを作成する。
  • 既存のファイルを変更する。警告: これにより、既存のコンテンツが上書きされる可能性があります。
  • 作成するファイルのユーザーとグループの所有権を設定する。
  • モード許可を 8 進数形式で設定する。
注記

以下のファイルは作成または置き換えることはできません。

  • /etc/fstab
  • /etc/shadow
  • /etc/passwd
  • /etc/group

手順

  • ブループリントのファイルシステム設定をカスタマイズします。

    [[customizations.filesystem]]
    mountpoint = "MOUNTPOINT"
    size = MINIMUM-PARTITION-SIZE

    MINIMUM-PARTITION-SIZE 値には、デフォルトのサイズ形式はありません。ブループリントのカスタマイズでは、kB から TB、および KiB から TiB の値と単位がサポートされています。たとえば、マウントポイントのサイズをバイト単位で定義できます。

    [[customizations.filesystem]]
    mountpoint = "/var"
    size = 1073741824
  • 単位を使用してマウントポイントのサイズを定義します。以下に例を示します。

    [[customizations.filesystem]]
    mountpoint = "/opt"
    size = "20 GiB"
    [[customizations.filesystem]]
    mountpoint = "/boot"
    size = "1 GiB"
  • [[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 - オプション - プレーンテキストファイルの内容を指定します。コンテンツを指定しない場合は、空のファイルが作成されます。