毎回アホの様に忘れるので、記録しとくよっ。
Vagrantで作業していて、環境コピーして、環境内のOSやらミドルウェアのアップグレードと、アップグレード後の環境で、システムが正常に動作するかのテストや、動かない場合のプログラム修正とかって、OSやミドルウェアのサポート期限が切れる頃にやるんだけど、毎回うろ覚えなんでアウトプットすればもう少し記憶されるかなと。
流れは簡単で、
boxファイルはVagrantに登録して、登録したboxで初期化する方法もあるけど好きな方法でどうぞ。
boxファイルの作成
作業ディレクトリで、
$ vagrant package --output [名前.box]
とするか、VM名を指定して作成する。
$ vagrant package [VM名] --output [名前.box]
VM名を忘れた場合は、statusコマンドで確認
$ vagrant status
Current machine states:
default poweroff (virtualbox)
~~~~~~~
The VM is powered off. To restart the VM, simply run vagrant up
こんな感じ。
$ vagrant package default --output myproject.box
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: D:/Vagrant/myproject/myproject.box
コピー先Vagrant環境初期化
コピー先となるディレクトリを作成して、分かりやすくそこに先ほどのboxファイルをコピー。
そのディレクトリで、Vagrantを初期化
$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
Vagrantファイルを編集
Vagrantファイル内のboxファイルの下記部分を修正
Windowsの場合、フルパスじゃないとダメでした。
config.vm.box = "base"
↓
config.vm.box = "D:\\Vagrant\myproject\myproject.box"
その他の設定環境も必要に応じてコピーして起動!
$ vagrant up
無事起動!
ちなみにboxファイルをVagrantに登録する方法はこちら
$ vagrant box add [任意のVM名] [名前.boxのパス]
例:vagrant box add myprojectx ./myproject.box
$ vagrant box list
vagrant box list
myprojectx (virtualbox, 0)
generic/centos8 (virtualbox, 3.0.32)
$ vagrant init myprojectx
あとは、Vagrantファイルを編集して、起動するだけ。
問題は、Vagrantに登録されたboxファイルの実体ファイルがどこに作られるかだよね。
Windowsの場合、登録したboxファイルは下記ディレクトリに、
C:\Users\ユーザー名\.vagrant.d\boxes
初期化して作成したVMは下記ディレクトリに保存される。
C:\Users\ユーザー名\VirtualBox VMs
boxファイルはディレクトリを削除しても消せるが、コマンドラインかも削除はできる。
$ vagrant box remove [BOX名]
VMはコマンドラインで登録されているVM一覧を確認し、コンテナIDを指定することで削除できる。
$ vagrant global-status
-------------------------------------------------------------------------
1e765ed default virtualbox poweroff D:/Vagrant/myproject
6a74de3 default virtualbox poweroff D:/Vagrant/myprojectx
$ vagrant destroy 6a74de
よし、少しは記憶が定着したかな。
不要になったboxを削除する際に注意すること
後日談ですが、使用済みになったboxを削除すると、
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
:
と、SSHの認証ができずループして、正常に起動しなくなりました。
vb.gui = true
として、起動時にVirtualBoxを起動させるようにしてみると、ログイン画面までは起動している様子。しかし、ログインしてSSHDの起動状態を確認してみて正常に起動しているが、外部からSSH接続はできず。なんか、Vagrantfileの設定が反映されていない様な感じ。
調べてみると、登録されたboxファイル内にある秘密鍵を使って自動的にSSHログインを行う様で、boxファイルを削除してしまうと、VagrantのGlobalな秘密鍵を使ってログインしようとするため、ログインできない様子。(これに気付くのに数時間かかったよ。)
$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile C:/Users/[ユーザー名]/.vagrant.d/boxes/[BOX名 OR BOX読み込み時のディレクトリ]/0/virtualbox/vagrant_private_key
IdentitiesOnly yes
LogLevel FATAL
この「IdentityFile」のファイルがログイン用の秘密鍵ファイル。
boxのディレクトリを削除すると、
IdentityFile C:/Users/[ユーザー名]/.vagrant.d/insecure_private_key
が参照されるようになってしまう。
なので、IdentityFile の vagrant_private_key をコピーしておく。
今回は分かりやすくVagrantファイルと同じ場所にコピーし、Vagrantファイルで、この秘密鍵ファイルを使うように指定してあげる。
config.ssh.insert_key = false
config.ssh.private_key_path = "D:\\Vagrant\projectx\\vagrant_private_key"
という感じで、秘密鍵ファイルをしてしてあげると、無事起動できるようなり、不要になったboxファイルも削除できて、ゴミが減って気分もスッキリ。
Add comment