macOSAppNavi macOS VMware 2019年 6月 30日
Docker を使って大きめのシステムを作成したくなったため、Docker for Mac を止め、VMware fusion 上の Ubuntu Server で docker を動かすことにした。
cask "vmware-fusion"
hkob@hMBP ~/Downloads> echo "ea6ccb5b57813908c006f42f7ac8eaa4fc603883a2d07876cf9ed74610ba2f53 *ubuntu-18.04.2-live-server-amd64.iso" | shasum -a 256 --check
ubuntu-18.04.2-live-server-amd64.iso: OK
127.0.0.1 localhost.localdomain locahost dockerhost
sudo apt update; sudo apt upgrade
sudo adduser admin
sudo gpasswd -a admin sudo
Ubuntu Server は Docker 専用に使うため、GUI は必要ない。そこで通常は headless で起動したい。
> ls -l /usr/local/bin/vmrun
lrwxr-xr-x 1 hkob admin 54 6 4 18:05 /usr/local/bin/vmrun -> /Applications/VMware Fusion.app/Contents/Library/vmrun
ln -s /Applications/VMware\ Fusion.app/Contents/Library/vmrun /usr/local/bin
#!/bin/sh
VMRUN="vmrun -T fusion"
VM="$HOME/Virtual Machines.localized/Ubuntu (64 ビット) Server 18.04.2.vmwarevm/Ubuntu (64 ビット) Server 18.04.2.vmx"
case "$1" in
"start" ) $VMRUN start "$VM" nogui ;;
"stop" ) $VMRUN stop "$VM" ;;
"suspend" ) $VMRUN suspend "$VM" ;;
"stopsoft" ) $VMRUN stop "$VM" soft ;;
"suspendsoft" ) $VMRUN suspend "$VM" soft ;;
* ) echo "ubuntu.sh [start|stop|suspend|stopsoft|suspendsoft]" ;;
esac
macOS 側から色々と ssh アクセスすることがあるので、authorized_keys の設定などをしておく。
echo 172.16.103.135 > .ubuntu_ip
ssh (cat ~/.ubuntu_ip) -C mkdir -p .ssh
scp .ssh/id_rsa.pub (cat ~/.ubuntu_ip):.ssh/authorized_keys
ssh (cat ~/.ubuntu_ip)
ssh-keygen
macOS のホームは、Ubuntu Server 側から読み書きできるようにしたい。以下の手順で設定する。
上記の設定で、ubuntu 側から macOS のフォルダは見えるようにはなったが、権限などが色々と面倒そうだった。 実際、docker を共有フォルダの上で動作させたところ、権限の問題があって色々とトラブった。 ということで、逆に ubuntu 側のディスクを macOS 側でアクセスできた方が便利かと考えた。 Linux と macOS なので、せっかくなので NFS で共有することにしてみる。 NFS の場合、ubuntu 側と macOS 側で uid を揃える必要がある。 今回は、ファイルがまだほとんど入っていない ubuntu 側の uid (1000) を macOS と同じ uid (502) に設定することにした。 なお、ログインユーザしているユーザの uid は変更できないので、先ほど作成した admin ユーザで実施する。 参考: Ubuntu で uid、gid、グループ名の変更
admin@dockerhost:~$ id hkob
uid=1000(hkob) gid=1000(hkob) groups=1000(hkob),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
admin@dockerhost:~$ sudo groupadd -g 3000 tmpgroup
admin@dockerhost:~$ sudo usermod -g tmpgroup hkob
admin@dockerhost:~$ id hkob
uid=1000(hkob) gid=3000(tmpgroup) groups=3000(tmpgroup),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
admin@dockerhost:~$ sudo groupdel hkob
admin@dockerhost:~$ sudo groupadd -g 502 hkob
admin@dockerhost:~$ sudo usermod -g hkob hkob
admin@dockerhost:~$ id hkob
uid=1000(hkob) gid=502(hkob) groups=502(hkob),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
admin@dockerhost:~$ sudo groupdel tmpgroup
admin@dockerhost:~$ sudo usermod -u 502 hkob
hkob@dockerhost:~$ id
uid=502(hkob) gid=502(hkob) groups=502(hkob),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
hkob@dockerhost:~$ sudo apt install nfs-kernel-server
echo '/home/hkob 172.16.103.1(rw,no_subtree_check)' | sudo tee -a /etc/exports > /dev/null
hkob@dockerhost:~$ sudo systemctl start nfs-kernel-server
hkob@dockerhost:~$ sudo systemctl enable nfs-kernel-server
hkob@dockerhost:~$ sudo exportfs -ra
#!/bin/sh
sudo mount_nfs -P `cat $HOME/.ubuntu_ip`:/home/hkob $HOME/ubuntu
chmod +x ~/bin/nfs_mount.sh
nfs_mount.sh
df
172.16.103.135:/home/hkob 536602632 13042304 523560328 3% 75357 134140835 0% /Users/hkob/ubuntu
#!/bin/sh
sudo umount `cat $HOME/.ubuntu_ip`:/home/hkob
"stop" ) nfs_umount.sh; $VMRUN stop "$VM" ;;
"suspend" ) nfs_umount.sh; $VMRUN suspend "$VM" ;;
"stopsoft" ) nfs_umount.sh; $VMRUN stop "$VM" soft ;;
"suspendsoft" ) nfs_umount.sh; $VMRUN suspend "$VM" soft ;;"
これでだいたいやりたいことはできるようになった。