環境
- lima 0.11.3
やりたいこと
limaを使うとアーキテクチャの壁を超えて仮想マシンを構築できるが、デフォルトではホストOS側とネットワークの共有されていないため、 Macからネットワーク経由でアクセスすることはできない。
それをいなんとかしたい
昔は自分で結構しなきゃいけなかったようだが、最近のlimaではVirtualBoxみたいに簡単に共有設定が出来る。
やり方
実は公式ドキュメントに詳しく載ってる
まずvde-2とlima-vm/vde_vmnetってのをビルドインストールしなきゃいけない
必要なビルドツールをインストール
brew install autoconf automake
vde-2を適当にダウンロードして解凍
ビルドに必要なファイル生成
autoreconf --install
./configure が生成されるので実行
./configure
ビルド
make sudo make install
lima-vm/vde_vmnet も同様にダウンロードしてインストール
sudo make PREFIX=/opt/vde install
ホスト(MacOS)側のルーティングをlimaが弄る必要もあるのでsudoなしで実行できるようにする
limactl sudoers | sudo tee /etc/sudoers.d/lima
設定方法
デフォルトだと limaのVMの設定は ~/.lima/<インスタンス名>/lima.yaml
に格納される。(例えば lima start docker.ymlなら ~/.lima/docker/lima.yaml
)
そこに設定を足して limactl stop <インスタンス名>
limactl start <インスタンス名>
すればおk
limaのネットワーク設定種類
いくつかある
shared
networks: - lima: shared
ホストとlimaの仮想VM同士共通のネットワークを作成し共有する方法。例ではlima0が作成されて 102.168.105.2 でアクセス可能
3: lima0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:55:55:76:5b:27 brd ff:ff:ff:ff:ff:ff inet 192.168.105.2/24 metric 100 brd 192.168.105.255 scope global dynamic lima0 valid_lft 83948sec preferred_lft 83948sec inet6 fd17:fb46:3fa2:c696:5055:55ff:fe76:5b27/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 2591982sec preferred_lft 604782sec inet6 fe80::5055:55ff:fe76:5b27/64 scope link valid_lft forever preferred_lft forever
host
networks: - lima: host
sharedと似てるが、仮想VM内同士の共有も可能な点が異なる。同様にlima0が作成されて 192.168.106.2
でアクセス可能。
3: lima0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:55:55:76:5b:27 brd ff:ff:ff:ff:ff:ff inet 192.168.106.2/24 metric 100 brd 192.168.106.255 scope global dynamic lima0 valid_lft 86194sec preferred_lft 86194sec inet6 fe80::5055:55ff:fe76:5b27/64 scope link valid_lft forever preferred_lft forever
bridged
networks: - lima: bridged
ホストと同じIPをlimaの仮想VMも持つ。ので例えばlimaの仮想VM内で python -m http.server -p 8000
すれば 192.168.1.117:8000
または localhost:8000
でアクセス可能
3: lima0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:55:55:76:5b:27 brd ff:ff:ff:ff:ff:ff inet 192.168.1.117/24 metric 100 brd 192.168.1.255 scope global dynamic lima0 valid_lft 259031sec preferred_lft 259031sec inet6 fe80::5055:55ff:fe76:5b27/64 scope link valid_lft forever preferred_lft forever
ネットワーク自体の設定はどこ?
~/.lima/_config/networks.yaml に定義されている
デフォルトだとこんな感じ
# Paths to vde executables. Because vde_vmnet is invoked via sudo it should be # installed where only root can modify/replace it. This means also none of the # parent directories should be writable by the user. # # The varRun directory also must not be writable by the user because it will # include the vde_vmnet pid files. Those will be terminated via sudo, so replacing # the pid files would allow killing of arbitrary privileged processes. varRun # however MUST be writable by the daemon user. # # None of the paths segments may be symlinks, why it has to be /private/var # instead of /var etc. paths: vdeSwitch: /opt/vde/bin/vde_switch vdeVMNet: /opt/vde/bin/vde_vmnet varRun: /private/var/run/lima sudoers: /private/etc/sudoers.d/lima group: everyone networks: shared: mode: shared gateway: 192.168.105.1 dhcpEnd: 192.168.105.254 netmask: 255.255.255.0 bridged: mode: bridged interface: en0 # bridged mode doesn't have a gateway; dhcp is managed by outside network host: mode: host gateway: 192.168.106.1 dhcpEnd: 192.168.106.254 netmask: 255.255.255.0