仮想化通信

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

MAASでAlmaLinuxのイメージを作ってデプロイを試してみる

MAASはこのブログでも何度か取り上げたように、ベアメタルプロビジョニングを実現するツールです。わかりやすく言うと、パソコンやサーバーを用意したら、アプリケーションを実行するために何らかのオペレーティングシステム(OS)をインストールします。普通はOSのイメージをCDとかUSBメモリーとかに用意してインストールするのですが、管理するマシンの台数が増えてくるとその方法は効率的ではありません。そんなときに使うのがプロビジョニングツールです。

MAASはOSのデプロイの他、ノードのテスト、サーバーのIPアドレスマネジメント、ストレージやNICの構成変更等もMAASから行えます。

MAASはUbuntuを開発、サポートしているCanonicalがオープンソースで開発しているツールです。パッケージも用意されているので、使いたければインストールしてすぐ使い始められます。

MAASはUbuntuを登録したマシンにデプロイできるだけではなくて、用意したイメージをMAASに登録するだけで、様々なOSをデプロイできるようになります。

イメージの作成には2つの方法がありますが、同じくオープンソースで開発しているイメージ作成ツールのpacker-maasを使うことで、様々なOSのMAAS イメージを作ることが出来ます。

packer-maasは名前のとおり、HashiCorp製のPackerを使ってイメージを作リます。packer-maasはツールと言うよりはイメージ作成のためのテンプレート集で、PackerとLinux KVM、ビルド環境を用意してmakeコマンドを実行するだけで簡単にイメージを作ることが出来ます。

リポジトリーにAlmaLinuxが追加されていたので、イメージを作ってみようと思いました。 また、MAASはオフィシャルにCentOS 7とCentOS 8のイメージは用意していますが、それ以降のバージョンは用意されていないので、CentOS Stram 9のイメージもついでに作ってみようと思います。

ちなみに、社内で使っているMAASは過去にRHEL8とRHEL9のイメージを作って、検証に利用しています。 今回これにAlmaLinuxとCentOS Stram 9を追加してみる感じですね。

CentOS Stram 9のイメージを作って登録するには?

順番が逆なのですが、まずはCentOS Stram 9を試してみます。

テンプレートはここですね。

Prerequisitesを見ると、Linux KVMなどのほか、Packer v1.7.0以上、MAAS 3.0以上、Curtin 21+が必要と書かれています。「CurtinはOSのカスタマイズインストールツール」と捉えておけば大体あっています。

MAASでも内部でCurtinを使っていて、Curtinの設定の中にOS Familyとか設定方法とかが定義されています。 MAASとCurtinが古すぎると、作ったイメージを登録できてもデプロイに成功しない可能性があります。

私のMAAS環境はdebパッケージでインストールしているので、ホストのCurtinが使われます。要件は満たしていますね。

$ dpkg -l curtin
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version               Architecture Description
+++-==============-=====================-============-=========================>
ii  curtin         22.1-0ubuntu1~22.04.1 all          Library and tools for the>

ただ、Packerについてはテストしたときの最新バージョンであった1.10.2-1を使いました。 最新バージョンを使った理由として、変に古いと処理が止まってしまうためです。

準備が終わったらあとはmakeコマンドを実行して待つだけです。数分くらい待つと、centos9-stream.tar.gzというファイルがカレントに作成されます。

$ make

これをMAASサーバーに持ってきて次のように実行するだけでイメージを登録できます。

maas $MAAS_USER boot-resources create     name='custom/9-stream-custom' title='CentOS 9 Stream Custom'     architecture='amd64/generic' filetype='tgz' base_image='rhel/9'     content@=centos9-stream.tar.gz

あとはそのイメージを使って、サーバーにデプロイするだけです。 ところが、最初デプロイがうまくできませんでした。

なぜかなあとテンプレートを見た所、grub2-efi-x64をインストールしており、UEFI secure bootを要求するので、BIOSモードのノードに展開できないという話でした。vSphere VMは仮想マシンの設定で、物理マシンは管理コンソールにアクセスして「UEFI」モードで起動するように設定したら、うまく動くようになりました。

もう、BIOSしか喋れない世代のマシンはサヨナラですね。

AlmaLinuxのイメージを作って登録するには?

AlmaLinuxのMAASのサポートは比較的最近です。最新のMAASとCurtinをインストールできれば対応は可能なのですが、アップデートできない場合はCurtinにパッチを当てることで対応可能です。

具体的にどうやるかですが、MAASのインストール方法によって異なります。今回の方法はdebパッケージでMAASをインストールしている場合の前提です。Snap版のMAASはCoreの上で動いているのでCoreの方の修正が必要らしいのですが、Coreに含まれるCurtinはかなり古いらしく、簡単なパッチ修正では難しいそうです。素直に対応したバージョンのMAASがリリースされるまで待ったほうが正直良いかと思います。

では改めてdebパッケージでMAASをインストールしている場合ですが、次のファイルを修正するだけです。 ディレクトリパスを見て気がついた方も多いかもしれませんが、distro を修正するようなイメージです。

/usr/lib/python3/dist-packages/curtin/distro.py

具体的には次の修正例のように「AlmaLinux」を追加します。当然ながら、distroのPythonモジュールが更新されたときは改めてパッチを当てる必要があります。

$ sudo vi /usr/lib/python3/dist-packages/curtin/distro.py
...
DistroInfo = namedtuple('DistroInfo', ('variant', 'family'))
DISTRO_NAMES = ['arch', 'centos', 'debian', 'fedora', 'freebsd', 'gentoo',
                'opensuse', 'redhat', 'rhel', 'sles', 'suse', 'ubuntu',
                'rocky', 'almalinux']
...
DISTROS = distro_enum(*DISTRO_NAMES)

OS_FAMILIES = {
    DISTROS.debian: [DISTROS.debian, DISTROS.ubuntu],
    DISTROS.redhat: [DISTROS.centos, DISTROS.fedora, DISTROS.redhat,
                     DISTROS.rhel, DISTROS.rocky, DISTROS.almalinux],
    DISTROS.gentoo: [DISTROS.gentoo],
    DISTROS.freebsd: [DISTROS.freebsd],
    DISTROS.suse: [DISTROS.opensuse, DISTROS.sles, DISTROS.suse],
    DISTROS.arch: [DISTROS.arch],
}
...

この修正が終わったらあとは各ディレクトリーに移動して、イメージを作るだけです。 AlmaLinux 8なら

AlmaLinux 9なら

に移動して、makeコマンドを実行して待つとta.gzファイルがカレントに作成されます。

RequirementsでMAAS 3.5、Curtin 23.1以上と書かれていますが、手元のMAAS 3.3.6、Curtin 22.1-0ubuntu1~22.04.1の環境でも動作するのを確認しました。

作ったイメージをMAASサーバーにコピーして次のようなコマンドを実行して登録すると、MAASで使えるようになります。

$ maas $MAAS_USER boot-resources create name='custom/alma8'     title='Alma 8 Custom' architecture='amd64/generic'     base_image='rhel/8' filetype='tgz'     content@=alma8.tar.gz

$ maas $MAAS_USER boot-resources create name='custom/alma9'     title='Alma 9 Custom' architecture='amd64/generic'     base_image='rhel/9' filetype='tgz'     content@=alma9.tar.gz

MAAS Dashboardを開いて、デプロイを試します。

いずれも物理マシン、仮想マシンにデプロイできることを確認しています。

CentOS Stram 9はホストがUEFIモードに対応していないと正常にデプロイ出来ませんでした(例えばBIOSしかサポートしていないホストはもとより、そのようなホストでLinux KVMを実行している場合も、それで払い出した仮想マシンにデプロイは出来ません。もちろんテンプレートをいじればBIOS対応のイメージも作れるものの、そこまでして使おうとは思わないというのが正直なところです)。

MAASはもう10年くらい常用しているツールの一つです。それでUbuntuをデプロイしたり、Linux KVM環境を作れるだけでも十分役立つソフトウェアではあったのですが、いろいろなOSをデプロイできるようになると、さらにいろいろなところで活躍しそうです。

MAASのお陰でリモート作業が捗ります。