VirtualBox共有フォルダーをArch Linuxゲストで利用する

Arch Linuxをゲストマシンにインストールしている場合に、VirtualBoxの共有フォルダーを利用する方法を説明します。

VirtualBoxでは、ゲストマシンにGuest Additionsをインストールすることで、ホストマシンのフォルダーをゲストマシンと共有できます。Guest AdditionsのインストールはArch Linuxの場合、次の2種類の方法があります。

- Guest Additions CDイメージの挿入
- pacmanで、virtualbox-guest-utilsまたはvirtualbox-guest-utils-noxパッケージをインストール

Guest Additions CDイメージの挿入では、Guest AdditionsのバージョンがVirtualBox本体に常に対応していることが利点になります。私は、こちら方法で正常に共有フォルダーが使えるようになりました。

pacmanを使う場合のインストール方法は、[Arch Wiki](https://wiki.archlinux.jp/index.php/VirtualBox#Guest_Additions_.E3.82.92.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB "VirtualBox - ArchWiki")に記載されています。ただし私は、こちらの方法では共有フォルダーは使えませんでした。

そこで、Guest Additions CDイメージの挿入からインストールします。

## ホストマシンでの共有フォルダーの設定

ホストマシンでVirtualBoxの画面から、共有フォルダーを設定してください。

1. VirtualBoxマネージャーを起動します。VirtualBoxマネージャーの画面が表示されます
1. 共有フォルダーを設定したいゲストマシンを選択します。
1. ［設定］をクリックします。選択したゲストマシンの設定画面が開きます。
1. ［共有フォルダー］タブをクリックします。共有フォルダーの項目が表示されます。
1. ［+］をクリックします。追加する共有フォルダーを設定する画面が開きます
1. 追加する共有フォルダーを設定します
    - ［フォルダーのパス］で共有したいフォルダーを選択します
    - ［フォルダー名］を入力します。この名前は、ゲストマシンでマウントする場合などに使います。ここでは、hogeとします
    - ［読み込み専用］は、必要に応じてチェックを入れます。チェックを入れた場合、共有フォルダーへのゲストマシンからの書き込みはできなくなります。
    - ［自動マウント］はチェックを入れないままにします
    - ［永続化する］はチェックを入れます。入れない場合は一時的な共有フォルダーとなり、ゲストマシンのシャットダウン時に設定が無効になります
1. ［OK］をクリックします。ゲストマシンの設定画面に戻ります
1. ［OK］をクリックします。ホストマシン側で共有フォルダーが設定され、VirtualBoxマネージャーの画面に戻ります

## 必要なパッケージのインストール

Guest Additionsをインストールするためには、ゲストマシンにbase-develグループのパッケージと、linux-headersパッケージが必要です。これらのパッケージをpacmanでインストールします。以下、ゲストマシンでの作業はrootユーザーとして行います。

```
[root@archlinux ~]# pacman -S linux-headers
```

```
[root@archlinux ~]# pacman -S base-devel --needed
```

## Guest Additions CDイメージの挿入

ホストマシンで、VirtualBoxゲストマシンのウィンドウのメニューバーから［デバイス-Guest Additions CDイメージの挿入］を選択します。

Guest Additions CDイメージがゲストマシンに挿入されます。

## CDイメージのマウント

ゲストマシンでCDイメージをマウントします。ここでは、`/mnt/dvdrom`をマウント先にします。

```
[root@archlinux ~]# mount 
```

### CD-ROMのデバイス名の確認
lablkコマンドで、CD-ROMのデバイス名を確認します。

```
[root@archlinux ~]# lsblk
```

```:実行結果
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda  8:0    0    8G  0 disk
|-sda1   8:1    0  511M  0 part /boot
`-sda2   8:2    0  7.5G  0 part /
sr0 11:0    1 55.3M  0 rom
```

この場合は、`sr0`がCD-ROMのデバイス名です。

### マウント先ディレクトリーの作成

マウント先のディレクトリーがない場合は作成します。

```
[root@archlinux ~]# mkdir /mnt/dvdrom
```

### マウントの実行

mountコマンドにCD-ROMのデバイス名とマウント先を指定し、マウントを実行します。

```
[root@archlinux ~]# mount /dev/sr0 /mnt/dvdrom
```

```:実行結果
mount: /mnt/dvdrom: WARNING: device write-protected, mounted read-only.
```

### マウントの確認

lsコマンドで、マウントが正常にできたかを確認します。

```
[root@archlinux ~]# ls /mnt/dvdrom
```

```:実行結果
32Bit        TRANS.TBL               VBoxWindowsAdditions-x86.exe  runasroot.sh
64Bit        VBoxLinuxAdditions.run      VBoxWindowsAdditions.exe
AUTORUN.INF  VBoxSolarisAdditions.pkg        autorun.sh
OS2      VBoxWindowsAdditions-amd64.exe  cert
```

## Guest Additionsの実行

Linux用のGuest Additionsインストール実行ファイルである`VBoxLinuxAdditions.run`を実行します。

```
[root@archlinux ~]# sh /mnt/dvdrom/VBoxLinuxAdditions.run
```

```:実行結果
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.2.20 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 5.2.20 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules.  This may take a while.
VirtualBox[Guest^Additions: Running kernel modules will not be replaced until the system is restarted
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: modprobe vboxsf failed
```

最終行の「VirtualBox Guest Additions: modprobe vboxsf failed」は正常にインストールが完了した場合でも表示されるようです。

### ゲストマシンの再起動

インストールが完了したら、ゲストマシンを再起動します。

```
[root@archlinux ~]# reboot
```

## フォルダーの共有

### vboxadd-serviceの状態確認

コンピューターの再起動後、vboxadd-serviceの状態を確認します。

```
[root@archlinux ~]# systemctl status vboxadd-service
```

```:実行結果
vboxadd-service.service
   Loaded: loaded (/opt/VBoxGuestAdditions-5.2.20/init/vboxadd-service; enabled; vendor preset: dis...
   Active: active (running) since Tue 2018-10-23 08:24:34 UTC; 1min 32s ago
  Process: 329 ExecStart=/opt/VBoxGuestAdditions-5.2.20/init/vboxadd-service start (code=exited, st...
    Tasks: 8 (limit: 1140)
   Memory: 1.9M
   CGroup: /system.slice/vboxadd-service.service
       `-340 /usr/sbin/VBoxService --pidfile /var/run/vboxadd-service.sh

Oct 23 08:24:34 archlinux systemd[1]: Starting vboxadd-service.service...
Oct 23 08:24:34 archlinux vboxadd-service[329]: vboxadd-service.sh: Starting VirtualBox Guest Addit...
Oct 23 08:24:34 archlinux vboxadd-service.sh[332]: Starting VirtualBox Guest Addition service
Oct 23 08:24:34 archlinux vboxadd-service.sh[339]: VirtualBox Guest Addition service started
Oct 23 08:24:34 archlinux systemd[1]: Started vboxadd-service.service
```

`Active: active (running)`と表示される場合は、vboxadd-serviceが正常に動作しています。

### マウント先ディレクトリーの作成

ここでは、`/mnt/vbox`をマウント先のディレクトリーにします。マウント先のディレクトリーがない場合は作成します。

```
[root@archlinux ~]# mkdir /mnt/vbox
```

### マウントの実行

mountコマンドにCD-ROMのデバイス名とマウント先を指定し、マウントを実行します。hogeは、ホストマシンでの共有フォルダーの設定で［フォルダー名］に入力した値です。また、オプションでファイルの所有者IDや所有グループIDを指定できます。指定しない場合、所有者と所有グループはrootになります。

```
[root@archlinux ~]# mount.vbox hoge /mnt/vbox -o uid=1000,gid=1000
```

### マウントの確認

lsコマンドで、マウントが正常にできたかを確認します。

```
[root@archlinux ~]# ls /mnt/vbox
```

正常にマウントできた場合、共有フォルダーにあるファイルやフォルダーが表示されます。

## 自動マウントの設定
Arch Linux起動時に共有フォルダーが自動でマウントされるようにするには、`/etc/fstab`に次の記述を追加します。

```:/etc/fstab（一部）
# VBox Share Folder
hoge     /mnt/vbox   vboxsf    nofail,uid=1000,gid=1000   0    0
```

`hoge`はホストマシンでの共有フォルダーの設定で［フォルダー名］に入力した値、`/mnt/vbox`はマウント先のディレクトリーです。

`nofail`は、共有フォルダーをマウントできない場合には無視することを意味します。この指定がないと、共有フォルダーがマウントできない場合にArch Linuxが正常に起動できなくなります。私の場合、VirtualBoxのバージョンアップ時にGuest Additionsが起動できなくなり、Arch Linuxが起動できなくなったことがありました。

## まとめ

VirtualBoxでは、Guest Additions CDイメージの挿入からGuest Additionsをゲストマシンにインストールすることでホストマシンとファイル共有できます。