RHEL8のImage Builderでカスタムシステムイメージを構築する

この記事はRed Hat DeveloperRed Hat Enterprise Linux 8 Image Builder: Building custom system imagesを、許可をうけて翻訳したものです。

::: 投稿者Ricardo Gerardi 2019年5月8日 :::

Red Hat Enterprise Linux 8にはImage Builderという新しいツールが同梱されており、これを使用してカスタムRed Hat Enterprise Linuxシステムイメージをさまざまな形式で作成できます。これらのイメージは、主要なクラウドプロバイダーおよび仮想化技術と互換性があります。その結果、要件に応じて、さまざまなプラットフォームで新しいRed Hat Enterprise Linux(RHEL)システムを迅速に立ち上げることができます。

この記事では、Red Hat Enterprise Linux 8でImage Builderを設定し、2つのイメージを作成することで機能をためしていきます。Red Hatは、Image Builderを専用の仮想マシンで実行することをお勧めします。

このチュートリアルでは、Image BuilderをインストールするRed Hat Enterprise Linux 8を実行している仮想マシンが必要です。この仮想マシンはサブスクリプションを購読しており、Red Hat Enterprise Linux 8パッケージリポジトリにアクセスできる必要があります。この記事では、Red Hat Enterprise Linux 8のインストールについては説明しません。詳しくは、製品ドキュメントを参照してください。

Image Builder のインストール

Image Builderは、「lorax-composer」パッケージによって提供される機能を利用します。Image Builderには特定のセキュリティ要件があるため、Image Builderを専用の仮想マシンにインストールすることをお勧めします。このチュートリアルでは、Image Builderのインストールに、「rh8comp2」という名前の仮想マシンを使用します。

WebコンソールインターフェースによるGUI、またはcomposer-cliパッケージをインストールすることによりCLIを通して、Image Builderを使用できます。このチュートリアルでは、両方を組み合わせて使用します。

このコマンドを実行して必要なパッケージをインストールします。

# yum install -y lorax-composer composer-cli cockpit-composer

cockpit(Webコンソールを有効にするため)がインストールされていない場合は、このコマンドによって依存パッケージもダウンロードされます。

次に、ファイアウォールがWebコンソールへのアクセスを許可していることを確認します。

# firewall-cmd --add-service=cockpit && firewall-cmd --add-service=cockpit --permanent
Warning:ALREADY_ENABLED: 'cockpit' already in 'public'
success
Warning:ALREADY_ENABLED: cockpit
success
# firewall-cmd --list-services
cockpit dhcpv6-client ssh

最後に、「lorax-composer」および「cockpit」サービスを有効にして開始します。

# systemctl enable lorax-composer.socket
Created symlink /etc/systemd/system/sockets.target.wants/lorax-composer.socket → /usr/lib/systemd/system/lorax-composer.socket.
# systemctl enable cockpit.socket
Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket → /usr/lib/systemd/system/cockpit.socket.
# systemctl start lorax-composer
# systemctl start cockpit

これで、Image Builderを起動して実行できます。次に、WebコンソールのGUIを使用してImage Builderを使用してイメージを作成しましょう。

Webコンソールを使用してカスタムイメージを作成する

Image BuilderとWebコンソールをインストールしたら、ブラウザで仮想マシンのホスト名またはIPアドレスのポート9090を指定してシステム管理GUIにアクセスできます。管理者ユーザーの資格情報を使用してログインします。

ログインしたら、メニューの左側にあるImage Builderアイコンをクリックしてください。

Composer

イメージのブループリントを作成する

次に、イメージのブループリントを作成します。ブループリントは、あなたのイメージに何を含めるべきかを定義します。WebコンソールのGUIからは、含めるrpmパッケージのみを指定できます。ユーザーを指定するには、このチュートリアルの後半でComposer CLIを使用します。

[ブループリントの作成]ボタンをクリックして新しいブループリントを作成します。その後、ブループリントの名前と説明を指定します。この例では、Goで書かれたプログラムをコンパイルするためのツールを含むイメージを作成しています。イメージの名前はdev-golang-1です。

ブループリントを作成する

次の画面で、イメージに含めるパッケージを選択します。左側のフィルタバーを使用すると、パッケージを見つけやすくなります。たとえば、tmuxと入力してEnterキーを押すと、tmuxパッケージが表示されます。名前の横にあるプラス(+)記号をクリックして、パッケージをブループリントに追加します。GUIが自動的にパッケージの依存関係を追加することに注意してください。この例では、ブループリントに次のパッケージを追加しています。

  • cockpit
  • openssh
  • golang
  • tmux

ブループリントを編集

利用可能なパッケージのバージョンはシステムによって異なる場合があります。

必要なパッケージをすべて含めたら、画面上部の[確定]ボタンをクリックして変更を確定します。ポップアップ画面で変更を確認し、[確定]ボタンをクリックして確定します。

ブループリントの変更をコミット

イメージ作成を開始する

ブループリントが定義されたので、右上の[Create Image]ボタンをクリックしてイメージ作成プロセスを開始できます。ポップアップ画面で、イメージの種類を選択します。Image Builderは、AWS、Azure、OpenStack、VMwareなどのさまざまなイメージを作成できます。この例では、ローカルKVM仮想マシンをデプロイするため、QEMU QCOW2形式を選択して[作成]をクリックします。

イメージの作成

イメージを作成するのに数分かかることがあります。ブループリントに移動して[イメージ]タブをクリックすると、Webコンソールで進行状況を確認できます。

イメージ作成待ち

lorax-composerユニットのjournalctlログをチェックして、Image Builder仮想マシンの詳細なログを追跡することもできます。

# journalctl -fu lorax-composer

イメージが作成されたら、イメージ名の横にある[ダウンロード]ボタンをクリックしてダウンロードします。

イメージ完成

イメージを使用して仮想マシンを作成する

これで、このイメージを使ってKVM / Libvirt上に仮想マシンを作成できます。このイメージにはユーザーを指定していないため、virt-customizeなどのlibvirtツールを使用してイメージをさらにカスタマイズしてから使用します。

$ sudo virt-customize -a f492077c-6d4b-458a-8ac6-bfbc49fae499-disk.qcow2 --root-password password:test123 --hostname dev01
[   0.0] Examining the guest ...
[   5.8] Setting a random seed
[   5.8] Setting the hostname: dev01
[   5.8] Setting passwords
[   6.9] Finishing off

最後に、新しいイメージを使って仮想マシンを作成します。

イメージを使用した仮想マシン

次のステップでは、Image Builder CLIを使用してユーザーをイメージに直接追加します。

CLIを使用してカスタムイメージを作成する

Webコンソールを使用するだけでなく、Image Builder CLIを使用してイメージを作成することもできます。CLIを使用すると、ユーザーやグループをイメージに追加するなど、いくつか追加のカスタマイズオプションを指定できます。Image Builder仮想マシンにcomposer-cliパッケージをすでにインストールしているので、それを使用しましょう。

Image Builder仮想マシンrh8comp2にrootとしてログインします。まず、利用可能なすべてのブループリントを一覧表示します。

# composer-cli blueprints list
dev-golang-1
example-atlas
example-development
example-http-server

ご覧のとおり、GUIを使用して作成したdev-golang-1ブループリントが利用可能です。このブループリントを編集して、管理者ユーザーを含めます。ブループリントを編集するには、以下のコマンドでファイルに保存します。

# composer-cli blueprints save dev-golang-1
# ls -l dev-golang-1.toml
-rw-r--r--.1 root root 295 Mar 15 14:38 dev-golang-1.toml

このコマンドは、ブループリントをTOML形式で保存します。

次に、dev-golang-1.tomlファイルを編集して新しいユーザーを追加します。

# vi dev-golang-1.toml
name = "dev-golang-1"
description = "Golang Development Image"
version = "0.0.2"
modules = []
groups = []

[[packages]]
name = "cockpit"
version = "*"

[[packages]]
name = "golang"
version = "*"

[[packages]]
name = "openssh"
version = "*"

[[packages]]
name = "tmux"
version = "*"

ご覧のとおり、このファイルには、GUIを使用してブループリントを作成するときに含めたすべてのパッケージが含まれています。新しいユーザーを追加するために、必要なカスタマイズを含む新しいセクションを含めます。その前に、バージョンを0.0.1上げて、ブループリントに新しいマイナーバージョンを与えます。

version = "0.0.3"

ここで、ユーザー名、パスワード、SSHキー、グループなど、作成したいユーザーに関する詳細を含むセクションcustomizations.usersを追加します。

[[customizations.user]]
name = "ricardo"
description = "Ricardo user account"
password = "$6$nt7IeYW0hFj3ShZC$FdBCgZpfIi92q0sdcTozX1z8KnDAxtxy2b4A76fP4.QKy9kyLS82Vci76BjJFIMp3RHJNCBqUq.aihV0icdHf1"
key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHmjYFDBCrB1mgacb47t+y8UXSscnJl2WWlJluzqtInpT6At0nwqtdV3niYTHxju7e/As4MX3iwC8ubVp2DH8qXgvorDliV9SsIQTqvNKlwGkxZ5cqfYFlV4SUuS7tVTOg0yIqVSddZ2t0Sjmdp3PF7zrp6ayH7a9BBA0/8HQXU/lpdk76SGYL9L8PHOtMYnxtmr+WduoJ+X9zO9d3SUypX36NleFqhlpr1UfnSSkFO/PfRYUhry6HEmUk3Da7aS9hNS0lX/j6uf9RnSrNSzquVezyVMgsRnJ+5xr7KyhwtEig//Wr/j8TWmqvj645IWXTmj6Jw4uvi26bEORZVM5x ricardo@localhost"
home = "/home/ricardo/"
shell = "/usr/bin/bash"
groups = ["users", "wheel"]

このコマンドを使用して、SHA512アルゴリズムを使用してパスワードのハッシュを生成できます。

# python3 -c "import crypt, getpass; print(crypt.crypt(getpass.getpass(), crypt.METHOD_SHA512))"
Password:
$6$nt7IeYW0hFj3ShZC$FdBCgZpfIi92q0sdcTozX1z8KnDAxtxy2b4A76fP4.QKy9kyLS82Vci76BjJFIMp3RHJNCBqUq.aihV0icdHf1

Python 3が利用できない場合は、yumを使ってインストールします。

# yum -y install python3

ファイルの編集が終わったら、変更を保存して、新しいバージョンのブループリントをImage Builderにプッシュします。

# composer-cli blueprints push dev-golang-1.toml

次に、QCOW2形式を指定して、イメージ作成プロセスを開始します。

# composer-cli compose start dev-golang-1 qcow2
Compose e63c7b29-df96-4f8c-aeb4-c2b0a98bd05e added to the queue

そして、以下のように作成状況を確認してください。

# composer-cli compose status
e63c7b29-df96-4f8c-aeb4-c2b0a98bd05e RUNNING  Fri Mar 15 14:43:35 2019 dev-golang-1    0.0.3 qcow2
f492077c-6d4b-458a-8ac6-bfbc49fae499 FINISHED Fri Mar 15 14:14:13 2019 dev-golang-1    0.0.2 qcow2            1990852608

イメージをダウンロードして仮想マシンを作成する

完了するまでステータスを確認し続けることができます。イメージの作成には数分かかります。

# composer-cli compose status
f492077c-6d4b-458a-8ac6-bfbc49fae499 FINISHED Fri Mar 15 14:14:13 2019 dev-golang-1    0.0.2 qcow2            1990852608
e63c7b29-df96-4f8c-aeb4-c2b0a98bd05e FINISHED Fri Mar 15 14:49:17 2019 dev-golang-1    0.0.3 qcow2            1990983680

完了したら、CLIを使用してイメージをダウンロードできます。

# composer-cli compose image e63c7b29-df96-4f8c-aeb4-c2b0a98bd05e
e63c7b29-df96-4f8c-aeb4-c2b0a98bd05e-disk.qcow2:1898.75 MB

または、Webコンソールを使用してイメージの作成ステータスを確認したり、新しいイメージをダウンロードしたりできます。

イメージを取得したら、さきほどと同様に、そのイメージを使用してKVMを使用して新しい仮想マシンを起動できます。前回との違いは、イメージにはすでに管理者ユーザーがいるため、作成する必要がないことです。SSHキーを提供したので、パスワードなしでそれを使って新しいシステムにログインします。

$ ssh ricardo@192.168.122.227
The authenticity of host '192.168.122.227 (192.168.122.227)' can't be established.
ECDSA key fingerprint is SHA256:2xZm9mk8qrCUcwVb9dyb9Pvj21T021/wiXrD96nFKgE.
Are you sure you want to continue connecting (yes/no)? yes
Warning:Permanently added '192.168.122.227' (ECDSA) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket

新しいシステムにログインしたら、Goがブループリントに従ってインストールされていることを確認します。

[ricardo@localhost ~]$ go version
go version go1.10.3 linux/amd64
[ricardo@localhost ~]$

Image Builder CLIを使用すると、イメージ作成プロセスを自動化してCI / CDパイプラインと統合できます。

まとめ

Image Builderツールは、さまざまなクラウドおよび仮想化プラットフォームで新しいRed Hat Enterprise Linuxシステムを素早く立ち上げることができるカスタムシステムイメージを設定および作成するための多用途のソリューションです。

Image Builderの詳細については、Red Hat Enterprise Linux 8のドキュメントまたはアップストリームのプロジェクトブログを参照してください。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。