Azure Virtual Machine用のLinux Imageを作成する

Azure Virtual MachineでGentoo Linuxを使いたくなったので「イメージ」を作ってみました。

Hyper-VGentooを動かす

Azure Virtual MachineはHyper-Vで動いているので、まずGentoo LinuxがローカルのHyper-Vで動くようにします。

Hyper-V仮想マシンの作成

仮想マシンの世代は第1世代にします。Azureが第1世代にしか対応してないためです。(追記。2019年8月から第2世代も対応されてました。でも、第2世代にしても速くなる訳ではないとのことなので、第1世代でいいと思います。)

VHDの作成

仮想マシンのディスクを固定サイズのVHD形式で作成します。Azureがサイズ固定のVHDにしか対応していないためです。

Azureではディスクサイズに応じて課金されます。とりあえず最初は最低価格枠内の32GiB以内にするのがいいでしょう。最低価格枠が32GiB未満までなのか32GiB以下までなのかは不明です。誰かサポートに聞いてみてください。とりあえず私は32GiBピッタリで作成しました。

f:id:geroforce:20190623222548p:plain

と思いきや32x1024x1024x1024=34,359,738,368バイトより大きくなっていました・・・。Hyper-Vの仮想ハードディスクの新規作成ウィザードでVHDを32GBと指定して作ったんですが・・・。請求明細を確認したところ、このサイズで32GiB枠の料金が請求されていたので、まあOKでしょう。

サイズを大きくすると、家庭用のインターネット回線からはAzureにアップロード困難になるので注意しましょう。ファイル交換ソフト対策のためか、国内のほぼ全てのプロバイダでアップロード容量に制限が掛けられているいるようです。事前にプロバイダのアップロード規制を確認しておきましょう。

Gentooのインストール

普通にインストールしましょう。スワップパーティションは不要です。Azureではなぜかスワップ用のディスク(/dev/sdb1)が別途用意されます。

カーネルの設定と再構築

AzureのVirtual MachineはHyper-Vで動いているので、Hyper-Vで動くようにカーネルを再構築します。Funtooの設定を参考にしました。上から順番に設定しないと表示されない設定があるので注意。(いろいろ依存関係があるらしい)

www.funtoo.org

最初全部カーネルモジュールにしたら起動しなかったので、素直に全部カーネルに組み込むのがよさそうです。(モジュールでも起動させる方法はあると思いますがよくわかりません。initramfsに入れとけばよいのでしょうか。)

WALinuxAgentのインストール [*Optional]

Azure公式のほぼバックドアみたいなツールです。これをインストールしたまま他のレンタルサーバーに引っ越すとセキュリティホールになりそう。たぶん。

インストールするとAzureのダッシュボードからパスワードをリセットできたり、起動時に前述のスワップパーティションスワップファイルを自動作成したり等、Azure独自の機能を使用できます。

portageに存在しないので、私は自分でebuildを作ってインストールしました。

面倒ならGitHubリポジトリから直でインストールでもいいと思う。

github.com

シリアルコンソールの設定 [*Optional]

Azureのダッシュボードからシリアルコンソールで接続できるようになるだけです。必要な場面はほぼないと思います。設定してみたかっただけ。

/etc/inittabの設定

これを設定しないとシリアルコンソールを使えない。(設定しなくても出力されるログだけは読める)

# /etc/inittab
# SERIAL CONSOLES
s0:12345:respawn:/sbin/agetty -L 115200 ttyS0 vt100

www.ajisaba.net

/etc/default/grubの設定

# /etc/default/grub
# Linuxのボーレート
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300"
# シリアルコンソールにもGRUBメニューを表示する。(別になくてもいいけど表示させた方がかっこいい・・・と思う)
GRUB_TERMINAL="console serial"
# GRUBのボーレート
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

grub-mkconfigで上記設定をgrub.cfgに反映させる

sudo grub-mkconfig -o /boot/grub/grub.cfg

azure-cliのインストール [*Optional] (諦めました)

azure-cliというツールをインストールすると、診断機能などが使えるようです。azure-cliGentooのoverlayに存在しましたが、コンパイル失敗したのでインストールは諦めました。まあ、診断機能はなくてもいいでしょう。

VHDのアップロード

納得のいく環境が構築できたら、VHDをAzureのストレージにアップロードします。ストレージアカウントの種類はStorage(汎用 v1)などにする必要があります。Blobストレージだとvhdファイルをアップロードできません。 f:id:geroforce:20191202172653p:plain

Page BLOBでアップロードする

Azureイメージを作成するには、VHDファイルをPage BLOBとしてアップロードしておく必要があります。デフォルトではBlock Blobになっているという罠があるので要注意です。追記)VHDファイルはデフォルトでPage BLOBとしてアップロードされるように2019年11月頃変更されていました。

f:id:geroforce:20190624000409p:plain

Azureイメージの作成

あとは普通に入力すれば作れるはずです。意味不明なエラーが表示されたらVHDファイルがPage BLOBとしてアップロードされていない可能性があります。

f:id:geroforce:20190624001620p:plain

イメージ作成時にエラーが発生した場合、コマンドラインでは詳細が表示されるのですが、Azure Portalでは全く表示されないのでわかり難いです。ちゃんとエラーを表示してほしいです。

「イメージ」が作れればAzure Virtual Machineで使えるはずです。

VHDのダウンロード

Azure Virtual Machineを停止させると、VHDをダウンロードできます。しかしなぜかダウンロードが途中で頻繁に中断されます。ダウンローダーで数百回リトライしてダウンロード完了しました。意味が分かりません。 現在は問題なくダウンロードできるようです。

f:id:geroforce:20190624003344p:plain