💡
この記事は Middleman 時代に書いた古いものです。記録のため、astro-notion-blog に移行していますが、あまり参考にしないでください。
VMware fusion と Ubuntu Server のインストール
Docker を使って大きめのシステムを作成したくなったため、Docker for Mac を止め、VMware fusion 上の Ubuntu Server で docker を動かすことにした。
-
すでに Brewfile で以下のように設定しているため、VMware fusion のインストールは終わっている。
cask "vmware-fusion"
- Ubuntu Server の Download サイトから Ubuntu Server 18.04.2 LTS をダウンロードする。
-
ダウンロードした ISO ファイルが正しいことを shasum で確認する。
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
-
ダウンロードした ISO イメージを使ってインストールする。ホスト名は dockerhost とした。ファイルシステムを xfs にした以外は通常通りのインストールをした。macOS 側と同じ hkob ユーザを設定した。以下、インストール後にいくつかの設定をした。
-
そのままだと sudo 時に名前の逆引きに失敗するので、/etc/hosts の 1 行目にに名前を追加した。
127.0.0.1 localhost.localdomain locahost dockerhost
-
apt を更新しておく。
sudo apt update; sudo apt upgrade
-
hkob ユーザに何か問題が会った時のために、別途 admin ユーザを作っておく。
sudo adduser admin
-
admin ユーザを sudo ユーザに登録しておく。
sudo gpasswd -a admin sudo
-
そのままだと sudo 時に名前の逆引きに失敗するので、/etc/hosts の 1 行目にに名前を追加した。
headless 起動の設定
Ubuntu Server は Docker 専用に使うため、GUI は必要ない。そこで通常は headless で起動したい。
-
vmrun というコマンドをターミナルから実行したいため、/usr/local/bin/vmrun の確認をする。以下のように Symbolic link になっていれば問題ない。
> 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
-
headless 起動は上記の vmrun に nogui オプションを設定することで実行できる。毎回コマンドに VM ファイルを設定するのが面倒なので、シェルスクリプトを作成しておく。
#!/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
- これで ubuntu.sh start とすると Ubuntu server がヘッドレスで起動する。
ssh の設定
macOS 側から色々と ssh アクセスすることがあるので、authorized_keys の設定などをしておく。
-
Ubuntu Server の IP アドレスを .ubuntu_ip というファイルに記載しておく。
echo 172.16.103.135 > .ubuntu_ip
-
ubuntu 側に .ssh フォルダを作成する。なお、macOS では fish を使っているので、`` ではなく () を使っている。
ssh (cat ~/.ubuntu_ip) -C mkdir -p .ssh
-
macOS 側の id_rsa.pub を ubuntu 側の authorized_keys にコピーする。
scp .ssh/id_rsa.pub (cat ~/.ubuntu_ip):.ssh/authorized_keys
-
公開鍵でログインできることを確認する。
ssh (cat ~/.ubuntu_ip)
-
ubuntu 側でも公開鍵を作っておく。
ssh-keygen
ubuntu → macOS の共有フォルダ設定(あまり使わない)
macOS のホームは、Ubuntu Server 側から読み書きできるようにしたい。以下の手順で設定する。
-
VMware fusion の共有設定で、hkob フォルダを「読み取り/書き込み」でアクセス許可する。
- この作業だけで自動的に /mnt/hgfs というフォルダに /Users/hkob がマウントされていた。
macOS → ubuntu の共有フォルダ設定 (NFS)
上記の設定で、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)
-
ダミーグループの tmpgroup を作成
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)
-
hkob グループを削除
admin@dockerhost:~$ sudo groupdel hkob
-
hkob グループを再作成
admin@dockerhost:~$ sudo groupadd -g 502 hkob
-
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
-
uid を変更。hkob ユーザのプロセスが動いていたら変更できないので、動いているプロセスを削除すること。
admin@dockerhost:~$ sudo usermod -u 502 hkob
-
hkob でログイン後、id コマンドで自分のアカウントの変更を確認
hkob@dockerhost:~$ id uid=502(hkob) gid=502(hkob) groups=502(hkob),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
-
nfs をインストール
hkob@dockerhost:~$ sudo apt install nfs-kernel-server
-
export の設定を /etc/exports に追記
echo '/home/hkob 172.16.103.1(rw,no_subtree_check)' | sudo tee -a /etc/exports > /dev/null
-
nfs-kernel-server を起動
hkob@dockerhost:~$ sudo systemctl start nfs-kernel-server
-
nfs-kernal-server を有効化
hkob@dockerhost:~$ sudo systemctl enable nfs-kernel-server
-
先ほど記載した /etc/exports の内容を更新
hkob@dockerhost:~$ sudo exportfs -ra
-
macOS 側で $HOME/bin/nfs_mount.sh を記述
#!/bin/sh sudo mount_nfs -P `cat $HOME/.ubuntu_ip`:/home/hkob $HOME/ubuntu
-
nfs_mount.sh に実行属性を付加
chmod +x ~/bin/nfs_mount.sh
-
nfs_mount.sh を実行
nfs_mount.sh
-
mount を確認
df 172.16.103.135:/home/hkob 536602632 13042304 523560328 3% 75357 134140835 0% /Users/hkob/ubuntu
-
umount の際に ubuntu の IP が必要となる。面倒なので、$HOME/bin/nfs_umount.sh を作っておいた。
#!/bin/sh sudo umount `cat $HOME/.ubuntu_ip`:/home/hkob
-
ubuntu をシャットダウンするときに nfs_umount を忘れそうなので、ubuntu.sh に umount を追加した。
"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 ;;"
これでだいたいやりたいことはできるようになった。