問題
-
元々の要件: 気軽に立ち上げて、設定を共有できる debian の仮想マシンがほしい
-
debian
での出力ファイル、ログ等を、ホストのWindows
で受け取りたい
-
-
vagrant
にて debian/jessie64 の box 利用する- 当box は
vboxsf
ではなくrsync
での同期が標準である- Windows 環境では
rsync
が簡単に導入できない-
choco install rsync
で導入できるrsync
(cwRsync free版?)は cygwin 版であり、追加の設定が必要。 - 一緒に
ssh.exe
が導入されてしまうのも気持ち悪い
-
- ×
rsync
での同期は 、「ホスト → ゲスト方向のみ」 - ×
smb
での同期は、管理者権限が必要なので避けたい -
vboxsf
で同期できればいい
- Windows 環境では
-
vagrant up
すれば即環境が用意できるという要件を満たせない
- 当box は
解決策
Vagrantfile
にて、明示的に synced_folder に対し type: "virtualbox"
指定するとよい。
具体的な手順と確認方法
-
vboxsf
を使えるようにするため、以下のようにvagrant-vbguest
プラグインを導入する。ホストOSにて:
# インストール > vagrant plugin install vagrant-vbguest # 確認 > vagrant plugin list : vagrant-vbguest (0.11.0) :
※ 次回の
vagrant up
時に自動でvboxsf
が使えるようになるはず。 -
Vagrantfile
にて、明示的に synced_folder に対しtype: "virtualbox"
指定をする。例: ゲストの
/vagrant
を同期させる場合(デフォルト設定の上書き)diff --git a/Vagrantfile b/Vagrantfile index xxxxxx..xxxxxx 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -38,6 +38,7 @@ Vagrant.configure(2) do |config| # 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" + config.vm.synced_folder ".", "/vagrant", type: "virtualbox" # Provider-specific configuration so you can fine-tune various # backing providers for Vagrant. These expose provider-specific options.
-
仮想マシンを起動するために、
vagrant up
( 又はvagrant reload
) する -
ゲストOS から同期用ディレクトリにファイルを作成し、同期できているか確認する
ゲストOSにて:
$ mount | grep vagrant none on /vagrant type vboxsf (rw,nodev,relatime) $ echo "foo\nbar" >> /vagrant/test.txt
ホストOSにて:
> cat test.txt foo bar
以上。
(以下メモ書き)
関連ソース
-
Linux のゲストOS でどうやって vboxsf をマウントしているか。sshなどで、手動で試すときはこれで。https://github.com/mitchellh/vagrant/blob/master/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb
-
やってる部分 https://github.com/mitchellh/vagrant/blob/v1.7.4/plugins/providers/virtualbox/synced_folder.rb
-
https://github.com/mitchellh/vagrant/blob/v1.7.4/plugins/synced_folders/rsync/plugin.rb
-
type: "rsync"
相当 -
synced_folder()
指定で、同期プラグインを追加している
synced_folder("rsync", 5) do require_relative "synced_folder" SyncedFolder end
-
-
https://github.com/mitchellh/vagrant/blob/v1.7.4/lib/vagrant/plugin/v2/plugin.rb#L241-L247
- 同期フォルダ登録用プラグインAPI
def self.synced_folder(name, priority=10, &block) components.synced_folders.register(name.to_sym) do [block.call, priority] end nil end
-
https://github.com/mitchellh/vagrant/blob/v1.7.4/plugins/providers/virtualbox/plugin.rb#L22-L25
- たぶん
type: "virtualbox"
でいけそう。 ドキュメント に書いて置いてほしい
synced_folder(:virtualbox) do require File.expand_path("../synced_folder", __FILE__) SyncedFolder end
- たぶん
標準で vagrant init
して生成される Vagrantfile
が、単純な文字列リテラルに、ダブルクオーテーション("
)を利用していて、キモい
vagrant のソースも同様でキモい
メモ書きを前にして、「正しい日本語」はなんら権力を持たない。