- 今後の障害調査時に使えそうな情報なので自分用にメモ
概要
-
vagrant up
後 1度正常に起動するがvagrant halt
などで一度仮想マシンの停止後に再度vagrant up
すると、共有フォルダのマウント処理でSegmentation Fault
が発生して起動に失敗するようになった - ググっても同じような事象は見受けられなかったので、所詮
おま環
の問題という できれば会いたくない障害でかなりの時間を浪費しました。
環境
- ホストOS : windows10home 1709(16299.64) ※
winver
で確認 - プロバイダ: Virtualbox 5.2.0 r118431(Qt5.6.2) + 拡張パック(5.2.0 r118431)
- Vagrant : 2.0.1
- Vagrant plugin :
$ vagrant plugin list
vagrant-cachier (1.2.1)
vagrant-hostsupdater (1.0.2)
- Version Constraint: > 0
vagrant-ignition (0.0.3)
- Version Constraint: > 0
vagrant-share (1.1.9, system)
- Version Constraint: > 0
vagrant-vbguest (0.15.0)
- Version Constraint: > 0
- コンソール : git for windowsに付属の git bash コンソールで作業
状況
- おなじみ
vagrant up
で仮想マシンを起動すると見慣れないSegmentation fault
のエラーが発生。ホストを再起動などしても変わらず。
$ vagrant up
Bringing machine 'develop.vm' up with 'virtualbox' provider...
==> develop.vm: Checking if box 'minimal/centos7' is up to date...
==> develop.vm: Fixed port collision for 22 => 2222. Now on port 2200.
Segmentation fault
Segmentation fault
だけ表示されても何かわからん!
Vagrantのデバッグ情報を出力させる
-
VAGRANT_LOG=DEBUG
をvagrantコマンドの前に付与するとデバッグ情報を見れる -
vagrant --debug
でもいけた
$ VAGRANT_LOG=DEBUG vagrant up
~
いろいろログが流れて最終的に下記の箇所で停止する
~
DEBUG subprocess: Waiting for process to exit. Remaining to timeout: 32000
DEBUG subprocess: Exit status: 0
INFO warden: Calling IN action: #<Vagrant::Action::Builtin::SyncedFolders:0x00000000075b3860>
INFO synced_folders: SyncedFolders loading from cache: false
INFO synced_folders: Synced Folder Implementation: virtualbox
INFO synced_folders: - /vagrant: . => /vagrant
INFO synced_folders: - vagrant-cache: C:/Users/name/.vagrant.d/cache/minimal/centos7 => /tmp/vagrant-cache
Segmentation fault
-
up
だけでなくdestroy
やstatus
など他のVagrantの操作コマンド全般でも同様に詳細なデバッグ情報を見れる。手がかりが何もない状況よりかなり助かる。
対応など検討
- 最初はPluginが何か かち合ってるのか?とも思ったが、手元の環境では Segmentation Faultが出ると必ずこのマウントの部分で止まっている事を確認できた。
- これまで自分の環境では出ていなかったが、昔から言われている Windows+VirtualBOX+Vagrant でのファイル共有問題が顕在化したと思われる。
- 最近 Virtualbox と Vagrant周りのアップデートを行ったり、ホスト側のWindowsアップデートも日々行われるのでその辺の組み合わせが原因の可能性は充分ある
- Vagrantではホストゲスト間のマウントは NFSで行うのがベストプラクティスらしい。
- ホストが WindowsなのでNFS実装は難しいため vagrant プラグイン
vagrant-winnfsd
: https://github.com/winnfsd/vagrant-winnfsd の導入など検討。 - もしくは取り急ぎは Virtualbox とVagrant のバージョンをデグレードもして検証 といったあたりだろうか・・・
解決
- 最終的にVirtualBOX(拡張含む) とVagrantをデグレ+
vagrant-winnfsd
プラグインの導入で手前の環境は安定したのでしばらくこのまま使う事で解決としました。 - VirtualBOX → 5.1.30
- Vagrant → 1.9.8
- 最新版へのアップグレードは近い将来にまた挑戦したいとは思います。
Vagrantプラグイン vagrant-winnfsd
の使い方
- 公式に従います : https://github.com/winnfsd/vagrant-winnfsd
vagrant plugin install vagrant-winnfsd
- Vagrantfile へ下記を追記。
if Vagrant.has_plugin?("vagrant-winnfsd")
config.winnfsd.uid = 500
config.winnfsd.gid = 500
end
config.vm.synced_folder ".", "/vagrant", type: "nfs"
- ちなみに UID/GIDは私がよく使っているBOXである bento のゲストOS環境では、vagrantのUID/GIDが 500だったので500にしています。使うBOXにより違いがあるかと思います。
追記
- インストールされている vagrant本体 と Vagrantプラグインのバージョンが食い違っていてもエラーになることがあるようだったので下記でプラグインの更新も試す。
vagrant plugin update
- もしくは プラグイン入れなおすのも試してみる
vagrant plugin expunge --reinstall
その他
- Vagrant+Virtualbox+Windowsのファイル共有は Virtualbox本体と VirtualBox Extension PackとVagrantのバージョンの組み合わせでいろいろ面倒な気配がするので、今回の
vagrant-winnfsd
を使う事で共有機能に関してはもろもろのしがらみから解放されることになり幸せになれたのかもしれない。 - Vagrant+VirtualBOXでも Linux/macOS環境で開発する方が安定するのかなー
参考
- https://qiita.com/Ping/items/9bc6e4492b22d1ff2db4
- https://www.vagrantup.com/docs/synced-folders/nfs.html
- https://github.com/winnfsd/vagrant-winnfsd
- https://blog.hiratama.net/windows%E3%81%A7vagrant%E4%BD%BF%E3%81%86%E3%81%AA%E3%82%89vagrant-winnfsd%E3%82%92%E5%85%A5%E3%82%8C%E3%81%9F%E6%96%B9%E3%81%8C%E3%82%88%E3%81%84/