私はアプリケーションや環境構築のテストをするときに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の例も参考にしつつ進めます。
- https://docs.openstack.org/image-guide/centos-image.html
- https://docs.openstack.org/image-guide/fedora-image.html
ちなみに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を使ったカスタマイズしてインスタンスを起動するなどを試してみたいと思います。今回の内容は以上です。