Как исправить ошибку ruby: sh:1:make: not found

Я работаю над видеоруководством по адресу http://gettingstartedwithdjango.com/en/lessons/introduction-and-launch/

Я работаю над win7 и использую git-bash для своего терминала. Я установил последний виртуальный бокс - 4.2.12 и последний бродяга - 1.22.

Я попытался запустить бродягу и получил:

  $ vagrant up
  Bringing machine 'default' up with 'virtualbox' provider...
  [default] Setting the name of the VM...
  [default] Clearing any previously set forwarded ports...
  [default] Creating shared folders metadata...
  [default] Clearing any previously set network interfaces...
  [default] Preparing network interfaces based on configuration...
  [default] Forwarding ports...
  [default] -- 22 => 2222 (adapter 1)
  [default] -- 8000 => 8888 (adapter 1)
  [default] Booting VM...
  [default] Waiting for VM to boot. This can take a few minutes.
  [default] VM booted and ready for use!
  [default] Configuring and enabling network interfaces...
  [default] Mounting shared folders...
  [default] -- /vagrant
  [default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks
  [default] -- /tmp/vagrant-chef-1/chef-solo-2/cookbooks
  [default] Running provisioner: shell...
  [default] Running: inline script
  stdin: is not a tty
  ERROR:  Error installing chef:
          ERROR: Failed to build gem native extension.      

          /usr/bin/ruby1.8 extconf.rb
  creating Makefile      

  make
  sh: 1: make: not found    


  Gem files will remain installed in /var/lib/gems/1.8/gems/yajl-ruby-1.1.0 for in
  spection.
  Results logged to /var/lib/gems/1.8/gems/yajl-ruby-1.1.0/ext/yajl/gem_make.out
  Building native extensions.  This could take a while...
  The following SSH command responded with a non-zero exit status.
  Vagrant assumes that this means the command failed!      

      chmod +x /tmp/vagrant-shell && /tmp/vagrant-shell

Когда я делаю:

$ which make

Я получил:

/c/opscode/chef/embedded/bin/make

так что похоже, что make находится в пути к файлу

Как я могу это исправить?

дополнение: когда я редактирую бродячий файл на:

config.vm.provision :shell, :inline => "curl -L https://opscode.com/chef/install.sh | bash"

Я получил:

/tmp/vagrant-shell: line 1: curl: command not found

person user1592380    schedule 15.06.2013    source источник


Ответы (4)


В используемом вами базовом блоке по умолчанию не установлен пакет «build-essential», и у него есть «программа подготовки оболочки", которая устанавливает гем Chef в среду Ruby по умолчанию. Chef зависит от JSON RubyGem, который сам имеет расширения C, которые необходимо скомпилировать. Это то, что ищет make.

Чтобы решить эту проблему, я бы рекомендовал использовать «омнибус» Opscode полный установщик стека для Chef. Это можно использовать, изменив строку инициализатора оболочки на:

config.vm.provision :shell, :inline => "curl -L https://opscode.com/chef/install.sh | bash"

Или, если в вашем базовом блоке нет curl, используйте wget:

config.vm.provision :shell, :inline => "wget -O https://opscode.com/chef/install.sh | bash"

Сценарий [install.sh][3] просто проверяет виртуальную машину, чтобы определить ее платформу, чтобы получить правильный URL-адрес из корзины S3. Если вы предпочитаете, вы можете использовать созданный URL-адрес для прямой загрузки файла .deb:

https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/11.04/x86_64/chef_11.4.4-2.ubuntu.11.04_amd64.deb

А затем установите его:

dpkg -i chef_11.4.4-2.ubuntu.11.04_amd64.deb

См. документацию Vagrant по программам обеспечения оболочки, чтобы узнать, как написать это в виде небольшого скрипта. .

person jtimberman    schedule 15.06.2013

На какой машине вы запускали which make? (хозяин Гость). Убедитесь, что у гостя (виртуальный бокс) есть файл make.

https://github.com/scottmuc/vagrant-postgresql/issues/1#issuecomment-7798110

person falsetru    schedule 15.06.2013

Если в ОС нет предустановленной программы make, и вы все еще хотите двигаться вперед, вы можете сделать что-то вроде:

e = package "make" do
        action :nothing
end

e.run_action(:install)

который установит пакет make во время компиляции, прежде чем какая-либо из ваших кулинарных книг попытается его использовать. Вы должны поместить это в один из своих рецептов, желательно вверху, чтобы другим читателям было понятно, что происходит.

person Adam    schedule 15.06.2013
comment
Адам, прости, но я новичок в бродяге и поваре. Можете ли вы объяснить, куда поместить код, который вы включили? Я просто пытаюсь запустить виртуальную машину, обсуждаемую в - Bill - person user1592380; 16.06.2013
comment
... статья ( пропущено слово ) - person user1592380; 16.06.2013
comment
Я только что перечитал вопрос вместе со статьей, и мое предложение не будет таким простым решением вашей проблемы. Вы можете 1) получить виртуальную машину с обновленной версией Chef (вам не нужно запускать встроенное обновление Chef) 2) не обновлять Chef, если он вам не нужен, или 3) обновить Chef альтернативным способом. -› поместите обновление в кулинарную книгу, и вы сможете добавить любые недостающие пакеты, которые вам нужны, в эту новую кулинарную книгу. Самый простой вариант — № 2, но он легко может иметь неприятные последствия, если вам нужна обновленная версия Chef. Если у вас есть время, я бы посоветовал немного покопаться в Chef & Vagrant. - person Adam; 17.06.2013

Оказалось, спасибо, у меня была неправильная версия шеф-повара. Мне нужна была версия 11.4.2, которая не самая последняя. Самая последняя мне не подошла. я пошел в

http://www.opscode.com/chef/install/

и скачал и установил:

chef-client-11.4.2-1.windows.msi

и это сработало после выполнения vagrant destroy, а затем с vagrant up.

person user1592380    schedule 17.06.2013