M1 MacのDocker Desktop環境をBurmillaOS on UTMに全移行した話(IKEv2 VPNサーバー構築/Open WebUI)

移行方法は前回参照。今回はHomebridge以外の要素をまとめていく。

IKEv2 VPNの構築

コンテナ実行〜初期設定

以下のコマンド1発で起動する。[DDNSアドレス]は各自取得してあるものに設定、[仮想マシンのIPアドレス]は各自置き換え。ルーター側でUDP500とUDP4500番ポートを開放しておく。

  • 仮想マシンの./ikev2-vpn-dataに証明書等が出力される
  • DDNSアドレスをホスト名とする
  • IKEv2のみとする

これで立ち上がるので、コンテナ内に入って必要な数の証明書を作る。
コンテナに入るコマンドは以下。

これでコンテナ内にSSH接続っぽくされるので、GitHubに書かれたコマンド群とスクリプトが使えるようになる。

デフォルトで[vpnclient]というクライアントが作成されている。クライアント追加と削除は以下。

これで必要な証明書が仮想マシン内に生成されているはず。ちゃんとデバイスの数ぶん作っておくこと。
mobileconfigも生成されるので、Appleデバイスはこれをインストールするだけで設定が完了する。

証明書を転送する

UTMのファイル共有を使う場合

UTMのファイル共有機能を使ってのやり取りが可能。

ユーザーフォルダ(burmilla)直下に「Shared」フォルダを作り、その中にUTMの共有フォルダが出てくるようにした。lsコマンドで確認すれば中身が一緒であることが分かる。必要となる場面は多くないが、VPNソフトのキーをやり取りする等で必要になる。

コンテナを作る時にボリュームを共有フォルダにマウントするよう設定しておけば、macOSからDockerコンテナのボリュームに直接アクセス可能。
更に共有フォルダをiCloudDriveに設定しておくと、iPhoneやiPadからボリュームの中身を取り出せるのでVPNプロファイルの設定が捗る。
共有するフォルダは、事前にFinderでアクセス権を与えておく必要があることに注意。

再起動するたびにマウント解除されるので、共有フォルダに依存したコンテナを扱うには向かない。証明書がマウントされずに接続できなくなったりするので、コンテナのボリュームは大人しく仮想マシンの中にした方がいい。
カスタムサービスを作って自動化すればいけるかもしれないけど、めんどくさいし出番もないのでわたしは大人しくやり取り方法の一つに留めた。

scpを使う場合

SSH接続が完成しているなら、SSH専用のscpコマンドで転送が可能。ホスト側1コマンドで完結するため、Automatorやcrontabで自動化も可能。

ちなみにパスを丸コピすればiCloudに転送することも出来る。同期を待てば各デバイス用の証明書をAirDropしなくて済むので便利。

Open Web UIでホストOSのOllamaを使用する

導入方法は以前の記事通り。DockerDesktopではなくBurmillaOS内蔵のDockerを使用。

Ollamaは初期設定だとホストマシンの中からのみAPIアクセス可能な仕様。Open WebUIはこの仕様を用いて、適宜localhostのAPIを叩くことで実現している。
しかし今回Homekit含む他機能のためにブリッジ接続としてしまったため、localhostではアクセスできない。そのためOllama側でAPIをLAN内から使う設定と、Open WebUIでそれにアクセスする設定が必要になる。

もちろんBurmillaOSの中でOllamaを動かすことも可能だしそのためのDockerコンテナもあるのだけど、Ollama本体は非常にMacのスペックを重要視するアプリであるため、仮想マシンのリソースに縛られないように(そして仮想マシンのリソースを絞れるように)ホストOSで動かしておきたい。

設定方法は単純。macOS側でOllamaを起動する直前に環境変数を変更するスクリプトを叩くことと、接続先をmacOSのローカルIPアドレスとすること。

環境変数を変更するコマンドは以下の通り。

これを実行した後にOllamaを起動させればlocalhostに限らずLAN内でAPIアクセスが可能になるため、BurmillaOS内のOpen WebUIからもアクセス可能となる。

コマンドはそのまま実行してもいいけど再起動のたびに必要になるので、Automatorなどで自動化してしまうといい。コマンド実行→Ollama起動のアクションを含めたAppを作成して、ログイン項目に設定すれば十分。

更にOpen WebUI側の管理者パネル→設定→接続、Manage Ollama API Connectionsから、「http://[macOSのIP]:11434」へと接続先を変更。
正しく入力されていれば右上に接続されたことが表示されるはず。

これでOllamaにホストのリソースをフル活用させつつ、BurmillaOS内のDockerコンテナで実行するOpen WebUIで利用が可能となった。

テスト環境だからいつものGemma2JPN入ってなかった・・・

ちなみにOpen WebUIのコンテナは容量をめちゃめちゃ食うため、仮想マシン作成時に盛っておかないと余裕で容量不足で詰むので注意。
具体的には最低限でも恐らく10GB、今後の更新を見据えるなら32GB以上は欲しいイメージ。最低限でもいいが、更新するたびにPortainerからイメージを削除する必要が出てくるため結構面倒。

Homebridge・Portainer、そしてOpen WebUIを入れた状態。
サイズが9GB近くまで膨れ上がっている

補足

PortainerによるWebUI管理

Portainerを導入すれば、Homebridgeコンテナ含む他のコンテナが止まっていてもメンテナンス可能。というかBurmillaOSにないGUIを扱えるので、Portainer入れるだけで一気にメンテが楽になる。
以下の1行でPortainerを実行できる。アクセスは「http://[IPアドレス]:9000」で。

これでPortainerにログイン可能になり、GUIで多くの調整が行えるようになるため快適。

また今回はしなかったけど、SSH接続とPortainerを組み合わせれば遠隔でDocker Desktopとほぼ変わらない操作性を確保可能になる。

SSH接続

仮想マシン上で作業するのが面倒であればSSHも通せる。アクセスしたいデバイスから以下のコマンドを打ち込めばOK。

インストール時に決めたパスワードを要求され、ログインするとSSHアクセスが通る。
GUIが存在しないBurmillaOSは直接操作とSSHアクセスで完全に同じ操作が可能なので、今後は仮想マシンを起動してSSHアクセスを通すだけで済む。
このSSHによりBurmillaOS全体の管理が可能なため、Portainerと合わせれば仮想マシンを直接操作する必要はなくなる。

System DockerとUser Docker

BurmillaOSはインストール直後からDockerを扱うことが出来るが、実はシステム機能の多くもまたDockerコンテナで構成されている。
そういったシステム機能を司るコンテナを稼働させているのがSystem Dockerで、通常使うdockerコマンドで操作されるものはUser Dockerと呼ぶ。

System Dockerはsudo system-dockerコマンドで操作することが可能。基本的にはUser Dockerを使うべきだが、WebUIを使う際にSystem Dockerに入れるとシステム機能のコンテナもチェックできてOS内部のメンテナンスが捗る・・・かもしれない。

所感

失敗続きだったIKEv2のVPNが組めたのは完全に盲点で、おかげで高速VPNを確保することができた。
Sub6かWi-Fi環境であれば100Mbpsオーバーの速度で通信が安定するため、実用的な広さになってきた5Gを活かすには最適である。もちろんフリーWi-Fiのセキュリティ確保にも。

Ollamaは最近モデル開発が盛んで、コーディングにチャットにテキスト処理にマルチモーダルと、各種用途に応じたモデルが多く存在している。それらの稼働にMacは非常に向いているため、OpenWebUIを通して活用出来ると一段階進んだオートメーションを組むことも出来る。

Screenshot

またうちの子はついにWeb検索を実装したので、パラメータ数に縛られない情報量で回答が可能になった。引き続き日本語の綺麗さや情報引用の正確さはパラメータ数によって大きく変動するので、低いパラメータ数で言語処理を整えている7B~14B辺りの中規模のLLMの価値が上がったと認識している。

そしてその中規模を10万円以下でまとめて動かせるM4Macminiは強いよなあという話。買い替え・・・カイカエ・・・

カテゴリー: Apple, Mac, オートメーション, ガジェット, 効率化, 自動化/効率化 タグ: パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です