Walbrix 5.14.8
全体的に練り直していた Walbrixが再び公開しても良い程度には仕様が固まってきたので密やかに公開
1. 過去の Walbrixとの違い
残念ながら、かなりの部分において変わっているため過去の Walbrixとの互換性はありません。
1.1. XenからQEMU+KVMに変更
Xenのようなタイプ1ハイパーバイザーは優れた技術で、準仮想マシンも取り回しが大変しやすい良いものだったのですが、いかんせん Xenのユーザーは減少傾向にあり、ユーザーの減っているソフトウェアは新しいハードウェアへの対応が遅れる結果になりがちなので QEMU+KVMへシフトしました。ただし Xenは ARMアーキテクチャ向けに力を入れている様子ではあるのでそちらで発展していくのかもしれません。
1.2. LVM+XFSから Btrfsに変更
過去の Walbrixでは仮想マシンのストレージを配置するためのインフラとして LinuxのLVM(論理ボリュームマネージャ)を使用しており、その上でXFSを用いるようにしていましたが、ZFSやBtrfsといった最近のファイルシステムはボリュームマネージャとしての機能も併せ持つようになってきたので、管理をシンプルにするため LVMをやめて Btrfsでストレージを構成することにしました。ブロックデバイスの代わりに巨大なレギュラーファイルを仮想ディスクとして使用する形になるため性能の低下は避けられませんが、Walbrixのコンセプト的には管理が簡単なほうが合っていると思います。
1.3. OverlayFSの採用
2014年にLinux 3.18から OverlayFSが利用できるようになったので、ルートファイルシステムを squashfs+OverlayFSで構成しています(そのために独自の initramfsを開発しています)。OverlayFSといえば普通の人はDockerでの用途しか見覚えがないかもしれませんが、OSのルートファイルシステムとして使う人も稀にいるというわけです。
いわゆる仮想アプライアンスについても squashfsで配布+OverlayFSで実行という形式を取るようになっています。
1.4. initを OpenRCから systemdに変更
initを高機能化するのはUNIXの哲学に反するという意見も根強いですが、昨今のOSに求められる機能と柔軟さをシェルスクリプトでやり切れるかっていうとまあもう無理ですよね、というわけで systemd へ移行しました。Walbrixユーザーへの直接的な恩恵としては、起動が速くなったというのがあります。
1.5. ブロックデバイスに加えて仮想ファイルシステムも利用可能に
仮想マシンは基本的に実在のハードウェアを模したものの上で動作するため、ファイルの保存先を階層化されたファイルシステムではなくディスクイメージ(巨大な1個のファイル)という形で持たないといけないのですが、QEMUとLinuxには virtiofsという仮想ファイルシステムがあってホスト上のファイルシステムをゲストと共有できるためディスクイメージ不要の仮想マシンを作成できるようになりました。(ディスクレスVMは今までもNFSを使えばできただろうけどあれは扱いづらいことこの上ない)
が、Walbrix 5.14.8の時点で virtiofsには fcntl(F_SETLKW)が実装されていない ので現状ではロックの要らない素朴なファイルの置き場所としてしか使えず、実装待ちです(実装しようとする動きはたまに見られるのだが数年にわたり実現していない模様)。
ちなみに名前の似ている VirtFSは使用目的も似ているけど 9pという緩めのプロトコルを使用した別物で、POSIX的な要件はとても満たせないので混同しないように注意。
1.6. 独自GUIから Wayland+GTK4へ変更
かつての Walbrixでは方向キーと決定ボタン・キャンセルボタンを使用するゲーム機ライクなUIで基本操作が可能でした。これは難しいことを考えずに誰でも使えるようにしたいというこだわりからそうしていたもので、そのこだわりが伝わったごく一部のユーザーからは熱烈な支持を頂いていました。
でも、これ機能追加したり修正したりするのが死ぬほど大変なんです。なにせウィンドウひとつ開くのにも四角形を描画する処理からやってるので、新機能のために様々なUIコントロールをこさえようとしたら開発リソースはすぐに枯渇します。
散々悩みましたが、あきらめて標準的なディスプレイプロトコルであるWaylandとGUIツールキットGTK4を使うことにしました。なので従来は不要だったマウスが必要になっています(頑張ればキーボードだけでも操作できますが・・・)。
GTKを使うことでなんか普通の見た目になってしまったんですが、X Windowに一切依存しておらず Waylandネイティブで動作するのが自慢です。
1.7. 開発言語を Pythonから C++に変更
WalbrixのGUIやコマンドラインツールはもともと Pythonで書かれていたのですが、「静的型がないとしんどい 無理」ということで OCamlや Go や Rustや TypeScriptでの書き直しに挑んでは敗北、長いブランクがありつつもなんだかんだで30年近い付き合いになるC++に結局落ち着いたというそんないきさつになります。
1.8. OpenVPNからWireGuardに変更
「中央サーバへの接続」と呼ばれている機能を使うことで開発元との間でVPN接続を行いサポートを受けるために利用できるのですが、これに使用しているVPNを OpenVPNから WireGuardに変更しました。WireGuardは 2020年1月末から Linuxに標準搭載されている新しいVPNです。
WireGuardで使用されている楕円曲線暗号の鍵は短いのでQRコード化しやすく、WalbrixでもQRコードで接続承認の申請をできるようになっています。
2. Walbrix 5.14.8でまだできないこと
昔の Walbrixでできたけど新しいバージョンではまだできないことが色々あります。
2.1. 仮想マシンイメージのダウンロードによる仮想マシンの作成(a.k.a.仮想アプライアンス)
かつてのWalbrixで最も重要といえた機能なのですが、これがまだできません。Walbrix 5.14.8 の時点では新規作成の仮想マシンは スタブ仮想マシンとなります。
2.2. 仮想マシンのリネーム、複製、リサイズ、その他プロパティ変更
これらの操作はまだGUIからできません。Linuxコンソールでの操作となります。
2.3. 領域の新規追加
新しいハードディスクを追加してもGUIからそれを認識させることができません。Linuxコンソールでの操作となります。これは割とすぐに実装すると思います。
3. これから新しくできるようになる予定のこと
3.1. 仮想マシンのエクスポート
exFATでフォーマットされたUSBメモリやらハードディスクに仮想マシンイメージを tar.gz でエクスポートしたりそれを逆にインポートしたりといった機能をGUIからできるようにしようと思っています。フォーマットが exFATに限定なのは、
- Windows PCや Macを使って誰でも取り回しのできるフォーマットが望ましい。Linuxなんて普通の人は使えないんですよ?
- FATだと 4GBまでのファイルしか作成できないのでNG
- NTFSはオーバースペックだし Linuxは昔から扱いがあまり得意でない
という理由になります。
2021年9月30日 Walbrix Support