前回提示したアプローチの片方。Docker Desktop for Macで動かないHomebridgeを動かすため、Linux版Dockerを仮想マシン上で動かす。ホストはM1 Mac mini。
UTMのエミュレーションを用いて動かすため無料で実践可能で、AppleシリコンMacに対応する。
おさらい

BurmillaOSは最低限のLinux環境と自動起動するDockerのみを搭載した最小規模のOSで、仮想環境にDockerを載せるのに最適。
これをUTMで動かすことで、Docker Desktopの代わりにBurmillaOSを使ってDockerコンテナを管理する。
BurmillaOSであればHomebridgeを含むほぼ全てのDockerコンテナを扱えるため、HomebridgeもDockerから外れることなく統括管理できる。当然Portainerの管理対象にもなる。
BurmillaOS単体では必要最低限のコマンドラインしか使えないのが難点だが、Portainerさえ自動再起動するように設定しておけばUTMから起動するだけでPortainerのGUIが使えるようになる。Portainer強すぎない?
QEMUを用いたエミュレーションであるためDocker Desktopよりパフォーマンスは落ちてしまうが影響は大きくなく、Docker Desktop for Mac故の微妙な物足りなさを改善できることを考えれば及第点といったところ。
実装手順
UTMをダウンロード(リンク)、アプリケーションフォルダに配置。Mac App Storeから有償でダウンロードすれば寄付できるが、Webからそのまま無料でダウンロードしても変わりはない。
BurmillaOSはISOファイルをGitHubよりダウンロードしておく。
仮想マシンの準備
UTMを起動したら新規仮想マシンを作成していく。
エミュレート→Linux→BurmillaOSのISOを指定。
ハードウェアは初期設定でOKだが、既にメモリ使用量が見えているなら足りるように増やしてor削ってOK。




ストレージは慎重に、大きめに設定。後から足りなくなって容量を調整しても認識されずに、新しいイメージをpullできなくなって詰んでしまうことがある。あった(1敗)。

指定サイズまで即座に使われるわけではなく良くある可変容量なので、適当に32/64/128辺りのキリの良い数字にしておくのが無難。
複数バージョンのイメージを管理することもあるため多めにしておいて損はない。


容量が設定できたら(今回は64GB)進んで、共有ディレクトリは設定せず次へ。
概要で名前を好きに変更し、仮想マシン設定を開くにチェックを入れて保存。仮想マシンの詳細設定が出てくる。


左メニューのQEMUよりUEFI起動のチェックを外す。
その後メニューのディスプレイから、仮想ディスプレイカードをvirtio-vgaに変更。これをしておかないとそもそも起動しないので注意。
続いて左メニューからネットワークをチェック。

ネットワークモードをブリッジ(詳細)に設定して、MACアドレスをランダムで一度変更しておく。
初期設定の共有ネットワークだと、ホストマシン以外から各種WebUIにアクセスできないため非常に不便。今回の目的であるHomebridgeもHomekitへの追加が出来なくなってしまうため確実に変更。
終わったら既に存在するドライブ2つをチェックしていく。


イメージの種類から、ISOファイルがCD/DVD(ISO)イメージ・インストール先の仮想ディスクがディスクイメージと設定されていることを確認。これはインストールの過程でISOを/dev/sr0・HDDを/dev/sdaにマウントしておく必要があるため。
ちなみにこの画面で仮想ディスクの容量が変更できるが、BurmillaOSでは後から容量を変更しても反映されなかったのでおそらく無意味(1敗)。
ここまで設定が完了したら、保存して準備完了。仮想マシンを起動させ、インストール作業を行なっていく。
BurmillaOSのインストール

起動したら初手Enter。しなくても3秒待てば勝手に起動開始するが負けた気がする。
初回起動は数分かかるのでゆっくり待機。この時期のホットココアは美味しいのでおすすめ。
起動完了したら早速コマンドラインが使えるようになる。この時点でDockerコマンドは全て使えるので試してもいいけど、再起動するとデータが全て消えるので記事作成のためのやり直しだしさっさとインストールに移る。

一応ディスクが正しくマウントされているか確認しておく。cdコマンドで移動した後のlsコマンドでチェック可能。
cd /devで移動した後lsで表示。一覧にsr0とsdaがいてsda1がいない(=余計なドライブが付いてない)ことを確認しておく。完了したらcd ../でルートに戻ること。

sdaとsr0がいること・sda1がいないことを確認できたらOK。これでISOが正しくCDイメージとして認識されていること・仮想ディスクが正しく認識されていること・余計な仮想ディスクが存在しないことが確定する。
続けてインストールコマンドを1発。初期ユーザーrancherのログインパスとなる「パスワード」は好きな文字列に置き換える。US配列になるのでだるいけど我慢。
|
1 |
sudo ros install -d /dev/sda --append "rancher.password=パスワード" |
参考までにJISのMacの場合、よく使うキー入力は以下のようになる。覚えておくとこの後が楽になる。
- 数字/アルファベット→そのまま
- 「:」→Shift+「;」
- 「=」→^キーそのまま
- 「_」→Shift+「-」
- 「(」「)」→Shift+9とShift+0(右に1つずれる)
- 「”」→Shift+「:」
コマンドを打つとインストール続ける?(Continue)って聞かれるので「y」とだけ打ってEnter。
割とすぐ終わって、再起動する?(Continue with reboot)と聞かれるけどガン無視して左上の電源マークからシャットダウン。

そのまま仮想マシンのリストで右クリック・設定へ移動し、仮想マシンからISOイメージを削除する。こうしないといつまでもライブブートを繰り返してしまう。


終わったら再度起動すると、ISOなしに仮想ディスクから起動するはず。これでデータ保存が行えるようになる。
このログイン画面で現在のローカルIPアドレスが表示されるので控えておくと良い。ifconfigは使えないしip aは画面が小さすぎて大事なところが表示されないので、ここくらいしかまともに確認できない。
起動画面ではユーザー名「rancher」、そして設定したパスワードでログイン可能。
ついでに画面に表示されている通りのコマンドを打ち込めば、今後の初回起動が劇的に短くなる。ただしどうやら長い時間で自動アップデートとかやってくれてるっぽいので慎重に。



ここまで終われば、あとは好きなDockerコンテナを突っ込んで起動することが可能になる。
Homebridgeの導入


dfでストレージの空き容量が見れるので、十分な空きがあることを確認しておく。
Homebridgeのコンテナは以下のコマンド1行で導入可能。Dockerイメージであるため、node・Config UI X含めて全て揃った環境が用意される。
公式で用意されたコマンドにdetachとrestart alwaysオプションを足したもの。
|
1 2 |
docker run —-detach -—restart always --net=host --name=homebridge -v $(pwd)/homebridge:/homebridge homebridge/homebridge:latest |
標準ではコマンドラインにそのままHomebridgeが展開されてしまうのでdetachでバックグラウンド実行とし、restart alwaysで再起動時の自動起動もオンにする。
完了したらdocker ps -aで起動しているかの確認が可能。


そしてLAN内のデバイスから「http://[BurmillaOSのIPアドレス]:8581」にアクセスすれば Homebridgeが起動するはず。


右上システム情報の最下部のDockerが「はい」に、中央下段のメモリは仮想マシンのリソース通りになっているはず。
これでHomebridgeの各プラグインの設定を行えるようになった。この時点でHomekitに追加も可能。



所感
これを組み上げるのにリアルで累計15時間近く飛んだけど、完成してしまえばWebUI一つでHomebridge含めたサーバー機能を管理可能になるので仕上がりが綺麗。
これより綺麗な方法を見つけてしまっているので今からそっちに着手するけど、これはこれで便利な使い方だと思うので記事に残しておくことにした。
HomebridgeのDockerコンテナがmacOS対応してくれるのが一番早いんだけど、数年フォーラムが荒れた後に落ちていたので改善する気配は全くない。
まあDockerに関するいい勉強になったので、この知識を得られたことを喜びつつ色々模索を続けてみようと思う。




