ネットワークの勉強のため みやたひろしさん著の 体験しながら学ぶ ネットワーク技術入門 を読み始めた。 ただ、M4 Mac で検証環境を作る際に本書で提示されている Multipass をうまく動作させられなかったので OrbStack を使用して検証環境を構築しました。
動作環境
自分の動作環境は次の通り。
- Mac mini
- Apple M4
- Sequoia 15.3.1
- multipass 1.16.2+mac
Apple M4 で Multipass が動かない
本の環境構築手順では Multipass で Ubuntu VM を立ち上げることが前提になっている。
$ multipass launch 20.04 --cpus 2 --name UBUNTU --mount /Users/user01/tinet:/mnt/c/tinet
しかし Apple M4 では以下のエラーが発生して起動できなかった。
launch failed: The following errors occurred: Unexpected error in object_property_find_err() at ../../../qom/object.c:1330: qemu-system-aarch64: Property 'host-arm-cpu.sme' not found
*なお、Ubuntu 22.04・24.04 も試したが、同様のエラーが発生した。
現時点ではダウングレードが回避策?
- MacOS Mac Mini M4 qemu-system-aarch64: Property 'host-arm-cpu.sme' not found #3842
- macOS Instances fail to launch after updating to 1.16.2+mac on M4 Pro #4851
multipass に立っていた issue を見ると、1.15.x 系の途中から修正され 1.16.2 系で問題が再発したとのこと。そのため、ダウングレードすると m4 mac でも使用できるようになりそう。 今回はそもそも勉強目的で読んでいるので、multipass を使用しない方法を調べてみたところ OrbStack を見つけたので使用してみた。
OrbStack を使用しての解消
OrbStack とは
OrbStack とは、Mac 専用の軽量仮想化ツール。Docker コンテナと Linux VM の両方を一つで動かせる。Docker Desktop の代替ツールとしても注目を集めている(らしい)。
セットアップ手順
OrbStack のインストール
brew install orbstack
インストール後、OrbStack アプリを起動して初期設定を完了させる。
Ubuntu VM の作成
orb create ubuntu:22.04 UBUNTU
VM に入る
orb shell -m UBUNTU
マウントの確認
OrbStack は /Users 以下を VM 内に自動マウントする。追加設定不要で以下のパスにアクセスできる。
ls /Users/{自分のユーザー名}/tinet
スクリプトの実行のトラブル
本付属の setup_mac.sh を実行する際、いくつかのトラブルが発生した。
トラブル1: systemd-resolved がマスクされている
Failed to restart systemd-resolved.service: Unit systemd-resolved.service is masked.
OrbStack が DNS を独自管理するために systemd-resolved を無効化していた。以下で解除して再実行。
*ここはそこまで調べきれずに対応したので、後ほど問題が出るかもしれない。
# VM内での実行 sudo systemctl unmask systemd-resolved sudo systemctl enable systemd-resolved sudo systemctl start systemd-resolved sudo bash setup_mac.sh
トラブル2: tinet バイナリのパスが異なる
スクリプトが Multipass 用のマウントパス /mnt/c/tinet を参照しているが、OrbStack では /Users/{自分のユーザー名}/tinet が正しいパス。手動でコピー/移動/シンボリックを貼るなどで対応する。
sudo cp /Users/{自分のユーザー名}/tinet/tinet /usr/bin/tinet sudo chmod +x /usr/bin/tinet
動作確認
本書付属のスクリプトで動作確認も行えるようになっていたので実施。
sudo bash check_mac.sh
# All checks passed successfully. と表示されれば OK
まとめ
『体験しながら学ぶ ネットワーク技術入門』の検証環境の構築を OrbStack で実施した例を記載した。今のところ特に学習に支障は出ていない。 普段はアプリケーションエンジニアをなりわいにしているので、Docker Desktop でコンテナさえ立てれれば良いというくらいだったが、今回VMを立ち上げてみたことで関連サービスにどういった違いがあるかが学べた。
また、『体験しながら学ぶ ネットワーク技術入門』は想像以上にがっつり手を動かすし、そのためのスクリプトの配布などが手厚くとても勉強を進めやすい。仕事でも特に触れないと学習の時に用語だけ学んで具体では想像つかないということになりがちなのでこういった本はとてもありがたい。