前回の続き。
記事はこちら↓
MacにVirtualBox + VagrantでAmazon Linux 2を導入(前置き・準備編)
今どきの仮想技術スゲーなw
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
local-hostname: ”ホスト名”
次にuser-data
#cloud-config #vim:syntax=yaml users: - default chpasswd: list: | ec2-user:”パスワード” ssh_pwauth: False ssh_authorized_keys: - ssh-rsa ”公開鍵の中身” locale: ja_JP.UTF-8 runcmd: - [ cp, /usr/share/zoneinfo/Asia/Tokyo, /etc/localtime] # NOTE: Cloud-init applies network settings on every boot by default. To retain network settings from first boot, add following 'write_files' section: write_files: - path: /etc/cloud/cloud.cfg.d/80_disable_network_after_firstboot.cfg content: | # Disable network configuration after first boot network: config: disabled
細かい説明はググればすぐわかるんだけど、
7行目でデフォルトユーザーである"ec2-user"のパスワードを指定。
8行目でsshでパスワードログインを有効にするなら”True”。ログインできないようにするなら”False”
9行目で~/.ssh/authorized_keysに登録する公開鍵の中身を記述する。
あとは日本語の設定とか諸々。
他にもyum updateとか書けば色々自動化できるんだけど、コードの書き方調べるより直接コマンド打ったほうが早いということで省略。
次にISOファイルを作成する。
seedconfigフォルダにmeta-dataとuser-dataの2ファイルのみがある状態で、以下のコマンドを実行する。
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でログインして以下のコマンドを実行する。
sudo yum update -y
次にdockerをインストール。実行ユーザーはec2-userとする。
sudo yum install -y docker sudo systemctl start docker sudo usermod -a -G docker ec2-user sudo systemctl enable docker
以上でdockerが自動起動するようになる。
以下のコマンドは任意。
俺の環境では起動時にエラーが出たので、そもそもプロキシを使わないから削除する。
sudo yum remove -y gssproxy
アップデートしたのでリブートもしておく。
sudo reboot
docker-composeもインストールする。2021/10/27時点での最新版は2.0.1。
最新バージョンはここで確認。
バージョン2からインストール方法が変わっててちょっと苦労した。
mkdir -p $HOME/.docker/cli-plugins 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 chmod +x $HOME/.docker/cli-plugins/docker-compose sudo ln -s $HOME/.docker/cli-plugins/docker-compose /usr/local/bin/docker-compose
環境構築その4:Homebridgeのdockerイメージ作成
dockerが使えるようになったので、Homebridgeのイメージを作成する。
ec2-userのホームディレクトリにdocker-compose.ymlファイルを作成。中身は以下の通り。
version: '2' services: homebridge: image: oznu/homebridge:latest restart: always network_mode: host environment: - PGID=1000 - PUID=1000 - HOMEBRIDGE_CONFIG_UI=1 - HOMEBRIDGE_CONFIG_UI_PORT=8581 - TZ=Asia/Tokyo volumes: - ./volumes/homebridge:/homebridge
詳しい説明はgithubを参照。
Linuxサーバ以外にもラズベリーパイやSynologyやQNAPのNASにも対応している。
WindowsとMacのdockerには対応していない。
ymlファイルの作成ができたら、そのディレクトリで以下のコマンドを実行する。
初回はイメージファイルをDLするので時間がかかるかも。
docker-compose up -d
以下のコマンドで正常に起動できたかどうかがわかる。
docker-compose logs -f
以下のように8桁のコードが表示されてればOK。
また、ブラウザで以下のURLにアクセス。
http://<仮想サーバのIPアドレス>:8531/
HomebridgeのUIが表示できれば成功!
初回ログインはadmin/admin。
ここからiPhoneのホームアプリの登録はまた今度!
----------------------------
続きを書きますた。ホームアプリの登録じゃないですが・・・。
Linux起動時にrandom: crng init doneと表示されて起動に時間がかかる問題
Linuxの勉強って大事だね~
0 件のコメント:
コメントを投稿