こたつとコード

エンジニアの読書手帖

『体験しながら学ぶ ネットワーク技術入門』の検証環境を M4 Mac で作るために OrbStack を使用した

ネットワークの勉強のため みやたひろしさん著の 体験しながら学ぶ ネットワーク技術入門 を読み始めた。 ただ、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 も試したが、同様のエラーが発生した。

現時点ではダウングレードが回避策?

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を立ち上げてみたことで関連サービスにどういった違いがあるかが学べた。

また、『体験しながら学ぶ ネットワーク技術入門』は想像以上にがっつり手を動かすし、そのためのスクリプトの配布などが手厚くとても勉強を進めやすい。仕事でも特に触れないと学習の時に用語だけ学んで具体では想像つかないということになりがちなのでこういった本はとてもありがたい。