仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

MIRACLE LINUX 8.4のOpenStackイメージを作成して使う

私はアプリケーションや環境構築のテストをするときにOpenStackインスタンスの上で実行するのをよくやります。 単純なアプリケーションを実行したり、kubeadmなどを使ってKubernetesクラスターを動かして色々な実験をしたり、DockerやPodmanコンテナーでアプリケーションを動かしたり様々です。

MIRACLE LINUX 8.4がライセンスフリーになったこともあって、MIRACLE LINUXをコンテナーやOpenStackで使ってみたいなと思いました。 オフィシャルにはそのようなイメージは提供されていないので、今回はOpenStackイメージをハンドメイドで作ってみたのでここにまとめます。

ISOイメージのダウンロード

ISOイメージを公式からダウンロードします。2つのイメージが用意されていますが、ファイルサイズが小さいMinimal ISOで構いません。

ダウンロードしたISOイメージはKVMホストにコピーしておきましょう。

イメージ作成方法について

次はKVMホスト上でイメージ作成するわけですが、作成方法については次を参考情報としてイメージを作成しました。 CentOSの例はバージョン7をターゲットにしており8だと少々異なるところもありますので、Fedoraの例も参考にしつつ進めます。

ちなみにLinux KVMの環境は既存のものを使ったので、他のOSベースです。すみません。

イメージの作成

次のように実行して、VMイメージのもととなる環境のセットアップをします。 virt-installコマンドを実行すると仮想マシンが作成されます。

$ qemu-img create -f qcow2 /home/user/data/miraclelinux.qcow2 10G
$ virt-install --virt-type kvm --name miraclelinux --ram 1024 \
  --disk /home/user/data/miraclelinux.qcow2,format=qcow2 \
  --network network=default \
  --graphics vnc,listen=0.0.0.0 --noautoconsole \
  --os-type=linux --os-variant=centos8 \
  --location=/home/user/isos/MIRACLELINUX-8.4-minimal-x86_64.iso

次のコマンドで仮想マシンマネージャを起動します。

$ virt-manager

その後、画面の指示に従ってOSセットアップを続行します。 イメージサイズを可能な限り小さくするには、OSのオプションを最小限にしてセットアップすれば良さそうです。 本例ではデフォルトのServerモードでのインストールを行いました。結果最終的なイメージサイズは2.6GBでした。

赤い文字で示された設定(ストレージ、rootユーザーか任意の名前のユーザーなど)をそれぞれ設定してセットアップを開始します。Software Selectionで導入するソフトウェアを変更可能です。その他、私はタイムゾーンとキーボードを日本に設定しました。

インストールが終わったら、ISOをアンマウントして再起動します。

$ virsh list
 Id   Name           State
------------------------------
 1    miraclelinux   running

ISOをアンマウントして再起動します。

$ virsh attach-disk --type cdrom --mode readonly miraclelinux "" sda
$ virsh reboot miraclelinux

仮想マシン環境に色々仕込む

仮想マシンコンソールで操作するのはコピペができなくて辛いので、IPアドレスを確認して端末からsshアクセスします。 デフォルトではNAT接続なので、KVMホストからアクセスします。

$ ssh root@192.168.122.65  (...のような感じで)

ACPI サービスのインストールをします。これにより、シャットダウンや再起動等の操作を外部ツールの機能から実行できます。

# dnf install acpid
# systemctl enable --now acpid

cloud-initのインストールをします。これはインスタンス起動時に様々なカスタマイズができるようにするために必要なパッケージです。

# dnf install cloud-init

設定に関する詳細は/etc/cloud/cloud.cfgを確認ください(デフォルトはcloud-userが設定されているようです)。 パーティションのリサイズをサポートするためのパッケージを用意します。

# dnf install cloud-utils-growpart

zeroconfルートの無効化も行っておきます。

# echo "NOZEROCONF=yes" >> /etc/sysconfig/network

コンソールを使えるようにするために、GRUBに次の設定を行います。

/etc/default/grubファイルを編集して、GRUB_CMDLINE_LINUXオプションを編集します。この行のrhgb quietを取り除き、console=tty0 console=ttyS0,115200n8を追記してください。次は編集例です。

GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/ml-swap rd.lvm.lv=ml/root rd.lvm.lv=ml/swap console=tty0 console=ttyS0,115200n8"

GRUB2の設定を反映させます。これにより、以降の起動では新しい設定でLinuxが起動します。

# grub2-mkconfig -o /boot/grub2/grub.cfg

最後に、仮想マシンを停止します。

# poweroff

イメージの仕上げ(一般化する)

MACアドレスやマシンIDなどの固有情報を削除するため、virt-sysprepを対象の仮想マシンに実行します。

$ sudo virt-sysprep -d miraclelinux

仮想マシンをKVMホストから取り除きます(このコマンドを実行しても仮想マシンのqcow2ファイルは削除されません)。

$ virsh undefine miraclelinux

仮想マシンイメージをOpenStackに登録

イメージをOpenStack環境に転送します。 その後、OpenStack環境でCLIを使って作成した「MIRACLE LINUX 8.4」のイメージをOpenStackに登録します。 

$ ls
images  miraclelinux.qcow2  snap

$ openstack image create --disk-format qcow2 --container-format bare --public --file ./miraclelinux.qcow2 miraclelinux8

インスタンスを作成します。

インスタンス作成中...

問題なく起動しました。

インスタンスを作成、Floating IPアドレスを割当てます。

Floating IPアドレスでインスタンスにアクセスしてみます。ユーザーは特にcloud-initの変更をしなかった場合はcloud-userです。

% ssh cloud-user@172.16.214.164 
The authenticity of host '172.16.214.164 (172.16.214.164)' can't be established.
ED25519 key fingerprint is SHA256:hogehugahogeeeeeeeeeeeeeeeeee.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.16.214.164' (ED25519) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket

[cloud-user@miracle ~]$ cat /etc/miraclelinux-release 
MIRACLE LINUX release 8.4 (Peony)

インスタンスにログインできることを確認しました。間違いなくMIRACLE LINUXですね。sudo dnf check-updateなどと実行すると、更新されたパッケージなどの情報が入手できると思います。

Cockpitの有効化

インスタンスイメージを作成する際にデフォルトの「Server」でMIRACLE LINUXをセットアップした場合、Webブラウザーでサーバーの管理が可能なCockpitがデフォルトでインストールされています。但し、サービスはデフォルトでは無効化された状態になっています。

Cockpitを使いたい場合は以下のコマンドの実行で有効化可能ですが、OpenStackの場合、公開鍵認証がスタンダートでありユーザーにはパスワードが設定されていないので、インスタンスに対してCockpitコンソールでアクセスしたければ、まずsudo passwd cloud-userでユーザーのパスワードを設定してください。

$ sudo systemctl enable cockpit.socket --now

OpenStackインスタンスのCockpitへアクセスするには、セキュリティグループでTCP/9090へのアクセス許可が必要です。

ログインするとこのような画面が表示されます。今回はCockpitを使ってローカルのサーバーにアクセスしただけですが、Cockpitはサーバーの設定さえすればリモートのマシンへもアクセスしてブラウザーを使ってCockpitによるサーバーのリモート管理も可能になっています。

さらにCockpitでストレージ管理をしたければ、sudo dnf install cockpit-storagedでストレージ関連のアドオンをCockpitに追加してください。これを使うことで、ブートボリュームのパーティションサイズを簡単に変更できます。これにより、インスタンスのrootボリュームの拡大をGUIでできるようになります。

まとめ

とりあえず、OpenStackのインスタンスでMIRACLE LINUX 8.4を動かすことができました。今後はイメージサイズをもっとスリムにするとか、cloud-initを使ったカスタマイズしてインスタンスを起動するなどを試してみたいと思います。今回の内容は以上です。