Image Builder ガイド
Image Builder でのカスタムシステムイメージの作成
概要
第1章 Image Builder の説明
1.1. Image Builder の概要
composer-cli
ツールのコマンドラインインターフェイスで Image Builder 機能、または RHEL 7 Web コンソールでグラフィカルインターフェイスにアクセスできます。詳細はmanaging the web consoleを参照してください。
lorax-composer
として実行します。このサービスは、以下の 2 つのインターフェイスを介してこのサービスを利用できます。
- 端末でコマンドを実行する CLI ツールの
composer-cli
。この方法が推奨されています。 - RHEL 7 Web コンソールの GUI プラグイン。
1.2. Image Builder の用語
- Blueprint - Blueprint は、システムに追加されるパッケージおよびカスタマイズを一覧表示して、カスタマイズされたシステムのイメージを定義します。Blueprint は編集でき、バージョン管理が行われています。Blueprint からシステムイメージを作成すると、イメージは、RHEL 7 Web コンソールの Image Builder インターフェイスにある Blueprint に関連付けられます。Blueprint は、TOML (Tom's Obvious, Minimal Language) 形式の平文テキストとして表示されます。
- Compose - Compose は、特定の Blueprint の特定のバージョンに基づくシステムイメージの個々のビルドです。用語としての Compose は、システムイメージと、その作成、入力、メタデータ、およびそのプロセス自体のログを指します。
- カスタマイズ カスタマイズはシステムの仕様で、パッケージではありません。これには、ユーザーアカウント、グループ、カーネル、タイムゾーン、ロケール、ファイアウォール、および ssh キーが含まれます。
1.3. Image Builder の出力形式
表1.1 Image Builder の出力形式
説明 | CLI 名 | ファイル拡張子 |
---|---|---|
QEMU QCOW2 イメージ | qcow2 | .qcow2 |
Ext4 ファイルシステムイメージ | 80 | .qcow2 |
raw パーティション設定ディスクイメージ | partitioned-disk | .img |
ライブ起動可能 ISO | live-iso | .iso |
tar アーカイブ | tar | .tar |
Amazon Machine Image ディスクの作成 | ami | .ami |
VMware 仮想マシンディスク | vmdk | .vmdk |
Openstack | openstack | .qcow2 |
1.4. Image Builder のシステム要件
lorax
ツールは、システムイメージを作成している間に、潜在的にセキュリティーが保護されていないため、安全でない操作を多数実行します。このため、仮想マシンを使用して Image Builder を実行します。
表1.2 Image Builder のシステム要件
パラメーター | 最低要求値 |
---|---|
システムのタイプ | 専用の仮想マシン |
プロセッサー | 2 コア |
メモリー | 4 GiB |
ディスク容量 | 20 GiB |
アクセス権限 | 管理者レベル (root) |
ネットワーク | インターネットへの接続 |
第2章 Image Builder のインストール
2.1. 仮想マシンへの Image Builder のインストール
前提条件
- 仮想マシンに接続している。
- Image Builder 用の仮想マシンがインストールされ、サブスクライブされ、実行している。
手順
- lorax-composer
- composer-cli
- cockpit-composer
- bash-completion
# yum install lorax-composer composer-cli cockpit-composer bash-completion
# systemctl enable lorax-composer.socket
# systemctl enable cockpit.socket
lorax-composer
サービスおよび cockpit
サービスは、最初のアクセスで自動的に起動します。
# firewall-cmd --add-service=cockpit && firewall-cmd --add-service=cockpit --permanent
composer-cli
ツールのオートコンプリート機能が、システムを再起動しなくてもすぐに動作するように、シェル設定スクリプトを読み込みます。
$ source /etc/bash_completion.d/composer-cli
第3章 Image Builder コマンドラインインターフェイスでシステムイメージの作成
3.1. Image Builder コマンドラインインターフェイス
composer-cli
ツールに、適切なオプションとサブコマンドを付けて実行します。
composer-cli
ツールには、設定した Blueprint と Compose の状態を調べるサブコマンドが多数あります。
composer-cli
コマンドを実行するには、ユーザーが weldr
グループまたは root
グループに属している必要があります。
3.2. コマンドラインインターフェイスで Image Builder の Blueprint の作成
手順
name = "BLUEPRINT-NAME" description = "LONGER BLUEPRINT DESCRIPTION TEXT" version = "0.0.1"
BLUEPRINT-NAME
および LONGER BLUEPRINT DESCRIPTION
を、Blueprint の名前および説明に置き換えます。
0.0.1
をバージョン番号に置き換えます。
[[packages]]
name = "package-name
"
version = "package-version"
package-name
を、パッケージ名 (httpd、gdb-doc、coreutils など) に置き換えます。
package-version
を、使用するバージョンに置き換えます。このフィールドは、dnf
バージョンの指定に対応します。
- 特定のバージョンを指定する場合は、
7.30
のように、バージョン番号を正確に指定してください。 - 利用可能な最新バージョンを指定する場合は、アスタリスク (
*
) を使用します - 最新のマイナーバージョンを指定する場合の形式は、
7.*
のようになります。
[customizations.kernel] append = "nosmt=force"
BLUEPRINT-NAME.toml
として保存し、テキストエディターを閉じます。
# composer-cli blueprints push BLUEPRINT-NAME.toml
# composer-cli blueprints list
# composer-cli blueprints depsolve BLUEPRINT-NAME
3.3. コマンドラインインターフェイスで Image Builder の Blueprint の編集
手順
# composer-cli blueprints save BLUEPRINT-NAME
BLUEPRINT-NAME.toml
ファイルは、選択したテキストエディターで編集して変更を加えます。
- 次の行がある場合は削除します。
packages = []
- バージョン番号を大きくしてください。Image Builder の Blueprint バージョンは Semantic Versioning スキームを使用する必要があります。バージョンを変更しないと、バージョンの patch コンポーネントが自動的に増えます。
- コンテンツが有効な TOML 仕様かどうかを確認します。詳細は、TOML のドキュメント を参照してください。
# composer-cli blueprints push BLUEPRINT-NAME.toml
.toml
拡張子を含むファイル名を指定する必要がありますが、他のコマンドでは Blueprint の名前のみを使用することに注意してください。
# composer-cli blueprints show BLUEPRINT-NAME
# composer-cli blueprints depsolve BLUEPRINT-NAME
3.4. Image Builder コマンドラインインターフェイスでシステムイメージの作成
前提条件
- イメージに Blueprint を用意している。
手順
# composer-cli compose start BLUEPRINT-NAME IMAGE-TYPE
composer-cli compose types
コマンドの出力を参照してください。
# composer-cli compose status
# composer-cli compose image UUID
/var/lib/lorax/composer/results/UUID/
の配下にあるイメージファイルに直接アクセスできます。
composer-cli compose logs UUID
コマンドを使用してログをダウンロードし、composer-cli compose metadata UUID
コマンドを使用してメタデータをダウンロードすることもできます。
3.5. Image Builder コマンドラインの基本的なコマンド
Blueprint 操作
- 利用可能なブループリント一覧の表示
# 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
Blueprint でイメージの設定
- Compose の起動
# composer-cli compose start BLUEPRINT COMPOSE-TYPE
BLUEPRINT は、構築する Blueprint の名前に、COMPOSE-TYPE は、出力イメージタイプに置き換えます。- Compose の一覧表示
# composer-cli compose list
- 実行中の 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
関連情報
- man ページの
composer-cli(1)
は、利用可能なサブコマンドとオプションの完全リストを提供します。$ man composer-cli
composer-cli
ツールは、サブコマンドとオプションに関するヘルプを提供します。# composer-cli compose list
3.6. Image Builder の Blueprint 形式
- Blueprint のメタデータ
name = "BLUEPRINT-NAME" description = "LONGER BLUEPRINT DESCRIPTION" version = "VERSION" modules = [] groups = []
BLUEPRINT-NAME および LONG FORM DESCRIPTION TEXT は、Blueprint の名前および説明に置き換えます。
Semantic Versioning スキームに従い、VERSION をバージョン番号に置き換えます。
この部分は、Blueprint ファイル全体に対して一度だけ提示します。
modules エントリーは、パッケージ名と、イメージにインストールするバージョンと一致する glob を示し、group では、イメージにインストールされるパッケージのグループを記述します。これらの項目を追加しない場合、Blueprint はそれらを empyt リストとして識別します。
- イメージに含まれるパッケージ
[[packages]] name = "
package-name
" version = "package-version
"package-name
を、パッケージ名 (httpd、gdb-doc、coreutils など) に置き換えます。package-version
を、使用するバージョンに置き換えます。このフィールドは、dnf
バージョンの指定に対応します。- 特定のバージョンを指定する場合は、7.30 のように、バージョン番号を正確に指定してください。
- 利用可能な最新バージョンを指定する場合は、アスタリスク (*) を使用します。
- 最新のマイナーバージョンを指定する場合の形式は、7.* のようになります。
追加するすべてのパッケージにこのブロックを繰り返します。
3.7. サポートされているイメージのカスタマイズ
- イメージのホスト名の設定
[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
$ python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
python3
パッケージが必要です。パッケージをインストールするには、次のコマンドを使用します。
# yum install python3
- 作成されるシステムイメージに対するグループ指定
[[customizations.group]] name = "GROUP-NAME" gid = NUMBER
追加するすべてのグループにこのブロックを繰り返します。- 既存ユーザーの SSH キーの設定
[[customizations.sshkey]] user = "root" key = "PUBLIC-SSH-KEY"
- デフォルトにカーネルの起動パラメーターオプションを追加
[[customizations.kernel]] append = "KERNEL-OPTION"
- イメージのホスト名の設定
[customizations] hostname = "BASE-IMAGE"
- 作成されるシステムイメージのグループを追加
[[customizations.group]] name = "USER-NAME" gid = NUMBER
名前のみが必要であり、GID は任意です。- 作成されたシステムイメージにタイムゾーンおよび Network Time Protocol (NTP) サーバーを設定
[customizations.timezone] timezone = "TIMEZONE" ntpservers = NTP-SERVER
タイムゾーンを設定しないと、システムはデフォルトとして Universal Time, Coordinated (UTC) を使用します。NTP サーバーの設定はオプションです。- 作成されたシステムイメージのロケール設定
[customizations.locale] language = "[LANGUAGE]" keyboard = "KEYBOARD"
言語とキーボードの両方のオプションを設定することが必要です。複数の言語を追加できます。最初に追加する言語はプライマリー言語で、他の言語はセカンダリーになります。- 作成されたシステムイメージのファイアウォールを設定
[customizations.firewall] port = "[PORTS]"
/etc/services ファイルの数値ポートまたは名前を使用して、一覧を有効または無効にすることができます。- システムの起動時に有効にするサービスの設定
[customizations.services] enabled = "[SERVICES]" disabled = "[SERVICES]"
システムの起動時に有効にするサービスを制御することができます。イメージタイプによっては、サービスがすでに有効または無効になっているため、イメージが正常に機能し、この設定はオーバーライドできません。
第4章 Image Builder Web コンソールインターフェイスでシステムイメージの作成
4.1. RHEL 7 Web コンソールで Image Builder GUI へのアクセス
前提条件
- システムへの root アクセス権限がある。
手順
https://localhost:9090/
を開きます。
図4.1 Web コンソールへのログイン
[D]
図4.2 Web コンソールの Image Builder
[D]
関連情報
- Image Builder シナリオ を使用してカスタマイズされた RHEL OS イメージを作成できます。
4.2. Web コンソールインターフェイスで Image Builder の Blueprint の作成
前提条件
- ブラウザーで、RHEL 7 Web コンソールの Image Builder インターフェイスを開いている。
手順
図4.3 Blueprint の作成
- i.左側の 利用可能なコンポーネント フィールドにコンポーネント名またはその一部を入力し、Enter を押します。
図4.4 利用可能なコンポーネントの検索
テキスト入力フィールドの下にあるフィルターリストに検索条件が追加され、その下のコンポーネントのリストが、検索条件と一致するものに絞られます。コンポーネントのリストが長すぎる場合は、さらに検索の用語を追加します。 - ii.コンポーネントのリストは、1 ページずつ表示されます。別の結果ページに移動するには、コンポーネントリストの上にある矢印および入力フィールドを使用します。
- iii.使用するコンポーネントの名前をクリックし、その詳細を表示します。右側のペインに、コンポーネントの詳細 (バージョンや依存関係など) が表示されます。
- iv.コンポーネントのオプションボックスのバージョンリリースドロップダウンメニューで、使用するバージョンを選択します。
- v.左上の追加をクリックします。
- vi.誤ってコンポーネントを追加してしまった場合には、右側のペインでエントリーの右端にある ... ボタンをクリックしてそのコンポーネントを選択し、メニューで 削除 を選択してそのコンポーネントを削除します。
4.3. Web コンソールインターフェイスで Image Builder の Blueprint の編集
前提条件
- ブラウザーで、RHEL 7 Web コンソールの Image Builder インターフェイスを開いている。
- Blueprint が存在する。
手順
削除
を選択してそのコンポーネントを削除します。
- i.Blueprint コンポーネント検索フィールドで、
Blueprint コンポーネント
の見出しの下にあるフィールドにコンポーネント名またはその一部を入力し、Enter を押します。テキスト入力フィールドの下にあるフィルターリストに検索条件が追加され、その下のコンポーネントのリストが、検索条件と一致するものに絞られます。コンポーネントのリストが長すぎる場合は、さらに検索の用語を追加します。 - ii.コンポーネントのエントリー右端の ⫶ ボタンをクリックし、メニューで
表示
を選択します。右側のペインに、コンポーネントの詳細ウィンドウが表示されます。 - iii.
バージョンリリース
ドロップダウンメニューで目的のバージョンを選択し、右上の 変更の適用 をクリックします。変更が保存され、右側のペインが Blueprint コンポーネントのリストに戻ります。
- i.左側で、利用可能なコンポーネントの見出しの下にあるフィールドにコンポーネント名またはその一部を入力し、Enter を押します。テキスト入力フィールドの下にあるフィルターリストに検索条件が追加され、その下のコンポーネントのリストが、検索条件と一致するものに絞られます。コンポーネントのリストが長すぎる場合は、さらに検索の用語を追加します。
- ii.コンポーネントのリストは、1 ページずつ表示されます。別の結果ページに移動するには、コンポーネントリストの上にある矢印および入力フィールドを使用します。
- iii.使用するコンポーネントの名前をクリックし、その詳細を表示します。右側のペインに、コンポーネントの詳細 (バージョンや依存関係など) が表示されます。
- iv.
コンポーネントのオプション
ボックスで、バージョンリリース
ドロップダウンメニューを使用して、使用するバージョンを選択します。 - v.右上の 追加 をクリックします。
- vi.誤ってコンポーネントを追加してしまった場合には、右側のペインでそのエントリー右端の ⫶ ボタンをクリックし、メニューで
削除
を選択してそのコンポーネントを削除します。
- i.右上のコミットボタンをクリックします。ポップアップウィンドウに変更の概要が表示されます。
- ii.変更内容を確認し、コミットをクリックして確定します。右側の小さなポップアップに保存の進捗が表示され、続いて結果が表示されます。新しいバージョンの Blueprint が作成されます。
- iii.左上の
Blueprint に戻る
をクリックし、編集ウィンドウを終了します。Image Builder ビューが開き、既存の Blueprint の一覧が表示されます。
4.4. Web コンソールインターフェイスで Image Builder の Blueprint にユーザーおよびグループを追加
前提条件
- Blueprint が存在する。
vim
、nano
、emacs
などの CLI テキストエディターがインストールされている。インストールするには、以下のコマンドを実行します。# yum install editor-name
手順
$ sudo bash
# composer-cli blueprints save BLUEPRINT-NAME
- i.追加するすべてのユーザーに対して、このブロックをファイルに追加します。
[[customization.user]] name = "USER-NAME" description = "USER-DESCRIPTION" password = "PASSWORD-HASH" key = "ssh-rsa (...) key-name" home = "/home/USER-NAME/" shell = "/usr/bin/bash" groups = ["users", "wheel"] uid = NUMBER gid = NUMBER
PASSWORD-HASH を、パスワードハッシュに置き換えます。ハッシュを生成するには、以下のようなコマンドを実行します。$ python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
ssh-rsa (…) key-name を、公開鍵に置き換えます。その他のプレースホルダーを、適切な値に置き換えます。必要に応じて任意の行を省略します。ユーザー名のみが必須となります。 - ii.追加するすべてのユーザーグループに対して、このブロックをファイルに追加します。
[[customizations.group]] name = "GROUP-NAME" gid = NUMBER
iii.バージョン番号を大きくしてください。iv.ファイルを保存してエディターを閉じます。 - 6.Blueprint を Image Builder にインポートします。
# composer-cli blueprints push BLUEPRINT-NAME.toml
.toml
拡張子を含むファイル名を指定する必要がありますが、他のコマンドでは Blueprint の名前のみを使用することに注意してください。 - 7.Image Builder にアップロードしたコンテンツが編集内容と一致することを確認するには、Blueprint のコンテンツの一覧を表示します。
# composer-cli blueprints show BLUEPRINT-NAME
バージョンが、ファイルに指定したバージョンと一致するか、およびカスタマイズが存在するかどうかを確認します。重要Blueprint に含まれるパッケージも編集しないと、変更が適用されたことを確認するために使用できる情報が、RHEL 7 Web コンソールの Image Builder プラグインには表示されません。 - 8.特権シェルを終了します。
# exit
- 9.左側の Image Builder (Image builder) タブを開き、開いていたすべてのブラウザーとタブでページを更新します。これにより、読み込まれたページにキャッシュされた状態が、誤って変更を元に戻すことを防ぎます。
追加情報
4.5. Web コンソールインターフェイスで Image Builder を使用したシステムイメージの作成
前提条件
- ブラウザーで、RHEL 7 Web コンソールの Image Builder インターフェイスを開いている。
- Blueprint が存在する。
手順
第5章 Image Builder を使用したクラウドイメージのデプロイメント
5.1. アップロードする AWS AMI イメージの準備
前提条件
- AWS IAM アカウントマネージャー にアクセスキー ID を設定している。
- 書き込み可能な S3 bucket を準備する必要があります。
手順
pip
ツールをインストールします。
# yum install python3 python3-pip
# pip3 install awscli
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
$ BUCKET=bucketname
$ aws s3 mb s3://$BUCKET
vmimport
S3 Role を作成し、これまでに S3 にアクセスする権限を付与していない場合は、それを行います。
$ printf '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:Externalid": "vmimport" } } } ] }' > trust-policy.json $ printf '{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::%s", "arn:aws:s3:::%s/*" ] }, { "Effect":"Allow", "Action":[ "ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe*" ], "Resource":"*" } ] }' $BUCKET $BUCKET > role-policy.json $ aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json $ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
5.2. AWS への AMI イメージのアップロード
前提条件
- AWS イメージのアップロードを設定している。
- Image Builder で AWS イメージを作成している。イメージの作成時に、CLI で
ami
出力タイプ、または GUI で Amazon Machine Image Disk (.ami) を使用します。
手順
$ $ AMI=8db1b463-91ee-4fd9-8065-938924398428-disk.ami
$ aws s3 cp $AMI s3://$BUCKET Completed 24.2 MiB/4.4 GiB (2.5 MiB/s) with 1 file(s) remaining ...
$ A printf '{ "Description": "my-image", "Format": "raw", "UserBucket": { "S3Bucket": "%s", "S3Key": "%s" } }' $BUCKET $AMI > containers.json
$ aws ec2 import-snapshot disk-container file://containers.json
$ aws ec2 describe-import-snapshot-tasks --filters Name=task-state,Values=active
図5.1 イメージの作成
図5.2 仮想化のタイプ
5.3. VMDK イメージの vSphere へのアップロード
前提条件
- Image Builder で VMDK イメージを作成している。イメージの作成時に、CLI で vmdk 出力タイプ、または GUI で VMware Virtual Machine Disk (.vmdk) を使用します。
手順
図5.3 仮想化のタイプ
SCSI
にすると、仮想マシンが起動できません。
図5.4 仮想化のタイプ
5.4. QCOW2 イメージの OpenStack へのアップロード
前提条件
- Image Builder で OpenStack 固有のイメージを作成している。イメージの作成時に、CLI で openstack 出力タイプ、GUI で OpenStack Image (.qcow2) を使用します。
手順
図5.5 仮想化のタイプ
図5.6 仮想化のタイプ
付録A 改訂履歴
改訂履歴 | |||
---|---|---|---|
改訂 1.1.0- | Tue Aug 06 2019 | Eliane Pereira | |
改訂 1.0.0- | Thu Jul 11 2019 | Eliane Pereira | |
| |||
改訂 0.0-0 | Sun Jun 2 2019 | Eliane Pereira | |
|