読者です 読者をやめる 読者になる 読者になる

世界のやまさ

SEKAI NO YAMASA

vagrant sandbox off や rollback がエラーになる時の対処

個人的に Vagrant をいろいろ試していて、そろそろまとめようと思ったら既にVagrant - naoyaのはてなダイアリーd:id:naoya さんがいい感じにまとめられていて先を越されてしまった。

非常に便利な Vagrant ですが、私の Macbook にてなぜか vagrant sandbox offvagrant sandbox rollback でエラーが出てしまったので、その対処を記載しておきます。

環境

エラー内容

vagrant sandbox off

$ vagrant sandbox off
[default] - switching sandbox off
0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Snapshot operation failed
VBoxManage: error: Failed to perform an online medium merge (VERR_INVALID_PARAMETER)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component Console, interface IConsole
VBoxManage: error: Context: "int handleSnapshot(HandlerArg*)" at line 431 of file VBoxManageSnapshot.cpp

vagrant sandbox rollback

$ vagrant sandbox rollback
[default] - powering off machine
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
[default] - roll back machine
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
[default] - starting the machine again
VBoxManage: error: The saved state file '/Users/nnasaki/VirtualBox VMs/second-kitchen_1360688166/Snapshots/2013-02-12T17-22-05-034073000Z.sav' is invalid (VERR_FILE_NOT_FOUND). Delete the saved state and try again
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Console, interface IConsole

対処

github から sahara ソースを持ってきて、issues#17 のパッチを取り込む。

sahara をビルドするために gem をいろいろインストールすると依存関係が壊れたり意図しない gem がアップデートすると後々面倒なので、rbenv-gemset を使うようにする。

brew update
brew install rbenv-gemset

git clone でソースを持ってきて、echo sahara-build > .rbenv-gemsets すると sahara 専用の gemset というかビルド環境が用意できる。

git clone https://github.com/jedi4ever/sahara.git
cd sahara
echo sahara-build > .rbenv-gemsets
gem install bundle
bundle install
rbenv rehash

sandbox off failed: Issue #17 のパッチを取り込む。パッチはヘッダを消してissues-17.patchというファイルを作成する。

patch --dry-run -p0 < issues-17.patch
patch -p0 < issues-17.patch
rake build

ビルドが成功したら gemset を消して後始末。消さないと~/.rbenvにゴミが残ったままになります。

rm .rbenv-gemsets
rbenv gemset delete 1.9.3-p327 sahara-build

sahara をインストール

cd pkg
gem install ./sahara-0.0.13.gem
rbenv rehash

sandbox が動くことを確認

vagrant sandbox status
vagrant sandbox on
vagrant sandbox off

sahara のビルド方法は 20120721 chefの下準備 #devlove の p90 を参考にしました。

私の環境だけの問題かもしれませんが、メモに残しておきます。