Mac版VirtualBoxにUbuntuをインストールしてMac⇔Ubuntu間でファイル共有を行う

久しぶりに VirtualBox を使ったらファイル共有の設定でちょっと時間を食ってしまったのでメモ。

# TL;DR

1. 共有フォルダとして使いたいフォルダをホスト側に作成する
2. VirtualBox の仮想マシンの設定からゲスト側の共有フォルダ設定をする
3. VirtualBox Guest Additions をインストールする
4. 共有フォルダを使いたいユーザーをグループ `vboxsf` に足す
5. 仮想マシンを再起動する

# 詳細

## 環境

- VirtualBox
    - 6.0.12 r133076 (Qt5.6.3)
- ホストOS (確認方法 `sw_vers`)
    - ProductName:	Mac OS X
    - ProductVersion:	10.14.6
    - BuildVersion:	18G4032
- ゲストOS (確認方法 `cat /etc/lsb-release`)
    - DISTRIB_ID=Ubuntu
    - DISTRIB_RELEASE=16.04
    - DISTRIB_CODENAME=xenial
    - DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

上記以外の環境でも恐らく基本的な作業は変わらないはず。。。

## 手順

Ubuntu のインストールが済んだ VirtualBox の仮想マシンは用意できているとします。

### 共有フォルダとして使いたいフォルダをホスト側に作成する

Mac の好きなところに共有用のフォルダを作成する。
今回は `/path/to/shared_folder` に作成したとする。
Mac 上の共有設定をする必要はない。

### VirtualBox の仮想マシンの設定からゲスト側の共有フォルダ設定をする

1. 仮想マシンの「共有フォルダー」の設定項目をクリックする。  
    <img width="500" alt="Oracle VM VirtualBox マネージャーに表示される仮想マシンの「共有フォルダー」の設定項目" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112663/da873dd0-8173-89b7-4ee8-61976a055440.png">
2. 仮想マシンの「共有フォルダー」のダイアログが開くので、プラスマークのついたフォルダのアイコンをクリックする。   
    <img width="500" alt="仮想マシンの「共有フォルダー」" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112663/ad9eddae-9e92-5732-dfb3-028248a3a028.png">
3. 設定ダイアログが開く。
    - 「フォルダーのパス」に Mac に作成した共有用のフォルダのパス
    - 「フォルダー名」はパスを入力すると自動で入力される。
    - 「自動マウント」にチェックを入れておくと仮想マシン起動時に自動的に共有フォルダがマウントされるようになる。
    - 「マウントポイント」には `/media/`[^1] に続けて Ubuntu 上で共有フォルダとして使いたい任意のフォルダ名を設定する。今回は `any_name_of_folder` 。  
    <img width="500" alt="仮想マシンの「共有フォルダー」設定例" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112663/f1300f9c-0ad8-d306-6fa3-b02e66edbee7.png">[^2]
    <img width="500" alt="仮想マシンの「共有フォルダー」設定済み" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112663/299da3ad-a462-7231-61f7-b6b8be5580f0.png">

[^1]: 調べたところでは `media` フォルダ以外のところに置くこともできるらしいがちょっと手がかかるみたいで、特に `media` フォルダ外野な理由もないので試していない。
[^2]: 仮想マシンが起動中の場合は「永続化する」というチェック項目が増え、このチェックを入れない場合はその起動中のみ有効な、「一時的な共有フォルダー」に設定が登録される。<br><img width="500" alt="仮想マシン起動中の場合" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112663/baf62c86-9388-7f14-16d0-c91de297b11b.png">

### VirtualBox Guest Additions をインストールする

Guest Additions をインストールすることで、ホスト OS とゲスト OS でデータのやり取りができるようになり、共有フォルダ経由のファイルのやりとりの他に、

- クリップボードの共有
- ドラッグ＆ドロップ

も可能になる。[^3]
インストールするには画面上部のメニューバーから  
`Devices` → `Insert Guest Additions CD image ...`  
を選択し、表示されるダイアログで「実行する」を選択する。

<img width="500" alt="Insert Guest Additions CD image ..." src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112663/823dabc5-1172-58f6-ea0a-31e7e5ce506e.png">
<img width="500" alt="インストール確認ダイアログ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112663/eed796f9-1cc6-e68e-8ea2-60a578f1717e.png">


[^3]: 設定を有効にする必要がある。<br><img width="500" alt="コピペやペーストの有効化設定箇所" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112663/b7983f18-015b-2bb6-dc67-eb42b60136f5.png">


### 共有フォルダを使いたいユーザーをグループ vboxsf に足す

通常のユーザーには `media` フォルダ以下へのアクセス権限がないため、毎回

`sudo ls /media/any_name_of_folder`

のように `sudo` を付けてスーパーユーザー権限（root 権限とも言う）でコマンドを実行しないといけない。
`vboxsf` グループに属するユーザーなら共有フォルダを利用できるため、このグループに共有フォルダを利用可能にしたいユーザーを追加する。

1. デスクトップで右クリックをして「端末を開く」を選択する。
2. `sudo gpasswd -a name_of_user vboxsf`  
    上記のコマンドの `name_of_user` をユーザー名[^4]に変更してコマンドを実行する。


[^4]: もしユーザー名が不明な場合は、 `users` コマンドを実行しユーザー名を確認する。


### 仮想マシンを再起動する

設定を有効にするために `reboot` コマンドを実行するなり何なりして仮想マシンを再起動する。