hashicorp / vagrant

Vagrant is a tool for building and distributing development environments.
https://www.vagrantup.com
Other
26.28k stars 4.43k forks source link

OSx Vagrant Does Not Allow Spaces In VAGRANT_HOME path in XTerminal #11693

Closed goldharv closed 4 years ago

goldharv commented 4 years ago

Problem does not occur from OSx terminal, only xterm.

Vagrant version

2.2.9

Host operating system

OSx 10.15.x (x=3,4,5)

Guest operating system

Ubuntu 18.04 - ubuntu/bionic64 I have tried others.

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "ubuntu/bionic64"
  config.vm.hostname = "gmat-build"
  config.vm.define "gmat-build"
  config.vm.network :forwarded_port, guest: 22, host: 2210, id: 'ssh'
  config.vagrant.plugins = "vagrant-timezone"
  if Vagrant.has_plugin?("vagrant-timezone")
    config.timezone.value = :host
  end

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # 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"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "3072"
    vb.name = "gmat_build"
  end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Enable provisioning with a shell script. Additional provisioners such as
  # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
end

Debug output

Provide a link to a GitHub Gist containing the complete debug output: https://www.vagrantup.com/docs/other/debugging.html. The debug output should be very long. Do NOT paste the debug output in the issue, just paste the link to the Gist.

Expected behavior

From XQuartz xterm, I did a 'cd gmat_box', containing the above Vagrantfile and issued vagrant ssh to get to the VM, vagrant status, vagrant up, vagrant halt, etc. I expected vagrant to perform the same way it performs from an OSx terminal.

Actual behavior

Vagrant failure - Unable to access /Storage/Virtual Machines/Vagrant Boxes

rant/plugin/state_file.rb:20:in read' /opt/vagrant/embedded/gems/2.2.9/gems/vagrant-2.2.9/lib/vagrant/plugin/state_file.rb:20:inread': Operation not permitted @ rb_sysopen - /Users/harry/.vagrant.d/plugins.json (Errno::EPERM)

/Users/harry/.vagrant.d was a symlink to "/Storage/Virtual Machines/Vagrant Boxes" (Note: embedded spaces in path.

I tried specifying VAGRANT_HOME in my .zshrc to point to: "/Storage/Virtual Machines/Vagrant Boxes" /Storage/Virtual\ Machines/Vagrant\ Boxes '/Storage/Virtual Machines/Vagrant Boxes' All had the same error. I finally gave up and got rid of the .vagrant.d symlink and allowed vagrant to create the vagrant.d directory. The problem is now solved.

Steps to reproduce

  1. Create a new folder on external hard drive for VAGRANT_HOME, with spaces in the path.
  2. Symlink for .vagrant.d or set VAGRANT_HOME pointing to the new directory.
  3. Issue just about any vagrant command from an xterm.
briancain commented 4 years ago

Hi @goldharv - From the information you shared, the user executing Vagrant does not have permissions to access the file specified at your given location. This is not really something Vagrant can solve. It needs to be able to access files inside the home folder, and moving it to a different location that might be under a folder that Vagrant cannot access could result in the error you received. This doesn't have anything to do with spaces, as the error indicates. Setting the right permissions on the path specified will resolve this issue. Thanks!

ghost commented 4 years ago

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.

If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.