Azure Virtual MachineでGentoo Linuxを使いたくなったので「イメージ」を作ってみました。
Hyper-VでGentooを動かす
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ピッタリで作成しました。
と思いきや32x1024x1024x1024=34,359,738,368バイトより大きくなっていました・・・。Hyper-Vの仮想ハードディスクの新規作成ウィザードでVHDを32GBと指定して作ったんですが・・・。請求明細を確認したところ、このサイズで32GiB枠の料金が請求されていたので、まあOKでしょう。
サイズを大きくすると、家庭用のインターネット回線からはAzureにアップロード困難になるので注意しましょう。ファイル交換ソフト対策のためか、国内のほぼ全てのプロバイダでアップロード容量に制限が掛けられているいるようです。事前にプロバイダのアップロード規制を確認しておきましょう。
Gentooのインストール
普通にインストールしましょう。スワップパーティションは不要です。Azureではなぜかスワップ用のディスク(/dev/sdb1)が別途用意されます。
カーネルの設定と再構築
AzureのVirtual MachineはHyper-Vで動いているので、Hyper-Vで動くようにカーネルを再構築します。Funtooの設定を参考にしました。上から順番に設定しないと表示されない設定があるので注意。(いろいろ依存関係があるらしい)
最初全部カーネルモジュールにしたら起動しなかったので、素直に全部カーネルに組み込むのがよさそうです。(モジュールでも起動させる方法はあると思いますがよくわかりません。initramfsに入れとけばよいのでしょうか。)
WALinuxAgentのインストール [*Optional]
Azure公式のほぼバックドアみたいなツールです。これをインストールしたまま他のレンタルサーバーに引っ越すとセキュリティホールになりそう。たぶん。
インストールするとAzureのダッシュボードからパスワードをリセットできたり、起動時に前述のスワップパーティションにスワップファイルを自動作成したり等、Azure独自の機能を使用できます。
portageに存在しないので、私は自分でebuildを作ってインストールしました。
面倒ならGitHubのリポジトリから直でインストールでもいいと思う。
シリアルコンソールの設定 [*Optional]
Azureのダッシュボードからシリアルコンソールで接続できるようになるだけです。必要な場面はほぼないと思います。設定してみたかっただけ。
/etc/inittabの設定
これを設定しないとシリアルコンソールを使えない。(設定しなくても出力されるログだけは読める)
# /etc/inittab # SERIAL CONSOLES s0:12345:respawn:/sbin/agetty -L 115200 ttyS0 vt100
/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-cliはGentooのoverlayに存在しましたが、コンパイル失敗したのでインストールは諦めました。まあ、診断機能はなくてもいいでしょう。
VHDのアップロード
納得のいく環境が構築できたら、VHDをAzureのストレージにアップロードします。ストレージアカウントの種類はStorage(汎用 v1)などにする必要があります。Blobストレージだとvhdファイルをアップロードできません。
Page BLOBでアップロードする
Azureイメージを作成するには、VHDファイルをPage BLOBとしてアップロードしておく必要があります。デフォルトではBlock Blobになっているという罠があるので要注意です。追記)VHDファイルはデフォルトでPage BLOBとしてアップロードされるように2019年11月頃変更されていました。
Azureイメージの作成
あとは普通に入力すれば作れるはずです。意味不明なエラーが表示されたらVHDファイルがPage BLOBとしてアップロードされていない可能性があります。
イメージ作成時にエラーが発生した場合、コマンドラインでは詳細が表示されるのですが、Azure Portalでは全く表示されないのでわかり難いです。ちゃんとエラーを表示してほしいです。
「イメージ」が作れればAzure Virtual Machineで使えるはずです。
VHDのダウンロード
Azure Virtual Machineを停止させると、VHDをダウンロードできます。しかしなぜかダウンロードが途中で頻繁に中断されます。ダウンローダーで数百回リトライしてダウンロード完了しました。意味が分かりません。 現在は問題なくダウンロードできるようです。