LoginSignup
8
3

『体験しながら学ぶネットワーク技術入門』の検証環境を Apple Silicon Mac 上で構築

Last updated at Posted at 2024-01-16

【2024/1/19追記】公式サポートページにて Apple Silicon 対応が発表されました。そのため,本記事は全て古い情報となります。


前記事の続編です。

この書籍の公式サポート環境は,Ubuntu 20.04 on WSL2 on Windows 11 (x86_64) という環境です。非公式サポートながら,Ubuntu 20.04 on Multipass on Intel Mac という環境も考慮されており,書籍の中で検証環境インストール法が1ページにわたり説明されているほか,サポートページにもMac用セットアップスクリプトがダウンロードできます。

残念ながら,現状(2024/1/16)では Apple Silicon 搭載 Mac では動作しませんが,サポートページには「対応検討中」とあります。

image.png

前記事で分析したとおり,Apple Silicon Mac で動作しない主な理由は使用する Docker イメージが x86_64 (amd64) 版であることに起因します。ですが,DockerHub のレポジトリを見ると,まさに今 ARM 版 Docker イメージの作成が進んでおり,Apple Silicon への対応が進められていると見られます。

というわけで,もう少し待てば Apple Silicon への対応がアナウンスされるものと期待されます。

ですが,公式対応を待ちきれなかったので,新しい ARM 版 Docker イメージを利用して,自前で Apple Silicon 対応を行いました。

Apple Silicon Mac での検証環境構築手順

1. Multipass をインストール

Multipass の公式サイトから macOS 版の Multipass の pkg インストーラをダウンロードしてインストールするか,または Homebrew で Multipass をインストールします。

Homebrew から Multipass をインストールする場合
$ brew install --cask multipass

2. Intel Mac 用セットアップスクリプトをダウンロードしてホーム直下に展開

サポートページから Intel Mac 用セットアップスクリプト tinet_mac.zip をダウンロードし,ホームディレクトリ直下に tinet ディレクトリとして配置します。

3. Intel Mac 用設定ファイルを Apple Silicon 用に書き換え

*.yaml の Docker イメージを指定している部分について,Docker イメージ名の末尾に _arm を付け加えます。

設定ファイルの書き換え
$ cd ~/tinet
$ sed -i '' '/^[[:space:]]*image: /s/$/_arm/' *.yaml

4. Multipass で Ubuntu 20.04 の仮想マシンを作成

$ multipass launch 20.04 --cpus 2 \
  --name UBUNTU \
  --mount $HOME/tinet:/mnt/c/tinet

5. Multipass のシェルに入る

$ multipass shell UBUNTU

6. 仮想マシン内の root ユーザのパスワードを設定して su する

ubuntu@UBUNTU:~$ sudo passwd root
New password:〈パスワード入力〉
Retype new password:〈パスワード再入力〉
passwd: password updated successfully
ubuntu@UBUNTU:~$ su
Password:〈パスワード入力〉
root@UBUNTU:/home/ubuntu#

7. 仮想マシン内でセットアップスクリプトを実行

root@UBUNTU:/home/ubuntu# bash /mnt/c/tinet/setup_mac.sh

8. 仮想マシン内で ARM 版 Linux 用 tinet バイナリをビルドして差し替え

上記セットアップスクリプトでインストールされる tinet のバイナリは x86_64 用になっているので,自前で arm64 用 tinet バイナリをビルドして,setup_mac.sh がインストールしたものと差し替えます。

仮想マシン内の root で
cd /tmp
# tinetのレポジトリをクローン
git clone https://github.com/tinynetwork/tinet tinet && cd $_
# Dockerイメージのgoコンパイラを使ってtinetをビルド
docker run --rm -i -t -v $PWD:/v -w /v golang:1.17 go build
# カレントディレクトリに生成されたARM版tinetバイナリをデプロイして差し替え
cp tinet /bin
cp tinet /usr/bin
# 作業用ディレクトリ・Dockerイメージを削除
cd
rm -rf /tmp/tinet
docker rmi golang:1.17

9. チェックスクリプトで確認

root@UBUNTU:/home/ubuntu# bash /mnt/c/tinet/check_mac.sh
(中略)
========================================================
All checks passed successfully.
========================================================

All checks passed successfully. と出れば成功です。

10. 検証環境の構築

root@UBUNTU:/home/ubuntu# tinet up -c /mnt/c/tinet/spec_01.yaml | sh -x
root@UBUNTU:/home/ubuntu# tinet conf -c /mnt/c/tinet/spec_01.yaml | sh -x

これがエラーなく終了すれば検証環境構築成功です。

11. 検証環境の動作確認

root@UBUNTU:/home/ubuntu# docker exec -it cl1 /bin/bash
root@cl1:/#

ホスト名の表示が @UBUNTU から @cl1 に変わります。

root@cl1:/# curl -k https://www.example.com/
sv1.example.com

sv1.example.com と返ってくれば,検証環境が正しく動作していることになります。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3