Vagrantのデータをそのまま他のPCにコピーしてもダメなのできちんとboxを作ろうという話

昨日のエントリで開発機をSSD換装して、homeディレクトリを丸々コピーしたと書いたけどその後日譚。

homeディレクトリを丸々コピーしてそのまま書き戻したので、アプリケーションさえインストールしたらデータはそのまま引き継げると考えていました。実際、多くのアプリケーションはそれだけで十分でした。そう、Vagrant以外は。
私はDockerにはどうも馴染めず、個人開発にはVagrantを使っていました(OSはCentOS)。SSD換装後の動作確認もだいたい終わり、それじゃそろそろ開発周りも確認してみるか、とおもむろに vagrant up すると。
Got different reports about installed GuestAdditions version:
Virtualbox on your host claims:   5.0.0
VBoxService inside the vm claims: 5.2.18
Going on, assuming VBoxService is correct...
[default] GuestAdditions seems to be installed (5.2.18) correctly, but not running.
え、、
一瞬、固まりました。自分が。

Vagrant動かねーよこれどうすんだよSeekGeeksいじれねーよ今エラーとか起きても直せねーよやべーよ…と思うことしばし。(ちなみにこのエラーが出てもVagrantが立ち上がらないわけではなく、synced_folderで指定した共有フォルダのマウントができないだけ)
とはいえエラーの中身見てたらだいたい気付きました。「あ、古いPCから持ってきたデータと新しくインストールしたVirtualBoxとかVagrantのバージョンが違うせいじゃないか!」と。
そして。

…で?

となりました。
それに気付いたとて、どうすれば解消できるかわからない。
ググればいろんな解決策が書いてあるけど、どれをやっても解決しない。
調べても調べても調べても調べても解決しない。
本当にこれだけで2週間くらいかかりました。マジで。つらかった。

いろいろやってもちょっとエラーメッセージが変わるくらい。
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
 setup
Stdout from the command:

Stderr from the command:
bash: line 4: setup: command not found

…で?

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was: 
getent group apache 
The error output from the command was:

…で?


全然直らなくて絶望しかけてたんですが、たまたま見かけた記事で解決しました。
yum -y update
これだけ。マジで。

boxによっては直らない場合もあるけど、そのときはさらにこのコマンドを追加。
yum install -y kernel*
これだけやって vagrant reload したら直りました。びっくり。

でも、記事タイトルにも書いたんですがデータを丸々バックアップしてるだけの場合、これだけではダメでした。
最初に vagrant up したときに vagrant box add したときの状態に初期化されてしまうらしく、自分でアレコレいじった開発環境が消え去ってしまうという事態に。
これもこれで回避策はあったのかもしれないですが、私の場合はサブ機があってそっちにも同じ環境を構築してたりしてたので、サブ機の方で vagrant package で新たにboxを作成。それを新PCで読み込ませる形で回避しました。(その後先ほど書いた解決策も実行)

Vagrantを移行するときはきちんとboxを作るようにしようね、という学びを得ました。
次からはホント気を付けよう。。
…Dockerならこんなトラブルは発生しなかったんですかね…?
正直ちょっとDockerに気持ちが傾いてしまった出来事でした。