みなさん、こんにちは。
前回の記事で、私の手元のRaspberry Pi 3A+は、NetBSD 10.1が動作する「見通しのよい草原の家」へと生まれ変わりました。
しかし、ただ風が吹いているだけの草原にしておくのはもったいない。やはり、UNIXマシンの王道的な使い道といえば「ファイルサーバー」でしょう。ということで、現在 Raspberry Pi OS で稼動しているファイルサーバーを NetBSD で置き換えることにしました。
ただ、ここで大きな壁が立ちはだかります。
私が普段ファイルサーバーに使っているHDDは、セキュリティのために Veracrypt で暗号化されており、内部のファイルシステムは ext4 でフォーマットされているのです。
さらに、Veracryptはクロスプラットフォーム対応の強力なディスク暗号化ツールですが、残念ながらNetBSDは公式サポート外なのです。
「公式にないなら、使えない」と諦めるのは、WindowsやmacOSの世界の話です。
「ないなら、ビルドすればいい」
この草原の家にまだ家具はありませんが、家具を作る自由は無限にあります。今回は、Raspberry Pi 3A+という非力なマシン上の NetBSD で、Veracryptをソースコードからビルドし、この草原の家に堅牢な金庫を設置するまでの記録です。
先人の知恵と、わずかな希望
まずは情報収集です。NetBSDでVeracryptを動かしている人はいるのか?
広大なネットの海を探索すると、UnitedBSDのフォーラムで一筋の光を見つけました。
Veracrypt for NetBSD? – UnitedBSD
どうやらNetBSD 10以降であれば、いくつかの修正を加えることでソースからビルドできるようです。先人たちの開拓精神に感謝しつつ、私も後に続くことにしました。
1. 準備 – 道具を揃える
ビルド作業はSSH経由で行います。 まずは、大工道具(ビルドに必要なパッケージ)を pkgin でインストールします。
# root になる
su
# 必要なパッケージを一括インストール
pkgin install git byobu gmake yasm fuse pkg-config wxGTK32
# 一旦 root を抜ける
exit
ここで重要なのが byobu です。
Raspberry Pi 3A+でのビルドは長丁場になります。もしSSHの接続が切れても作業を継続できるよう、仮想端末環境であるbyobuを立ち上げて作業を行うのが安全です。
byobu
2. ソースコードの入手と修正
NetBSD用にパッチが当てられたソースコードをcloneします。
git clone https://github.com/erenright/VeraCrypt-NetBSD.git
続いて、Makefileを少しだけ修正します。デフォルトの記述ではインストールしたwxWidgetsのバージョンと合わないためです。
cd Veracrypt-NetBSD/src
vi Makefile
以下の行を見つけて修正します。
修正前:
export WX_CONFIG ?= wx-config
修正後:
export WX_CONFIG ?= wx-config-3.2
3. ビルド – メモリ不足との戦い
さあ、いよいよビルドです。
今回はサーバー用途であり、X環境(GUI)は使わないため、CUI版のみを生成する NOGUI=1 オプションをつけて実行します。
gmake NOGUI=1
コンパイラが走り出し、順調に進んでいるように見えました。しかし、しばらくして画面に無慈悲なエラーメッセージが。
c++: fatal error: Killed signal terminated program cc1plus compilation terminated.
gmake[1]: *** ... Error 1
gmake: *** [Makefile:471: all] Error 2
「Killed」。 これはプロセスが強制終了されたことを意味します。犯人は明白、メモリ不足です。
Raspberry Pi 3A+のメモリは512MB。現代の複雑なC++コードをコンパイルするには、あまりにも容量が少なすぎました。
ulimit -a
# ... memory (-m kbytes ) 422644 ...
確認してみると、やはりリソース制限も厳しそうです。 まずは論理的なメモリ制限を解除してみます。
su
# rootで制限解除
ulimit -m unlimited
しかし、これだけでは物理的なメモリ不足は解消しません。
さらにメモリ消費を抑えるために並列ビルド(-jオプション)は使わず、シングルスレッドでじっくり進めることにしました。
なお、exit すると設定が戻ってしまうため、ここからはrootのまま作業を続行することにします。
gmake clean
gmake -j1 NOGUI=1
……やはりダメです。同じ場所でKilledされます。512MBの限界か。
しかし、ここで諦めるわけにはいきません。物理メモリが足りないなら、ディスク(SDカード)を借りればいいじゃない。
禁断の スワップファイル 作成に手を出します。
# 2GB の swapfile を作成(SDカードの寿命を削る行為だが背に腹は代えられない)
dd if=/dev/zero of=/swapfile bs=1m count=2048
chmod 600 /swapfile
swapctl -a /swapfile
これで仮想的に2.5GBほどのメモリ空間を手に入れました。 三度目の正直。祈るような気持ちでビルドコマンドを叩きます。
gmake clean
gmake -j1 NOGUI=1
画面を流れるログを固唾を飲んで見守ること小一時間。 時折止まったかのように遅くなりますが、スワップしながら懸命に処理を続けています。
そしてついに……
WARNING: This platform may be unsupported. To avoid possible serious problems, please read the chapter pertaining to NetBSD in Readme.txt.
警告は出ましたが、ビルドコマンドが終了しました! エラーによる停止ではありません。完了です。
この警告文さえ、激戦を乗り越えた勲章のように見えてきます。
4. インストールと動作確認
生成されたバイナリをパッケージコマンドが通常配置されるフォルダにコピーします。
cp Main/veracrypt /usr/pkg/bin
震える手でバージョンを確認してみると…。
veracrypt --version
VeraCrypt 1.24-Update6
やった!表示されました。
Raspberry Pi 3A+という小さな箱庭の中で、Veracryptが産声を上げました。
5. 後片付け
最後に、役目を終えたスワップファイルを削除しておきます。SDカードをいたわるためにも、不要なスワップは消しておくのが吉です。
reboot
再起動後、スワップの割り当ては自動的に解除されているので、ファイルの実体を削除します。
rm /swapfile
次回予告 – まだゴールではない
これで、NetBSD上に「金庫(Veracrypt)」を設置することに成功しました。
しかし、まだ金庫が設置されただけです。中に入っている書類(ext4フォーマットのデータ)をNetBSDは標準では読めませんし、それをネットワーク越しに他のPCに見せる(Samba)設定もまだです。
次なるミッションは……「FUSEを使ってext4をマウントし、Sambaで共有する」こと。
この草原の家の改修はもう少し続きそうです。便利になりすぎた世の中で、一つ一つ積み上げていくこの感覚。やはり悪くありませんね。
本日も最後までお読みいただきありがとうございました。
それでは、よいNetBSDライフを!



