ConoHa VPS上でNetBSDを動かす


Google Cloud・AWS・Azure・……とクラウドの巨人を挙げればそれしかクラウドの選択肢がないようにも思えます。しかし以下の理由からNetBSDを開発・利用しているときにはあえて国内のVPSサービスを選ぶこともあります。

ビルドサーバとして運用したいのでCore数やRAMは多いほうがいい
クラウドで下手に高性能なマシンを契約すると費用がかさみます。当然、マシンパワーが必要なときだけ高性能なマシンを契約して、作業が終われば即マシンを削除するという運用をすれば費用は比較的抑えられるでしょう。
簡単な料金体系がいい
クラウドではネットワークの通信量やストレージにもお金がかかることもあります。日曜プログラマとしては、できれば複雑な料金体系のサービスは避けて明瞭会計なサービスを使いたいところです。
公式にNetBSDをサポートしているサービスがいい
各クラウドサービスごとにマシンイメージを手元で作ったり、ドライバの非対応に悩まされたりすることなく、NetBSDが標準で提供されていると趣味として始めやすく使いやすいです。
PayPalアカウントを作りたくない
国外の格安VPSサービスは支払いがPayPal経由に限られていることもあります。国内のサービスであればクレジットカードも使えます。
日本語のドキュメントやサポートが充実しててほしい
この理由に説得力があるかどうかは別として、国外のサービスも日本語のドキュメントはかなり充実しています。一方で一部翻訳されていないドキュメントもあります。おおよその場合気にならないとは思いますが。

ここで特に難しいのは三番目の、公式にNetBSDをサポートしているサービスを探すという点です。その他の要求は国内のVPSサービスプロバイダならおおよそ揃えているでしょう。幸いにもGMOのConoHa VPSが僕の要求にぴったり合います。そこで、ConoHa VPS上でNetBSDを動かすときの勘所をまとめます。

  1. ConoHa VPS
  2. ConoHa VPSのNetBSDイメージ
  3. ビルド時間計測
  4. shutdown -p nowについて

ConoHa VPS

ConoHa VPSについてはWebサイトを見ればおおよそどのようなサービスか把握できるでしょう(VPSならConoHa)。ここで重要なのは、NetBSDがサポートされている点と、仮想マシンを停止すれば料金プランを変更できる点です。VPSとうたっていますが、仮想化基盤はOpenStackとKVMです。マシンのスケールアップ・スケールダウンは自由にできますから、ソースツリーやパッケージのビルド時には高性能なプランにして、使わないときは一番安いプランに戻す……といった運用ができます。料金プランの選択肢が少ないクラウドサービスと考えても差し支えないでしょう。なお、マシンを停止しても課金が止まるわけではありません。

ConoHa VPSのNetBSDイメージ

最新バージョンのみ提供されます。2019年4月27日時点では仮想マシン作成時にNetBSD 8.0を選択できます。インストールされているベースシステムはbase.tgzとetc.tgzという最小構成になっています。そのため、マシン作成後に別途comp.tgzをダウンロードしてルートに展開しないとソースツリーをビルドできません。また、パッケージビルドもおこないたいのであればX11一式も持ってくるといいでしょう。

$ ftp ftp://ftp.jaist.ac.jp/pub/NetBSD/NetBSD-8.0/amd64/binary/sets/
ftp> mget comp.tgz x*.tgz

pkgsrcは通常どおり自力で持ってくる必要があります。

$ ftp ftp://ftp.jaist.ac.jp/pub/pkgsrc/stable/pkgsrc.tar.gz

転送量課金はないので安心です。

ビルド時間計測

仮想マシンを6 Core、8GB RAMのプランに変更して、build.sh toolsbuild.sh releaseを実行しました。結果は以下のとおりです。

===> Summary of results:
         build.sh command:    ./build.sh -O ../obj -T ../tools -X ../xsrc -x -U -j 6 tools
         build.sh started:    Sun Apr 21 18:59:19 JST 2019
         NetBSD version:      8.0
         MACHINE:             amd64
         MACHINE_ARCH:        x86_64
         Build platform:      NetBSD 8.0 amd64
         HOST_SH:             /bin/sh
         No $TOOLDIR/bin/nbmake, needs building.
         Bootstrapping nbmake
         MAKECONF file:       /etc/mk.conf
         TOOLDIR path:        /usr/src/../tools
         DESTDIR path:        /usr/src/../obj/destdir.amd64
         RELEASEDIR path:     /usr/src/../obj/releasedir
         Created /usr/src/../tools/bin/nbmake
         Updated makewrapper: /usr/src/../tools/bin/nbmake-amd64
         Tools built to /usr/src/../tools
         build.sh ended:      Sun Apr 21 19:06:55 JST 2019
===> .
===> Summary of results:
         build.sh command:    ./build.sh -O ../obj -T ../tools -X ../xsrc -x -U -j 6 release
         build.sh started:    Sun Apr 21 19:08:39 JST 2019
         NetBSD version:      8.0
         MACHINE:             amd64
         MACHINE_ARCH:        x86_64
         Build platform:      NetBSD 8.0 amd64
         HOST_SH:             /bin/sh
         MAKECONF file:       /etc/mk.conf
         TOOLDIR path:        /usr/src/../tools
         DESTDIR path:        /usr/src/../obj/destdir.amd64
         RELEASEDIR path:     /usr/src/../obj/releasedir
         Updated makewrapper: /usr/src/../tools/bin/nbmake-amd64
         Successful make release
         build.sh ended:      Sun Apr 21 20:43:35 JST 2019
===> .

releaseビルドが1時間半ほどで終わってしまいました。次に、www/firefoxパッケージをゼロからビルドしてみます。time(1)による計測結果は以下のとおりです。

sudo make package  44857.06s user 4751.50s system 104% cpu 13:11:23.04 total
sudo make package clean clean-depends  1056.22s user 368.98s system 38% cpu 1:01:58.16 total;
sudo make package clean clean-depends  1191.37s user 249.37s system 134% cpu 17:54.55 total
sudo make package clean  14737.58s user 2770.14s system 237% cpu 2:03:00.03 total

MAKE_JOBSには7を指定しました。また、何度かビルドに失敗しているので実行し直す必要がありました。user時間を足し合わせると61842.23秒、およそ17時間かかりました。FirefoxはGCCやLLVM・Rust・fontconfigのような巨大ソフトウェアに多数依存しているため、ゼロからビルドするとそれなりに速いプランでもこんなにかかります。しかし、一日数百円程度です。ビルド後はマシンを停止させ、1 Core、512MBのプランに変更しました。

shutdown -p nowについて

NetBSD上でshutdown -p nowを実行しても、ConoHaのコントロールパネルからはマシンが動いている扱いになったままになります。コンソールを見ると、キー入力を待ち受けている状態で止まったようです。

Console after exec shutdown

コントロールパネルから直接「停止」を押してマシンを停止させてください。