読者です 読者をやめる 読者になる 読者になる

Kikuchy's Second Memory

つくる楽しさをもっと伝えたい。プログラムを書いていて、わからなかったこと・気付いた事を書き留めています。

VirtualBox + OpenIndianaで、作業ユーザーも書き込みできる共有フォルダを作る

明けましておめでとうございます。
新年早々、Windows Store Applicationとは関係ないネタですが…



所用でSolarisでしか上手く動かないプログラムを動かさなくてはいけなくなったので、オープンソース版のOpenIndianaでそのプログラムを動かすことにしました。
使おうと思った環境は以下のような感じ。

しかし、プログラムのソースコードはホストで編集したい。バイナリはソースと同じディレクトリに置きたい。
とすると、考えつくのは以下のようなシナリオ。

  1. プログラムのソースコードが入っているフォルダを、VirtualBoxの「共有フォルダ」機能でホストからも読み書きできるようにする
  2. ホストOS側でソース編集する
  3. ゲスト側でコンパイル、実行
  4. そして共有フォルダは、仮想マシン起動時に自動マウントされている

「これならVirtualBoxの共有フォルダの自動マウント機能使えば行けるんじゃね!?」

そう思って試してみた所、作業ユーザーでは共有フォルダへの書き込み権限が無く、書き込みができない状態になっていました。
いちいちsudo打ってファイルを書き込むのも面倒だし、かと言って常にrootで作業するのもなんか嫌だし。
うーん、どうしたものか。
あちこち調べた所、以下のようにしたら解決できました。



作業ユーザーや共有するフォルダの設定は以下の通りだとします。

  • ユーザーのuid:101
  • ユーザーのgid:10
  • 共有フォルダのフォルダ名(Folder Name):vmshare
  • マウントパス:/mnt/share

ユーザーのuidとgidはidコマンドでわかります。
フォルダ名は、VirtualBoxの共有フォルダ設定ダイアログで入力したものです。
当然ですが、マウント先になるディレクトリは予め作成しておくこと。

では早速やってみましょう。


まず、VirtualBoxで設定する共有フォルダの「自動マウント(Auto-mout)」と「読み取り専用(Read-only)」のチェックは外しておきます。

Solaris系では、 /etc/vfstab に書き込んでおいた設定で、起動時に自動マウントが行われるそうです。適当なエディタで編集します。

$ sudo vi /etc/vfstab

以下の一行を最終行に書き加えます。(タブ区切り)

vmshare		-		/mnt/share	vboxfs	-	yes	uid=101,gid=10,dmode=755,fmode=755

uidとgidは作業ユーザーのものを入力します。
マウントされたディレクトリの所有者はこのuidのユーザーに、グループはgidのものに設定されます。
dmodeとfmodeは、マウントされたディレクトリとファイルのパーミッションです。755なので、所有者はフルアクセス、所属グループのユーザーは読み取りと実行が出来ます。

保存したら再起動してみましょう。

$ touch /mnt/share/hogehoge.txt

とかやってパーミッションのエラーがでなければ成功です。
動かしたいプログラムもちゃんと動きました。
いやぁ、なんで研究室の先人はこんなどマイナーなOSでしか動かないもの書いたんだか…