ブログの名前なんて適当で良いのでは

説明を求めるな、記事を読め

VM NO OWARI

それは突然起こった...

$ vagrant up; vagrant ssh

私「ん?なんかエラー起こってるぞ.再起動すっかw」

$ vagrant halt; vagrant up; vagrant ssh;

私「おっし繋がった.・・・あれ,.zshrcが読み込めてないぞ」

$ ls
$

・・・?

$ ls -a
.  ..  .bash_history  .bash_logout  .bashrc  .cache  .cloud-locale-test.skip  .profile  .ssh

全てが消えた

復旧手順

全て消えたと思っていた矢先いろいろやったら治ったので備忘録として記録しておく.

今回の事例がどう引き起こされかはわからないが2点問題点があったのでまずそれを示す.

  1. Vagrant仮想マシンの紐づけが外れてしまっていた
  2. なぜか.ssh/authorized_keysが変わっていた

1 Vagrant仮想マシンの紐付け

vagrant upを実行したら新しい環境が作られているところから以下の記事を見つけた.

http://elm-arata.hatenablog.com/entry/2013/09/25/175547

Vagrantfileが置かれているディレクトリには, .vagrantというディレクトリが存在する.この中をどんどん潜っていくとidというファイルが存在する.このファイルにはUUIDが記述されている.

UUIDは, Open Software Foundation (OSF)が標準化した、ソフトウェアを一意に識別するための識別子(wikipedia)

この値を確認した.

eddcb3eb-13f5-4eb0-865e-890fb22b3d27

以下のコマンドを実行する.

VBoxManage list vms
# 筆者の環境だと以下のようになっていた.
"Ubuntu64_default_1448177732785_57088" {f37d6146-930a-409b-8fb0-75aa4f64da90}
"Ubuntu64_default_1457129419526_86901" {eddcb3eb-13f5-4eb0-865e-890fb22b3d27}

VBoxManageはVirtualBox側のコマンド(だと思われる)なので他のproviderを使っている人はごめんなさい...

この結果より先のUUIDと2番目のUUIDが同じことがわかる.これが新しく作られてしまった方であり, idファイルに書かれたマシンを起動するらしい.そこで前者の方のUUIDをコピペしてidファイルに記述した.もちろん前のUUIDはしっかり消してから.

その後vagrant upをしたところ, 以下のようなところで止まってしまった.

default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
default: Warning: Authentication failure. Retrying...

これのループに成ってしまったので, 途中で無理矢理止めて, vagrant sshをしたところパスワードの入力を促されてしまった.もちろんvagrantは,ユーザ/パスワードともにvagrantなのでそれでログインすると元の環境が生き残っていた.

2. sshの再設定

1.でssh周りがおかしくなっていることがわかったので, .ssh/authorized_keysを見てみたところ以下のような記述が増えていた(確か前はなかった気がする).

# CLOUD_IMG: This file was created/modified by the Cloud Image build process

正確ではないが, 秘密鍵と公開鍵が正しい組み合わせではない気がした.そこでググると以下の記事を発見.

http://blog.10rane.com/2015/08/28/errors-out-when-using-to-package-the-box/

上によると対象の秘密鍵から公開鍵を作成するには, 以下のようにすれば良いらしい.

ssh-keygen -yf private_key > public_key

この公開鍵でvagrant側の.ssh/authorized_keysに書き換える.その後vagrantを再起動してみた.

環境復活!

最後に,間違って生成した方のVMを消しておいた.これは,VBoxManageで得た名前の環境をVirtualbox側で消すだけ.

感想

今回はなんとかなったからよかったが, やはりバックアップというものはいつ何時必要になるかがわからないからしっかり取るべきだという知見を得た?