Windows7上で Vagrant + Chef solo + knife-solo の環境を構築した時に出会ったエラー

前回 は環境構築でしたが、試行錯誤する中で、いろいろとエラーに出会いました。
再び同じようなエラーに出会った時に読み返せるよう、エラーの内容と自分の対応を残しておきます。

環境

knife-soloのインストール時のエラー

knife-soloを --preオプションで入れたところ、以下のエラーとなりました。

gem install knife-solo --pre --no-ri --no-rdoc

ERROR:  While executing gem ... (Gem::DependencyError)
    Unable to resolve dependencies: knife-solo requires librarian (~> 0.0.20); c
hef requires net-ssh (~> 2.2.2)


自分の場合は、

gem install knife-solo -v 0.3.0.pre2 --no-ri --no-rdoc

のように、バージョンを指定してインストールすることで対応しました。



vagrant up」時のエラー (VERR_DISK_FULL)

d:\fuga>vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'hoge'...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["import", "C:/Users//.vagrant.d/boxes/hoge/virtualbox/box.ovf"]

Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interpreting C:\Users\\.vagrant.d\boxes\hoge\virtualbox\box.ovf...
OK.
0%...
Progress state: VBOX_E_FILE_ERROR
VBoxManage.exe: error: Appliance import failed
VBoxManage.exe: error: Could not create the clone medium 'C:\Users\\VirtualBox VMs\ubuntu-cloudimg-precise-vagrant-i386\box-disk1.vmdk'.
VBoxManage.exe: error: VMDK: cannot write allocated data block in 'C:\Users\\VirtualBox VMs\ubuntu-cloudimg-precise-vagrant-i386/box-disk1.vmdk' (VERR_DISK_FULL)
VBoxManage.exe: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Appliance, interface IAppliance
VBoxManage.exe: error: Context: "int __cdecl handleImportAppliance(struct HandlerArg *)" at line 781 of file VBoxManageAppliance.cpp


途中のエラー「VERR_DISK_FULL」にもある通り、ディスクの容量が足りない時に表示されました。
そのため、不要になったVMは「vagrant destroy」で削除します。


なお、このエラーを調べているうちに、以下のパスが分かりました (いずれもデフォルトインストールした場合)。

項目
VagrantによるVMの作成先 %USERPROFILE%\VirtualBox VMs
VBoxManageの場所 C:\Program Files\Oracle\VirtualBox\VBoxManage


手元の環境ではCドライブの容量が少なかったため、VMの作成先をVirtualBoxのVBoxManage.exeにて変更しました。

# VMの作成先のフォルダを生成
d:\>mkdir vms

# 作成先を「d:\vms」の下へと変更
d:\vms>"C:\Program Files\Oracle\VirtualBox\VBoxManage" setproperty machinefolder d:\vms

参考:Chapter 8. VBoxManage



「knife-solo prepare」時のエラー

chef-repoの中で実行しなかった場合、最後のjsonファイル生成が失敗します。

knife solo prepare vagrant@192.168.33.10

Bootstrapping Chef...
(略)
Thank you for installing Chef!
Generating node config 'nodes/192.168.33.10.json'...
ERROR: Errno::ENOENT: No such file or directory - nodes/192.168.33.10.json

cookbookにて、apt-get update無し・「ubuntu-desktop」パッケージのインストールのみを記載し、実行した時のエラー

以下の通りです。ただ、再度同じように試してみた時は発生しませんでした...


D:\fuga\chef-repo\cookbooks\piyo\recipes\default.rb

package "ubuntu-desktop" do
  action :install
end


エラー内容

INFO: Processing package[ubuntu-desktop] action install (hello::default line 13)

================================================================================
Error executing action `install` on resource 'package[ubuntu-desktop]'
================================================================================

Chef::Exceptions::Exec
----------------------

apt-get -q -y install ubuntu-desktop=1.267 returned 100, expected 0

Resource Declaration:
---------------------

# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/piyo/recipes/default.rb

 12: #
 13: package "ubuntu-desktop" do
 14:   action :install
 15: end
 16:

Compiled Resource:
------------------

# Declared in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/piyo/recipes/default.rb :13:in `from_file'

package("ubuntu-desktop") do
  retry_delay 2
  retries 0
  recipe_name "default"
  action [:install]
  cookbook_name :piyo
  package_name "ubuntu-desktop"
end

ERROR: Running exception handlers
ERROR: Exception handlers complete
FATAL: Stacktrace dumped to /tmp/vagrant-chef-1/chef-stacktrace.out
FATAL: Chef::Exceptions::Exec: package[ubuntu-desktop] (hello::default line 13) had an error: Chef::Exceptions::Exec: apt-get -q -y
install ubuntu-desktop=1.267 returned 100, expected 0
Chef never successfully completed! Any errors should be visible in the output above. Please fix your recipes so that they properly complete.


returned 100は、エラーがあったことを示すようです。
参考:Man page of APT-GET



knife solo prepare 時のエラー (2013/5/1 追記)

  1. vagrant up の後、いろいろとやる
  2. vagrant destroy で削除
  3. Vagrantfile内のPrivate IP設定を変更しないまま、再度 vagrant up して再度仮想マシンを作る
  4. knife solo prepare で以下のエラーが発生した
ERROR: Net::SSH::HostKeyMismatch: fingerprint 23:bc:39:d7:f3:dd:9a:1a:01:f3:3b:a4:ec:3b:9d:02 does not match for "192.168.33.10"


原因は、以下のファイル「known_hosts」に、destroyした仮想マシンののエントリが残っていたためです。

%USERPROFILE%\.ssh\known_hosts


そのため、known_hostsから不要なエントリを削除すれば、knife solo prepare することができます。