Vagrant - не поддерживается возможность 'change_host_name'

Проблема в том, что функция "change_host_name" не поддерживается гостем при попытке выполнить следующую командную строку:

vagrant up

Это приводит к ошибке:

Vagrant attempted to execute the capability 'change_host_name'
on the detect guest OS 'linux', but the guest doesn't
support that capability. This capability is required for your
configuration of Vagrant. Please either reconfigure Vagrant to
avoid this capability or fix the issue by creating the capability.

Обратите внимание, что моя ОС: OS X Yosemite 10.10.5

Гостевые дополнения Версия: 4.2.0 и VirtualBox Версия: 5.0

Я пробовал много решений других, которые сталкиваются с этой проблемой, но я не мог это исправить.

Ответы

Ответ 1

Это https://github.com/mitchellh/vagrant/issues/7625. Он будет исправлен в следующем выпуске, и до тех пор, если его блокирует, вы можете исправить бродягу самостоятельно

Если вы хотите исправлять себя

Метод1:

  • найдите файл plugins/guests/ubuntu/guest.rb в вашей бродяжной установке
    • например. /opt/vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/guests/ubuntu/guest.rb по умолчанию для установки mac/linux
    • или /opt/vagrant/embedded/gems/vagrant-1.8.5/plugins/guests/ubuntu/guest.rb
    • окна: C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.8.5\plugin‌​s\guests\ubuntu\gues‌​t.rb
  • заменить на https://raw.githubusercontent.com/carlosefr/vagrant/1c631c18d1a654405f6954459a42ac19a1a2f096/plugins/guests/ubuntu/guest.rb (убедитесь, что у вас есть правильные права, если вы устанавливаете в качестве администратора, вы должны быть пользователем администратора для сохранения файла)
  • альтернативно отредактируйте файл и замените все содержимое

    module VagrantPlugins
      module GuestUbuntu
        class Guest < Vagrant.plugin("2", :guest)
          def detect?(machine)
            # This command detects if we are running on Ubuntu. /etc/os-release is
            # available on modern Ubuntu versions, but does not exist on 14.04 and
            # previous versions, so we fall back to lsb_release.
            #
            #   GH-7524
            #   GH-7625
            #
            machine.communicate.test <<-EOH.gsub(/^ {10}/, "")
              if test -r /etc/os-release; then
                source /etc/os-release && test xubuntu = x$ID
              elif test -x /usr/bin/lsb_release; then
                /usr/bin/lsb_release -i 2>/dev/null | grep -q Ubuntu
              else
                exit 1
              fi
            EOH
          end
        end
      end
    end
    

Метод2: альтернативный метод для исправления файла с помощью команды patch:

сохраните следующий файл под vagrant-guest.patch

commit 00fa49191dba2bb7c6322fa8df9327ca505c0b41
Author: Seth Vargo <[email protected]>
Date:   Sat Jul 23 11:40:36 2016 -0400

    guests/ubuntu: Revert detection

    - Semi-reverts GH-7524
    - Fixes GH-7625

diff --git a/plugins/guests/ubuntu/guest.rb b/plugins/guests/ubuntu/guest.rb
index 9aeb7aa..f60108e 100644
--- a/plugins/guests/ubuntu/guest.rb
+++ b/plugins/guests/ubuntu/guest.rb
@@ -2,7 +2,22 @@ module VagrantPlugins
   module GuestUbuntu
     class Guest < Vagrant.plugin("2", :guest)
       def detect?(machine)
-        machine.communicate.test("test -r /etc/os-release && . /etc/os-release && test xubuntu = x$ID")
+        # This command detects if we are running on Ubuntu. /etc/os-release is
+        # available on modern Ubuntu versions, but does not exist on 14.04 and
+        # previous versions, so we fall back to lsb_release.
+        #
+        #   GH-7524
+        #   GH-7625
+        #
+        machine.communicate.test <<-EOH.gsub(/^ {10}/, "")
+          if test -r /etc/os-release; then
+            source /etc/os-release && test xubuntu = x$ID
+          elif test -x /usr/bin/lsb_release; then
+            /usr/bin/lsb_release -i 2>/dev/null | grep -q Ubuntu
+          else
+            exit 1
+          fi
+        EOH
       end
     end
   end

и выполните следующую команду для применения патча

sudo patch -p1 --directory /opt/vagrant/embedded/gems/gems/vagrant-1.8.5/ < vagrant-guest.patch

Просто замените /opt/vagrant/embedded/gems/gems/vagrant-1.8.5 (или /opt/vagrant/embedded/gems/vagrant-1.8.5/plugins/guests/ubuntu/guest.rb) на установку вашей бродяжной папки