Vagrantの共有ディレクトリ設定でものすっごい躓いた!

  • 96
    いいね
  • 0
    コメント

この記事は、筆者が未熟ゆえ間違いを含んでいる可能性が多いにある為、参考程度にしかなりません。
この記事は、2014年1月15日に書きました。

■目次(解決に関係したかもしれないもの)

■まえがき

これまで他に方法を知らないからという理由で、
vagrantのローカルからの作業は、
sshfsでのマウントやsublimeのsftpプラグインを使っていました。

正直、どっちも使いにくい(´・ω・`)

Vagrantfile眺めてたら、
共有できそうな設定があったので、ggrながら四苦八苦しました。

■環境

vagrant 1.3.5
Guest Additions Version: 4.2.0 → 4.3.6(記事の途中でバージョンアップ)
VirtualBox Version: 4.3.6
Centos6.4のboxから派生

■Vagrantfileの関係あるところ説明

  # Share an additional folder to the guest VM.
  # The first argument is the path on the host to the actual folder.
  # The second argument is the path on the guest to mount the folder.
  # And the optional third argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

※読みやすくする為に行を整理しています

超訳

  • VM guestの為にディレクトリを共有する
  • 最初の引数は、hostの実際のディレクトリパスです
  • 2つ目の引数は、guestにディレクトリをマウントする為のパスです
  • 3つ目の引数オプションは、なくてもいいオプションセットです。
  • 例) config.vm.synced_folder "../data", "/vagrant_data"

オプションは、
owner、group、パーミッションとか

■エラーがでた所からスタート

config.vm.synced_folder ".", "/vagrant" , owner: “harapeko”, groupe: “harapeko”, mount_options: ["dmode=777", "fmode=777"]

という設定をして、vagrant upしたら次のようなエラーがでた。

% vagrant up
Failed to mount folders in Linux guest. This is usually beacuse
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u harapeko`,gid=`getent group harapeko | cut -d: -f3`,dmode=777,fmode=777 /vagrant /vagrant
mount -t vboxsf -o uid=`id -u harapeko`,gid=`id -g harapeko`,dmode=777,fmode=777 /vagrant /vagrant

■Guest Additions Versionのバージョンアップ

Guest Additions Versionと
VirtualBox Versionが違うと上手くマウントできないらしい

今後の事も考えてvagrant-vbguestプラグインを導入する
Github:dotless-de / vagrant-vbguest

※Vagrant1.1以上と未満でインストール方法が異なるので注意

% vagrant plugin install vagrant-vbguest
% vi ~/.vagrant.d/Vagrantfile
~/.vagrant.d/Vagrantfile
Vagrant.configure("2") do |config|
  config.vbguest.auto_update = false
end
% vagrant vbguest --status        
GuestAdditions versions on your host (4.3.6) and guest (4.2.0) do not match.

% vagrant vbguest --auto-reboot
GuestAdditions versions on your host (4.3.6) and guest (4.2.0) do not match.
Loaded plugins: fastestmirror
Determining fastest mirrors
(省略)
Copy iso file /Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso into the box /tmp/VBoxGuestAdditions.iso
Installing Virtualbox Guest Additions 4.3.6 - guest version is 4.2.0
Verifying archive integrity... All good.
Uncompressing VirtualBox 4.3.6 Guest Additions for Linux............
VirtualBox Guest Additions installer
Removing installed version 4.2.0 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
Removing existing VirtualBox DKMS kernel modules[  OK  ]
Removing existing VirtualBox non-DKMS kernel modules[  OK  ]
Building the VirtualBox Guest Additions kernel modules[  OK  ]
Doing non-kernel setup of the Guest Additions[  OK  ]
You should restart your guest to make sure the new modules are actually used

Installing the Window System drivers[FAILED]
(Could not find the X.Org or XFree86 Window System.)
An error occurred during installation of VirtualBox Guest Additions 4.3.6. Some functionality may not work as intended.
In most cases it is OK that the "Window System drivers" installation failed.

% vagrant vbguest --status     
GuestAdditions 4.3.6 running --- OK.

■確認してみる

% vagrant reload
Failed to mount folders in Linux guest. This is usually beacuse
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u harapeko`,gid=`getent group harapeko | cut -d: -f3`,dmode=777,fmode=777 /vagrant /vagrant
mount -t vboxsf -o uid=`id -u harapeko`,gid=`id -g harapeko`,dmode=777,fmode=777 /vagrant /vagrant

変わらない

■sudo /etc/init.d/vboxadd setup

リビルドしたら直ったという話があったので試してみる

% vagrant ssh
sudo /etc/init.d/vboxadd setup
exit
% vagrant reload
Failed to mount folders in Linux guest. This is usually beacuse
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u harapeko`,gid=`getent group harapeko | cut -d: -f3`,dmode=777,fmode=777 /vagrant /vagrant
mount -t vboxsf -o uid=`id -u harapeko`,gid=`id -g harapeko`,dmode=777,fmode=777 /vagrant /vagrant

変わらない

■Vagrantfileの設定をいじってみる

config.vm.synced_folder "/vagrant", "/home/vagrant", owner: "vagrant", group: "vagrant", mount_options: ["dmode=777", "fmode=777"]

最終的には上記のような形。

owner、groupはどうやら、vagrant上と同じでなければならないと怒られた。
これが、最初から出ていたメッセージらしい(´・ω・`)

次に、1、2番目の引数は逆だった模様?ここが、ちょっと謎。
でも、こうしないと次のようなエラーがでた。

最初の引数について

There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The host path of the shared folder is missing: /home/vagrant/

また、/vagrantディレクトリがなくても次のエラーがでた

* The host path of the shared folder is missing: /vagrant

2つ目の引数について

  • /vagrantだとマウントされなかった
  • /home/vagrantだとマウントされた

推測

ようやくここで気づいた
最初の引数のhostとは、ローカルをhostにして
vagrant側をguestにして繋ぐって事なんじゃないかと

■確認してみる

% vagrant reload
[default] Attempting graceful shutdown of VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 3000 => 3000 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /home/vagrant
vagrant reload  34.21s user 5.20s system 67% cpu 58.132 total

試しにファイルを置いてみたところ、即時反映された
host側のディレクトリは/vagrant/[プロジェクト]としておいたほうがいいと思われる。

■補足

実際にプロジェクトを作成して試してないので、
これで動くかちょっと不安

話半分程度に見て頂けるとありがたやです┏○))ペコ