vagrantでブルースクリーン(BSoD)になってしまう問題の調査中にvagrantをアンインストールたり再インストールしたりを繰り返したりしたら、vagrant upしたときに、今まで使っていたのと違う仮想マシンが同じboxベースで作られてしまいました。
今まで使っていた仮想マシンが使えないとやばい・・・
ということでいろんなサイトを調べながら、なんとか、前のVirtualBoxの仮想マシンをvagrantから使えるようになりましたので、手順をメモしておきます。
今まで使っていた仮想マシンからベースとなるboxファイルを作成し、そのベースを使って、vagrant init で別フォルダに環境を再現するという流れになります。
手順ですが、
- Vagrantパッケージ(boxファイル)の作成
- Vagrant boxの追加
- Vagrantfileの作成・起動
となります。
VirtualBox 仮想マシンをVagrantで管理する方法
Vagrantパッケージの作成
まず、管理したいVirtualBox仮想マシンのVagrantパッケージを作成します。
私の場合、Oracle VM VirtualBox マネージャーには仮想マシン設定が残っていました。起動する必要はありませんが、「設定」ウインドウを開いて、「一般メニュー→高度タブ」のスナップショットの保存先のパスを見ると、VirtualBox の仮想マシンのあるフォルダが分かります。
また、その場所ですが、私のWindows7 64bitの環境では「c:/Users/ユーザー名/VirtualBox VMs/仮想マシンの名称」になっていました。
Vagrantパッケージ作成に必要な xxxx.vboxファイルは、上記仮想マシンのフォルダにあります。
1 2 3 4 5 |
$ pwd /c/Users/tk/VirtualBox VMs/centosx11_default_1498679633445_56532 $ ls Logs/ box-disk001.vmdk centosx11_default_1498679633445_56532.vbox centosx11_default_1498679633445_56532.vbox-prev |
vagrant package コマンドでVagrantパッケージを作成します。
vagrant package --base centosx11_default_1498679633445_56532.vbox
コマンドを実行するとカレントフォルダに、package.box が作成されます。
Vagrant boxの追加
次に作成したパッケージファイル package.box からVagrant box を作成して追加します。vagrant box add コマンドを使います。
1 2 3 4 5 6 |
$ vagrant box add centosx11 package.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'centosx11' (v0) for provider: box: Unpacking necessary files from: file://C:/Users/tk/work/vagrants/package.box box: ==> box: Successfully added box 'centosx11' (v0) for 'virtualbox'! |
centosx11の部分はboxの名称になります。好きな名前でどうぞ。
作成後は、ネットからダウンロードしたboxとともに一覧でみることができます。
1 2 3 |
$ vagrant box list CentOS-6.5-x86_64 (virtualbox, 0) centosx11 (virtualbox, 0) |
Vagrantfileの作成・起動
以下は、普段と同じような手順となりますが、新しい仮想マシン用のvagrantフォルダを作って、Vagrantfileを作成します。
1 2 3 |
mkdir -p vagrants/centosx11 cd vagrants/centosx11 vagrant init centosx11 |
Vagrantfileを編集し、ネットワーク設定の行を有効にします。
1 |
config.vm.network "private_network", ip: "192.168.33.34" |
ipアドレスはお好きに設定。
後は、
1 |
vagrant up |
です。 このとき以下のようにワーニングが続きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection reset. Retrying... default: Warning: Connection aborted. Retrying... default: Warning: Authentication failure. Retrying... ・・・・・続く・・・・・ default: Warning: Authentication failure. Retrying... Timed out while waiting for the machine to boot. This means that Vagrant was unable to communicate with the guest machine within the configured ("config.vm.boot_timeout" value) time period. If you look above, you should be able to see the error(s) that Vagrant had when attempting to connect to the machine. These errors are usually good hints as to what may be wrong. If you're using a custom box, make sure that networking is properly working and you're able to connect to the machine. It is a common problem that networking isn't setup properly in these boxes. Verify that authentication configurations are also setup properly, as well. If the box appears to be booting properly, you may want to increase the timeout ("config.vm.boot_timeout") value. |
Authentication failure が続きます。以前動いていたときと実行環境が違うため、当然、ログインできないのです。セキュリティがしっかりしているということですね。
この修正方法ですが、まず、vagrantのsshの状況を確認します。
1 2 3 4 5 6 7 8 9 10 11 |
$ vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /c/Users/tk/.vagrant.d/insecure_private_key IdentitiesOnly yes LogLevel FATAL |
IdentityFile の項目にあるキーから public key を作成します。ツールssh-keygenですが、windowsには標準で存在しないようです。私は バージョン管理ツールgit をインストールしました。
1 |
$ ssh-keygen.exe -yf /c/Users/tk/.vagrant.d/insecure_private_key > public_key |
さて、この状態でも、vagrant ssh とすれば、仮想マシンにログインすることができます。ログインして、ゲストOS上でsshキーを編集します。キーには、上記ssh-keygenコマンドで作成した public_keyの内容を使います。
1 2 3 4 5 6 7 8 9 |
$ vagrant ssh Last login: Thu Jun 29 17:22:26 2017 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@localhost ~]$ cd .ssh/ [vagrant@localhost ~]$ mv authorized_keys authorized_keys_bak [vagrant@localhost .ssh]$ vim authorized_keys [vagrant@localhost .ssh]$ chmod 600 authorized_keys [vagrant@localhost .ssh]$ logout Connection to 127.0.0.1 closed |
ここで、vim で authorized_keysを作成しております。vimを知らない方に操作を説明します。vimは、起動時にノーマルモードになっており、このままだと、文字入力ができません。
i を打ち込むと挿入モードになるので、public_keyの内容をクリップボードにコピーしてauthorized_keysに貼り付けます。まだ共有ディレクトリが設定できていないため、まどろっこしいですがこのような方法でやってます。
貼り付けたら、ESCキーを押してノーマルモードに戻り、:wq と入力することで、保存してvimを終了します。
また、chmod でアクセス権を変更していますが、デフォルトのアクセス権のままだとファイルが有効とみなされないのでご注意ください。
さて、vagrant を再起動してみます。vagrant halt としてから vagrant up でも良いのですが vagrant reload で再起動します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$ vagrant reload ==> default: Attempting graceful shutdown of VM... default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Clearing any previously set forwarded ports... ==> default: Fixed port collision for 22 => 2222. Now on port 2200. ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2200 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2200 default: SSH username: vagrant default: SSH auth method: private key ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Configuring and enabling network interfaces... default: SSH address: 127.0.0.1:2200 default: SSH username: vagrant default: SSH auth method: private key ==> default: Mounting shared folders... default: /vagrant => C:/Users/tk/work/vagrants/centosx11 ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run. |
やっと、復旧できました。よかったーーーー。
お疲れ様でした。
コメント