【发布时间】:2014-08-27 03:07:46
【问题描述】:
我正在构建一个由 Virtualbox 管理的 VM,打算用作 Cassandra/OpsCenter 的节点。
在设置过程中,我注意到同步文件夹未正确安装在vagrant up 上。我的意思是,当我在虚拟机启动后尝试从虚拟机内部touch /vagrant/foo.txt 时出现权限错误。而且,如果我在主机上的项目目录中创建一个文件,它不会显示在来宾 VM 上的 /vagrant 中。
我没有在我的 Vagrantfile 中设置同步文件夹,只是使用默认行为。但是当我vagrant reload 时,突然间同步文件夹会按预期工作,一旦我通过 SSH 回到虚拟机。
vagrant up 或 vagrant reload 的日志中没有错误。
在阅读了其他一些 SO 帖子后,我同时运行了 vagrant up --debug 和 vagrant reload --debug 并提取了我能找到的与 mount 操作相关的所有输出。
Vagrantfile、配置代码和选定的日志粘贴在下面。知道这里给出了什么吗? TIA。
我正在使用 Virtualbox 4.3.12 r93733、Vagrant 1.6.3、Hahsicorp Ubuntu 12.04 64-bit VM,在 OSX Mavericks 10.9.4 上运行。
流浪文件
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "hashicorp/precise64"
config.vm.provision :shell, path: "bootstrap.sh"
config.vm.network :forwarded_port, host: 4568, guest: 80
end
Bootstrap.sh
#!/usr/bin/env bash
apt-get update
apt-get install -y python-software-properties
add-apt-repository -y ppa:webupd8team/java
add-apt-repository -y ppa:cassou/emacs
apt-get update
apt-get -y install curl
# install emacs
echo 'INSTALLING EMACS'
apt-get --yes --force-yes install emacs24 emacs24-el emacs24-common-non-dfsg
# install jvm / oracle jdk
# see: https://www.digitalocean.com/community/tutorials/how-to-install-java-on-ubuntu-with-apt-get
echo 'INSTALLING JAVA'
apt-get -y install default-jre
echo 'INSTALLING ORACLE JDK'
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections
apt-get --yes --force-yes install oracle-java7-installer
# install cassandra
echo 'INSTALLING CASSANDRA'
echo "deb http://debian.datastax.com/community stable main" | tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl -L http://debian.datastax.com/debian/repo_key | apt-key add -
apt-get update
apt-get -y install dsc20
service cassandra stop
rm -rf /var/lib/cassandra/data/system/*
# install ops center
echo 'INSTALLING OPS CENTER'
echo "deb http://debian.datastax.com/community stable main" | tee -a /etc/apt/sources.list.d/datastax.community.list
apt-get update
apt-get -y install opscenter
service opscenterd start
# reboot the machine
reboot
提取的日志
INITIAL DEBUG STATEMENTS (starting at line ~2701)
INFO synced_folders: Invoking synced folder enable: virtualbox
INFO interface: output: Mounting shared folders...
INFO interface: output: ==> default: Mounting shared folders...
==> default: Mounting shared folders...
INFO interface: detail: /vagrant => /Users/andrew/projects/tutorials/vagrant_cassandra
INFO interface: detail: default: /vagrant => /Users/andrew/projects/tutorials/vagrant_cassandra
default: /vagrant => /Users/andrew/projects/tutorials/vagrant_cassandra
...line 2997
DEBUG guest: Searching for cap: mount_virtualbox_shared_folder
DEBUG guest: Checking in: ubuntu
DEBUG guest: Checking in: debian
DEBUG guest: Checking in: linux
DEBUG guest: Found cap: mount_virtualbox_shared_folder in linux
INFO guest: Execute capability: mount_virtualbox_shared_folder [#<Vagrant::Machine: default (VagrantPlugins::ProviderVirtualBox::Provider)>, "vagrant", "/vagrant", {:guestpath=>"/vagrant", :hostpath=>"/Users/andrew/projects/tutorials/vagrant_cassandra", :disabled=>false, :owner=>"vagrant", :group=>"vagrant"}] (ubuntu)
DEBUG ssh: Checking whether SSH is ready...
DEBUG ssh: Re-using SSH connection.
INFO ssh: SSH is ready!
DEBUG ssh: Re-using SSH connection.
INFO ssh: Execute: (sudo=false)
DEBUG ssh: Exit status: 0
...line 3026
INFO ssh: Execute: mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant (sudo=true)
DEBUG ssh: stderr: stdin: is not a tty
DEBUG ssh: Exit status: 0
...line 3039
DEBUG ssh: Re-using SSH connection.
INFO ssh: Execute: /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=/vagrant (sudo=true)
DEBUG ssh: stderr: stdin: is not a tty
DEBUG ssh: Exit status: 0
INFO warden: Calling OUT action: #<Vagrant::Action::Builtin::SyncedFolders:0x0000010122eeb0>
INFO warden: Calling OUT action: #<Vagrant::Action::Builtin::SyncedFolderCleanup:0x000001030d91f8>
INFO warden: Calling OUT action: #<VagrantPlugins::SyncedFolderNFS::ActionCleanup:0x00000103091998>
INFO warden: Calling OUT action: #<VagrantPlugins::ProviderVirtualBox::Action::PrepareNFSValidIds:0x0000010303e518>
...line
#################
### AT THIS POINT, MY PROJECT ROOT DIR HAS NOT BEEN MOUNTED TO /vagrant, AS IT IS EMPTY
vagrant@precise64:~$ ls /vagrant/
vagrant@precise64:~$
### THEN RAN A RELOAD --DEBUG, WHICH MAKES THE MOUNTED DIRECTORY WORK...
~/projects/tutorials/vagrant_cassandra(master) $ vagrant reload --debug
... line 26309
INFO interface: output: Mounting shared folders...
INFO interface: output: ==> default: Mounting shared folders...
==> default: Mounting shared folders...
INFO interface: detail: /vagrant => /Users/andrew/projects/tutorials/vagrant_cassandra
INFO interface: detail: default: /vagrant => /Users/andrew/projects/tutorials/vagrant_cassandra
default: /vagrant => /Users/andrew/projects/tutorials/vagrant_cassandra
...line 26573
DEBUG guest: Searching for cap: mount_virtualbox_shared_folder
DEBUG guest: Checking in: ubuntu
DEBUG guest: Checking in: debian
DEBUG guest: Checking in: linux
DEBUG guest: Found cap: mount_virtualbox_shared_folder in linux
INFO guest: Execute capability: mount_virtualbox_shared_folder [#<Vagrant::Machine: default (VagrantPlugins::ProviderVirtualBox::Provider)>, "vagrant", "/vagrant", {:guestpath=>"/vagrant", :hostpath=>"/Users/andrew/projects/tutorials/vagrant_cassandra", :disabled=>false, :owner=>"vagrant", :group=>"vagrant"}] (ubuntu)
DEBUG ssh: Checking whether SSH is ready...
DEBUG ssh: Re-using SSH connection.
INFO ssh: SSH is ready!
DEBUG ssh: Re-using SSH connection.
INFO ssh: Execute: (sudo=false)
DEBUG ssh: Exit status: 0
...line 26601
DEBUG ssh: Re-using SSH connection.
INFO ssh: Execute: mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant (sudo=true)
DEBUG ssh: stderr: stdin: is not a tty
DEBUG ssh: Exit status: 0
...line 26615
DEBUG ssh: Re-using SSH connection.
INFO ssh: Execute: /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=/vagrant (sudo=true)
DEBUG ssh: stderr: stdin: is not a tty
DEBUG ssh: Exit status: 0
INFO warden: Calling OUT action: #<Vagrant::Action::Builtin::SyncedFolders:0x000001014f48e8>
INFO warden: Calling OUT action: #<Vagrant::Action::Builtin::SyncedFolderCleanup:0x0000010142caf0>
INFO warden: Calling OUT action: #<VagrantPlugins::SyncedFolderNFS::ActionCleanup:0x00000101367430>
INFO warden: Calling OUT action: #<VagrantPlugins::ProviderVirtualBox::Action::PrepareNFSValidIds:0x000001012c5d60>
### NOW MY PROJECT DIR HAS BEEN SUCCESSFULLY MOUNTED TO /vagrant
vagrant@precise64:~$ ls /vagrant/
bootstrap.sh Vagrantfile
vagrant@precise64:~$
【问题讨论】:
-
我怀疑安装在 Vagrant Box 和 VirtualBox 上的 GuestAdditions 之间存在一些不兼容。另一个可能的原因是您的配置过程中的某些内容破坏了 GuestAdditions。我建议你检查几件事:1)尝试在没有任何配置的情况下运行机器 - 你还有问题吗? 2) 尝试将以下内容添加到您的配置中:
/etc/init.d/vboxadd setup并检查是否有帮助 -
查看this 错误报告以获取更多信息。
-
@MichaelS 你是对的,有一些不兼容。我刚刚注意到一条 vagrant 消息,说来宾添加版本与 vagrant 版本不匹配。也就是说,我认为错误的根源是重新启动(如下面接受的答案所述)。
标签: ubuntu cassandra vagrant virtualbox