Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't install vagrant plugins in Ubuntu

I was trying to install vagrant plugin vbguest, but got following errors in terminal:

$ vagrant plugin install vbguest
Installing the 'vbguest' plugin. This can take a few minutes...
/usr/lib/ruby/2.3.0/rubygems/specification.rb:946:in `all=': undefined method `group_by' for nil:NilClass (NoMethodError)
    from /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb:275:in `with_isolated_gem'
    from /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb:231:in `internal_install'
    from /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb:102:in `install'
    from /usr/lib/ruby/vendor_ruby/vagrant/plugin/manager.rb:62:in `block in install_plugin'
    from /usr/lib/ruby/vendor_ruby/vagrant/plugin/manager.rb:72:in `install_plugin'
    from /usr/share/vagrant/plugins/commands/plugin/action/install_gem.rb:37:in `call'
    from /usr/lib/ruby/vendor_ruby/vagrant/action/warden.rb:34:in `call'
    from /usr/lib/ruby/vendor_ruby/vagrant/action/builder.rb:116:in `call'
    from /usr/lib/ruby/vendor_ruby/vagrant/action/runner.rb:66:in `block in run'
    from /usr/lib/ruby/vendor_ruby/vagrant/util/busy.rb:19:in `busy'
    from /usr/lib/ruby/vendor_ruby/vagrant/action/runner.rb:66:in `run'
    from /usr/share/vagrant/plugins/commands/plugin/command/base.rb:14:in `action'
    from /usr/share/vagrant/plugins/commands/plugin/command/install.rb:32:in `block in execute'
    from /usr/share/vagrant/plugins/commands/plugin/command/install.rb:31:in `each'
    from /usr/share/vagrant/plugins/commands/plugin/command/install.rb:31:in `execute'
    from /usr/share/vagrant/plugins/commands/plugin/command/root.rb:56:in `execute'
    from /usr/lib/ruby/vendor_ruby/vagrant/cli.rb:42:in `execute'
    from /usr/lib/ruby/vendor_ruby/vagrant/environment.rb:268:in `cli'
    from /usr/bin/vagrant:173:in `<main>'

I am using Virtual Box 5.0.18_Ubuntu r106667 and ruby 2.3.0p0. I also faced the same problem trying to install sahara plugin. How can I fix it?

like image 586
Sergey Scherba Avatar asked Apr 23 '16 14:04

Sergey Scherba


People also ask

How to install vagrant on Ubuntu 20 04?

To install Vagrant on Ubuntu 20.04, we will use the command line/ terminal window of our system. At first to we will install the VirtualBox in our system so, for that open up the terminal. Use the Ctl+Alt+T shortcut to open it up or go to ApplicationsàTerminal to access the terminal window.

What is the use of vagrant plugin?

By default, Vagrant can provision machines on top of VirtualBox, Hyper-V, and Docker. Other providers such as Libvirt (KVM), VMware and AWS can be installed via the Vagrant plugin system. Vagrant is typically used by developers to set up a development environment that works across multiple operating systems.

How do I install VirtualBox on Vagrant?

Since Vagrant creates virtual operating systems, it needs a tool like VirtualBox to manage the virtual operating systems. In a terminal window, type in the following command to install VirtualBox: The system should download and install VirtualBox software. Note: There are other virtualization applications available.

How do I manually create a Vagrantfile?

To manually create a Vagrantfile type in the following touch command: This will create a blank Vagrantfile as a placeholder. The vagrant up command should then launch a default virtual environment. A text editor can also be used to edit the Vagrantfile.


4 Answers

Yes, there is an issue: https://github.com/mitchellh/vagrant/issues/7073 in Vagrant 1.8.1

PR with fix: https://github.com/mitchellh/vagrant/pull/7198

The fix should be released in Vagrant 1.8.2.


But until that you can patch it manually.

Here are the steps to fix Vagrant 1.8.1 under Ubuntu 16.04 which has ruby 2.3.0.

1.) Create file vagrant-plugin.patch with the following contents:

---
 lib/vagrant/bundler.rb | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/vagrant/bundler.rb b/lib/vagrant/bundler.rb
index 5a5c185..c4a3837 100644
--- a/lib/vagrant/bundler.rb
+++ b/lib/vagrant/bundler.rb
@@ -272,7 +272,6 @@ module Vagrant

       # Reset the all specs override that Bundler does
       old_all = Gem::Specification._all
-      Gem::Specification.all = nil

       # /etc/gemrc and so on.
       old_config = nil
@@ -286,6 +285,8 @@ module Vagrant
       end
       Gem.configuration = NilGemConfig.new

+      Gem::Specification.reset
+
       # Use a silent UI so that we have no output
       Gem::DefaultUserInteraction.use_ui(Gem::SilentUI.new) do
     return yield

2.) Apply patch:

sudo patch --directory /usr/lib/ruby/vendor_ruby/vagrant < vagrant-plugin.patch

which fixes /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb.

like image 183
armab Avatar answered Oct 10 '22 11:10

armab


Instead of patching, I fixed the issue using vagrant v1.8.0 in ubuntu 16.04:

  • Download package: wget https://releases.hashicorp.com/vagrant/1.8.0/vagrant_1.8.0_x86_64.deb
  • sudo dpkg -i vagrant_1.8.0_x86_64.deb
  • vagrant plugin install vagrant-vbguest

Keep an eye and upgrade to 1.8.2 when it's released... Enjoy!

like image 29
steinkel Avatar answered Oct 10 '22 13:10

steinkel


This is fixed in the recent version of Vagrant, so please upgrade it.

If you can't, run this command to fix the problem:

sudo sed -i'' "s/Specification.all = nil/Specification.reset/" /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb

Note: The sudo permission is required or run without as a root.

This will patch your bundler.rb file as per PR (#7198).

You should also upgrade your bundler to at least 1.12.5 as per this vagrant PR (#7404):

sudo gem install bundler --version ">= 1.12.5"
like image 8
kenorb Avatar answered Oct 10 '22 11:10

kenorb


I've same error with another plugin: vagrant-triggers

I've found a patch to apply on /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb.

but so, vagrant enter in a big loop an try infinitely to install the package.

like image 2
Moosh Avatar answered Oct 10 '22 11:10

Moosh