VirtualboxのUbuntu ServerにOSXホストのフォルダをマウントする

Virtualbox仮想マシン内にインストールしたUbuntu Server14に、OSXホスト側からフォルダをマウントする。
ここまでの過程は下記を参照。giraffydev.hatenablog.com
giraffydev.hatenablog.com

目的はこうだ。

一般的にlinux環境で動作するサーバーサイドアプリケーションを作ろうと考えた時、macやwindows内にwebやrdbmsサーバーを設定して、切りが良い所でLinuxサーバーにアップロードして動作確認をする。もしくはSSHを経由して、Linux上でVimやEmacsで開発をする事になる。

前者のメリットは、使い慣れた環境で作業出来る点、デメリットはOSが異なることでプログラムが予期せず動作しない事がある。不具合が内包される可能性があること。動作テストに一々FTPなりgitなりでソースを移動しなければならないこと。
後者のメリットは、本番サーバーと環境が同じであるのでそのような不具合が少ないこと、デメリットは開発環境が制限される事。プログラミングだけならまだvimやemacsでなんとかなる。しかし、私のような一人プロジェクトでは画像などのCUIでは作業しづらいデータを同時に扱う必要があるので、そのような状態は避けたい。

というわけで、OSXでコードを書きつつ画像も操作し、そのデータを即時linuxで走らせれるよう、OSXのフォルダをVirtualbox内にあるUbuntu Serverにマウントする。

前置きがとても長くなってしまったが、virtualboxには[共有フォルダー]設定があるのですぐ設定は行える。

VirtualBox Guest Additionsを事前にインストールする

Virtualboxで共有されたフォルダーをファイルシステムとして認識させるためにGuest AdditionsというパッケージをUbuntuに事前にインストールする。

Guest Additionsをインストールするのに、多少事前準備をする。まず、
Downloads – Oracle VM VirtualBox より、
f:id:giraffyk1:20150809151734p:plain
VirtualBox Extension Packをダウンロード。すでにVirtualboxがインストールされていれば、ダウンロードファイルをクリックすると、自動でVirtualboxが立ち上がり、インストールダイアログが表示されるはず。
f:id:giraffyk1:20150809151914p:plain

そのままインストールしよう。

続いてパッケージのインストール。仮想マシンを起動してログイン。

giraffy@pe-dev:~$ sudo apt-get update
(略)
Hit http://security.ubuntu.com trusty-security/restricted Translation-en
Get:32 http://security.ubuntu.com trusty-security/universe Translation-en [65.9 kB]
Fetched 4042 kB in 8s (479 kB/s)
Reading package lists... Done

giraffy@pe-dev:~$ sudo apt-get install linux-headers-generic build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
(略)
Setting up linux-headers-generic (3.13.0.61.68) ...
Setting up manpages-dev (3.54-1ubuntu1) ...
Processing triggers for libc-bin (2.19-0ubuntu6.5) ...

giraffy@pe-dev:~$ sudo apt-get install dkms
[sudo] password for giraffy:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  debhelper
The following NEW packages will be installed:
  dkms
0 upgraded, 1 newly installed, 0 to remove and 113 not upgraded.
Need to get 64.6 kB of archives.
After this operation, 349 kB of additional disk space will be used.
Get:1 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/main dkms all 2.2.0.3-1.1ubuntu5.14.04.1 [64.6 kB]
Fetched 64.6 kB in 0s (463 kB/s)
Selecting previously unselected package dkms.
(Reading database ... 85576 files and directories currently installed.)
Preparing to unpack .../dkms_2.2.0.3-1.1ubuntu5.14.04.1_all.deb ...
Unpacking dkms (2.2.0.3-1.1ubuntu5.14.04.1) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up dkms (2.2.0.3-1.1ubuntu5.14.04.1) ...


続いて、VBoxGuestAdditions.isoを仮想CDにマウントさせる。仮想マシンを立ち上げて、メニューのDevices→Insert Guest Addtions CD Image...(Host + D) をクリック。

f:id:giraffyk1:20150809153754p:plain

Unable to insert the virtual optical disk
/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAddtions.iso
into the machine pe-ubuntu14-dev (仮想マシンpe-ubuntu14-dev にCD VBoxGuestAddtions.iso の挿入が出来ません)

would you like to try to force insertion of this disk? (強制的に挿入してみますか?)

上記の表示が出る場合は、前述のパッケージのインストールが正常にできていない可能性がある。

続いて、Guest addtionsをインストール。仮想CDをdevからマウント、autorun.shを走らせる

iraffy@pe-dev:~$ ls -la /dev/cdrom
lrwxrwxrwx 1 root root 3 Aug  9 15:56 /dev/cdrom -> sr0
giraffy@pe-dev:~$ sudo mount /dev/cdrom /media/cdrom
[sudo] password for giraffy:
mount: block device /dev/sr0 is write-protected, mounting read-only
giraffy@pe-dev:~$ ls -la /media/
cdrom/
giraffy@pe-dev:~$ ls -la /media/cdrom/
total 50900
dr-xr-xr-x 6 root root     2048 Jul  9 18:59 .
drwxr-xr-x 4 root root     4096 Aug  9 15:04 ..
dr-xr-xr-x 2 root root     2048 Jul  9 18:59 32Bit
dr-xr-xr-x 2 root root     2048 Jul  9 18:59 64Bit
-r-xr-xr-x 1 root root      647 Sep  3  2014 AUTORUN.INF
dr-xr-xr-x 2 root root     2048 Jul  9 18:59 OS2
-r-xr-xr-x 1 root root  7495104 Jul  9 19:56 VBoxLinuxAdditions.run
-r-xr-xr-x 1 root root 17222656 Jul  9 19:56 VBoxSolarisAdditions.pkg
-r-xr-xr-x 1 root root 16884816 Jul  9 19:57 VBoxWindowsAdditions-amd64.exe
-r-xr-xr-x 1 root root 10176760 Jul  9 19:55 VBoxWindowsAdditions-x86.exe
-r-xr-xr-x 1 root root   312384 Jul  9 19:54 VBoxWindowsAdditions.exe
-r-xr-xr-x 1 root root     6964 Jul  9 19:55 autorun.sh
dr-xr-xr-x 2 root root     2048 Jul  9 18:59 cert
-r-xr-xr-x 1 root root     5519 Jul  9 19:55 runasroot.sh

giraffy@pe-dev:~$ sudo /media/cdrom/VBoxLinuxAdditions.run
Linux guest additions installer not found -- try to start them manually.
giraffy@pe-dev:/media/cdrom$ sudo sh ./autorun.sh
Linux guest additions installer not found -- try to start them manually.
giraffy@pe-dev:/media/cdrom$ sudo /media/cdrom/VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.0.0 Guest Additions for Linux............
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
(略)

これでGuest Additionsがインストール完了。

Virtualboxの設定を行いOSXのフォルダを仮想マシンにマウントする


f:id:giraffyk1:20150809145436p:plain

赤く囲われた部分のタイトルをクリックする。もしくは設定(S)→[共有フォルダー]タブを選ぶ。

f:id:giraffyk1:20150809145552p:plain

マウントしたいフォルダーを選択すればフォルダーリストに追加される。自動マウント、永続化はONにしておけば良いだろう。私の場合は、~/projects フォルダを共有することにした。

そのまま再起動して/media以下を確認。

giraffy@pe-dev:~$ sudo ls -la /media/
total 12
drwxr-xr-x  4 root root   4096 Aug  9 16:02 .
drwxr-xr-x 22 root root   4096 Aug  3 17:35 ..
drwxr-xr-x  2 root root   4096 Aug  3 17:34 cdrom
drwxrwx---  1 root vboxsf   68 Aug  9 14:57 sf_Projects

無事sf_(共有フォルダ名)でOSX側のフォルダが確認できた。試しに仮想マシン側からファイルを作ってみる

giraffy@pe-dev:~$ sudo touch /media/sf_Projects/file_from_pedev

f:id:giraffyk1:20150809161058p:plain
OSX側から無事確認出来た。OSX側からfile_from_OSXも作成してみる。

giraffy@pe-dev:~$ sudo ls -la /media/sf_Projects/
total 12
drwxrwx--- 1 root vboxsf  170 Aug  9 16:12 .
drwxr-xr-x 4 root root   4096 Aug  9 16:02 ..
-rwxrwx--- 1 root vboxsf 6148 Aug  9 16:11 .DS_Store
-rwxrwx--- 1 root vboxsf    0 Aug  9 16:09 file_from_OSX
-rwxrwx--- 1 root vboxsf    0 Aug  9 16:09 file_from_pedev

即座に反映された。これでOSX側からコードをガリガリ書いたり、作成したアイコンを即座に反映する事ができる。

ただ、パーミッションが770で、ubuntu側から操作しづらいため、

giraffy@pe-dev:~$ sudo gpasswd -a giraffy vboxsf
Adding user giraffy to group vboxsf

として、vboxsfグループに、自分ユーザーを追加しておく。
ただサーバーからのファイル権限に難があるので、マウント設定をしなおしたほうが良いかもしれない。