Mac上にVirtual Box+dockerでHomebridgeを立てる

2021/10/27

HomeKit Linux Mac

t f B! P L

前回の続き。

記事はこちら↓


Homebridgeを使いたく、家にまだ転がっているmac miniに入れようとしていて、

単純にMacに直接Homebridgeを入れるのではなくて、

VirtualBox上のAmazon Linux+DockerでHomebrigeを動かそうという話。

前回だとVagrantも使おうとしたんだけど、Vagrantだとブリッジ接続が上手く行かなかったので、

仮想マシン作成は手動でやることに・・・。


環境

イメージ図はそのうち作ります・・・w

  • 実ホスト:Mac mini  2011(OSはHigh Sierra)
  • 仮想マシン:VirtualBox上のAmazon Linux 2
  • コンテナ:Amazon Linux 2上のDocker(中身はAlpine Linux)

環境構築その1:Seed.isoファイル作成

AWS上に公開されているオンプレミス用Amazon Linux 2の仮想マシンイメージは既にOS等はセットアップ済み。

そこにホスト名などの個別設定を行うために”cloud-init”というツールが使われているんだけど、

そのcloud-init用の設定を仕込むためにISOイメージを作成する。

とあるフォルダ(seedconfig)を作成し、以下の2つのファイルを作成する。

  • meta-data
  • user-data

それぞれ以下の通り記述する。

まずはmeta-data

  1. local-hostname: ”ホスト名”

次にuser-data

  1. #cloud-config
  2. #vim:syntax=yaml
  3. users:
  4. - default
  5. chpasswd:
  6. list: |
  7. ec2-user:”パスワード”
  8. ssh_pwauth: False
  9. ssh_authorized_keys:
  10. - ssh-rsa ”公開鍵の中身”
  11. locale: ja_JP.UTF-8
  12.  
  13. runcmd:
  14. - [ cp, /usr/share/zoneinfo/Asia/Tokyo, /etc/localtime]
  15.  
  16. # NOTE: Cloud-init applies network settings on every boot by default. To retain network settings from first
  17. boot, add following 'write_files' section:
  18. write_files:
  19. - path: /etc/cloud/cloud.cfg.d/80_disable_network_after_firstboot.cfg
  20. content: |
  21. # Disable network configuration after first boot
  22. network:
  23. config: disabled

細かい説明はググればすぐわかるんだけど、

7行目でデフォルトユーザーである"ec2-user"のパスワードを指定。

8行目でsshでパスワードログインを有効にするなら”True”。ログインできないようにするなら”False”

9行目で~/.ssh/authorized_keysに登録する公開鍵の中身を記述する。

あとは日本語の設定とか諸々。

他にもyum updateとか書けば色々自動化できるんだけど、コードの書き方調べるより直接コマンド打ったほうが早いということで省略。


次にISOファイルを作成する。

seedconfigフォルダにmeta-dataとuser-dataの2ファイルのみがある状態で、以下のコマンドを実行する。

  1. hdiutil makehybrid -o Seed.iso -hfs -joliet -iso -default-volume-name cidata seedconfig/

するとコマンドを実行したフォルダに”Seed.iso”ファイルが出来上がるのを確認する。


環境構築その2:VirtualBox仮想マシン作成

次にVirtualBox上で仮想マシンを作成する。

IaC(Infrastructure as a Code)っぽく、すべてコマンドラインでも可能なんだろうけど、コードを調べながら書くのが面倒なのでGUIでポチポチ。

まずはVirtualBoxで新規作成画面。

「エキスパートモード」に変更する。


仮想マシンを設定する。

仮想ハードディスクはDLした.vdiファイルを指定する。

  • 名前:任意の名前(ここでは"homebridge-sv"とする)
  • マシンフォルダー:デフォルト
  • タイプ:Linux
  • バージョン:Linux 2.6 / 3.x / 4.x (64-bit)
  • メモリーサイズ:1024MB
  • ハードディスク:すでにある仮想ハードディスクファイルを使用する

「追加」を押して、DLした.vdiファイルを指定。


「作成」をクリック。


仮想マシンが作成されるので、「設定」をクリック。


「コントローラー:IDE」横のメディア追加ボタンをクリック。


「追加」をクリックして、先程作成したSeed.isoを指定する。


「空」はそのままなので、不要であれば削除してもOK。


次に「ネットワーク」をクリックし、アダプター1の割り当てを「ブリッジアダプター」にし、

名前はホストのNICを選択する。

これで仮想マシンが同じLAN内に属することになる。


次に仮想マシンを起動する。


環境構築その3:OSアップデート、dockerインストールとか

大半はcloud-initで設定したけど、アップデート等は手動でやる。

ec2-userでログインして以下のコマンドを実行する。

  1. sudo yum update -y

次にdockerをインストール。実行ユーザーはec2-userとする。

  1. sudo yum install -y docker
  2. sudo systemctl start docker
  3. sudo usermod -a -G docker ec2-user
  4. sudo systemctl enable docker

以上でdockerが自動起動するようになる。


以下のコマンドは任意。

俺の環境では起動時にエラーが出たので、そもそもプロキシを使わないから削除する。

  1. sudo yum remove -y gssproxy

アップデートしたのでリブートもしておく。

  1. sudo reboot

docker-composeもインストールする。2021/10/27時点での最新版は2.0.1。

最新バージョンはここで確認。

バージョン2からインストール方法が変わっててちょっと苦労した。

  1. mkdir -p $HOME/.docker/cli-plugins
  2. curl -L https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-`uname -s`-`uname -m` -o $HOME/.docker/cli-plugins/docker-compose
  3. chmod +x $HOME/.docker/cli-plugins/docker-compose
  4. sudo ln -s $HOME/.docker/cli-plugins/docker-compose /usr/local/bin/docker-compose

環境構築その4:Homebridgeのdockerイメージ作成

dockerが使えるようになったので、Homebridgeのイメージを作成する。

ec2-userのホームディレクトリにdocker-compose.ymlファイルを作成。中身は以下の通り。

  1. version: '2'
  2. services:
  3. homebridge:
  4. image: oznu/homebridge:latest
  5. restart: always
  6. network_mode: host
  7. environment:
  8. - PGID=1000
  9. - PUID=1000
  10. - HOMEBRIDGE_CONFIG_UI=1
  11. - HOMEBRIDGE_CONFIG_UI_PORT=8581
  12. - TZ=Asia/Tokyo
  13. volumes:
  14. - ./volumes/homebridge:/homebridge

詳しい説明はgithubを参照。

Linuxサーバ以外にもラズベリーパイやSynologyやQNAPのNASにも対応している。

WindowsとMacのdockerには対応していない。


ymlファイルの作成ができたら、そのディレクトリで以下のコマンドを実行する。

初回はイメージファイルをDLするので時間がかかるかも。

  1. docker-compose up -d

以下のコマンドで正常に起動できたかどうかがわかる。

  1. docker-compose logs -f

以下のように8桁のコードが表示されてればOK。


また、ブラウザで以下のURLにアクセス。

http://<仮想サーバのIPアドレス>:8531/

HomebridgeのUIが表示できれば成功!


初回ログインはadmin/admin。

ここからiPhoneのホームアプリの登録はまた今度!

----------------------------

続きを書きますた。ホームアプリの登録じゃないですが・・・。

検索

Blog Archive

Popular Posts

About Me

自分の写真
性別:男
年齢:ついに40over
趣味:Snowboard、パソコン、iPhone、子育て

仕事:ユー子の社内SEとしてサーバ、NW等のインフラ全般をやってます

日々生活していく中で思ったことなどをつらつらと書いていきます。

どうぞよろしく!

ブログランキング

ブログランキング・にほんブログ村へ

QooQ