このブログはNintendo Wiiでホスティングされている
(blog.infected.systems)- 実際の Nintendo Wii が NetBSD 10.1 と
lighttpdで静的な Hugo ブログを配信しており、実験が続いているあいだ読者は Wii から直接配信されたページを見ている - Wii 向け NetBSD ポートは、古い趣味的なポートとは異なり、最新の安定リリース と daily HEAD ビルドが提供されていて、実運用ワークロードを載せてみられるほど保守状態が良好だった
- インストールは Wii のソフトモッドで Homebrew Channel を起動し、
wii.img.gzを SD カードに書き込んだあと、SSH、静的ネットワーク、pkgin、lighttpdを構成する流れで行う - Wii の PowerPC 750 系シングルコア CPU は静的 HTTP を処理できるが、現代的な TLS 暗号化リクエスト を並列で大量に処理するのは難しいため、Caddy が前段で TLS 終端と ACME 証明書管理を担当する
- 再起動後に Wiimote とセンサーバーが必要になるという制約はあったが、アイドル時消費電力は約 18W、月間電力使用量は約 13.2kWh で、おもちゃのような実験が実際のインフラ学習環境になった
Wii で実際にブログを配信する実験
- 実験が進行しているあいだ、実際の Nintendo Wii がこのブログを配信している
- Wii のシステム負荷は live(-ish) status page で確認できる
- 出発点は、汎用 OS を汎用目的ではないハードウェアで動かしてみたいという関心だった
- 過去にも PS3 の Yellow Dog Linux、PS2 Linux、Dreamcast Linux、PSPLinux のような例があった
- ただし PSP Linux のカーネルイメージは 2008 年に最後にビルドされ、Dreamcast Linux は 2001 年にビルドされた 2.4.5 カーネルを使っていたため、長期運用ワークロードには向いていなかった
NetBSD の Wii ポートがこの実験を可能にした
- NetBSD の Web サイトのインストールメディア欄では、Wii が Raspberry Pi や一般的な x86 マシンのような第一級の対象と並んで表示されている
- Wii 向け NetBSD ポートは、2024 年 12 月の NetBSD 10.1 最新安定リリースへリンクしている
- daily HEAD builds も Wii 向けに構成されている
- 保守状態が生きていたため、実運用ワークロードを Wii にデプロイする実験が可能で、そのワークロードがこのブログだった
ハードウェアと性能条件
- 実験用の Wii は EMF Camp 2024 Swap Shop で入手した個体だった
- Wii のシングルコア Broadway CPU は IBM PowerPC 750 系列の延長線上にある
- この系統は 1998 年の Apple Bondi Blue iMac にまでさかのぼる
- 商用の同系統チップである PowerPC 750CL は最大 TDP が 9.8W で、Wii に入っている版よりクロックが約 33% 高い
- シングルコア、1990 年代後半のアーキテクチャベース、10W 未満の TDP という条件のため、計算性能は限られる
- PowerPC 750 系列は宇宙・衛星分野でも使われており、耐放射線版の RAD750 が存在する
- NASA の資料で PowerPC 750 の使用例を確認できる
- 火星探査車 Curiosity) と Perseverance) にも関連チップの使用例がある
Wii のソフトモッドと NetBSD のインストール
- Wii で署名されていないコードを実行するために Wilbrand exploit を使用する
- Wilbrand は SD カードで Wii Message Board のメッセージを保存・読み込みする機能を利用し、署名されていないコードの実行を可能にする
- この過程で HackMii をブートし、Homebrew Channel をインストールする
- 作業にはコンソールの MAC アドレスと、SD カードに置くファイルの生成が必要で、ブラウザベースのツールがこの処理を担う
- 大きな SDHC カードで Wilbrand を実行すると問題があり、1GB の non-SDHC カードで最もよく動作した
- NetBSD 用の SD カードは、NetBSD サイトから
wii.img.gzイメージをダウンロードして用意する- Wii は SDXC 以上をサポートしないため、32GB に制限される
- NetBSD は Wilbrand より大きなカードに対して敏感ではなく、高速で品質のよい 32GB SDHC カードが選ばれた
- Raspberry Pi Imager を使うと、イメージの展開、書き込み、検証をまとめて処理できる
- NetBSD の Wii イメージは、Homebrew Channel から通常のホームブリューアプリのように直接起動できるメタデータと構造を備えている
- Wii ポートの主要な作者と思われる NetBSD developer Jared McNeill に功績がある
初期システム構成
- NetBSD 起動後、USB キーボードは正常に動作するが、リモート管理のため SSH を設定した
- SSH デーモンはデフォルトで動作しており、
rootパスワードの設定と、sshd_configへのPermitRootLogin yesの追加が必要だった - 静的ネットワーク設定は
/etc/ifconfig.axe0を編集して構成する - ネットワークアダプタには公式の RVL-015 Wii LAN Adapter を使用した
dmesgでは ASIX Electronics AX88772 USB 2.0 10/100 Ethernet controller と表示される- NetBSD 起動後は NetBSD ドライバを使えるため、一般的な USB アダプタも理論上は動作すると見込まれる
パッケージ管理と Web サーバ構成
- NetBSD の
pkginパッケージマネージャは、環境変数を設定したあとpkg_add pkginでインストールする - パッケージパスには
https://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/evbppc/10.1/All/を使用する - インストールしたパッケージには
bsdfetch、iperf3、lighttpd、nano、rsyncが含まれる - Web サーバには、リソース制約のある環境に合った lighttpd を選択した
lighttpdのサンプル rc スクリプトを/etc/rc.dにコピーし、/etc/rc.confにlighttpd=YESを追加してから起動する- 既定の静的コンテンツパスは
/srv/www/htdocsである - ブログは Hugo でビルドされた静的ページ群なので、
rsyncでファイルをコピーしたあと標準 HTTP でそのまま配信できた
TLS 負荷と Caddy リバースプロキシ
- 長時間の負荷テストの結果、PowerPC 750 は現代的な TLS で暗号化された複数ページを同時に配信すると負荷が大きいことが分かった
- リソース確保のため、NetBSD でデフォルト起動する一部サービスを無効化した
devpubd、dhcpcd、inetd、mdnsd、postfixを停止/etc/mailer.confでsendmail、mailq、newaliasesを/bin/trueに変更し、関連プロセスの起動を防いだ
ntpdはシステム RAM の 15.6% を使用するため無効化した- 時刻同期は必要なので、
ntpdate time.cloudflare.comを毎時:42に実行するようcrontabに追加した - 最終的に、ブログの TLS 終端 は Wii の前段に置かれた Caddy インスタンスが担当する
- Caddy はリバースプロキシとして動作し、暗号化と ACME 証明書管理を処理する
- Caddy ではキャッシュオプションは有効にしていない
- すべてのリクエストは Wii が直接処理し、この文章の画像まで含めるとページ全体の読み込みはほぼ正確に 1MB である
- Caddy 層では既知のスクレイパーの User-Agent リクエストをブロックし、Wii に転送されないようにしている
- ブロック基準には known scraper User Agents を使用した
状態監視の構成
- TLS 終端を Caddy に移したことで、Caddy の Prometheus exporter を利用できるようになった
- このデータを InfluxDB + Grafana スタックに取り込み、サイト負荷を監視している
- Wii 自体には Prometheus exporter のような追加プロセスは直接載せていない
- 代わりに簡単なシェルスクリプトを作成し、
crontabから 15 分ごとに実行して、システム状態を Web ルートの HTML ファイルに出力している - 状態ページには
uname -aやuptimeのような情報が表示される - 完全な状態ページは blog.infected.systems/status で確認できる
運用上の制約と電力使用量
- 全体の構成は予想よりはるかにうまく動作し、インストールも簡単だった
- NetBSD を再起動すると、NetBSD アプリだけが再起動するのではなく、Wii コンソール全体が再起動して Wii Menu に戻る
- カーネルパッチやシステムアップグレード後は、Wiimote とセンサーバーが運用インフラの必須構成要素になる
- UPS 監視ベースのテストでは、Wii はアイドル時にホームラボ全体の消費電力へ約 18W を追加した
- 計算上の月間電力使用量は約 13.2kWh である
- 英国の電気料金基準では月額約 £3.47 と計算され、一部クラウド事業者の VPS より安い
- 長い週末のあいだの楽しい実験で、引き続きうまく動くならしばらく維持するつもりだ
- 人為的な制約を加えたデプロイ環境では学びが多いという理由で、この種の実験に関心がある
2026 年 2 月更新
- 記事公開後、Wii を NetBSD で直接起動させる方法を複数の人が教えてくれた
- 方法は Priiloader をインストールし、NetBSD を自動起動する Homebrew アプリとして設定すること
- この設定を使えば、任務必須の Wiimote なしでも完全な ヘッドレス運用 が可能になる
2件のコメント
使っていないAndroidスマホにDebianを入れてWebサーバーを動かしていた頃を思い出しますね
なぜCaddyとlighttpdを同時に使うのかと不思議に思いましたが、静的ファイルだけをWiiで処理し、残りは別のマシンのCaddyで処理する形のようですね。