Matthewの備忘録

忘れたときはここを見ろ。何か書いてある。

VirtualBoxとVagrantによる同一仮想環境の提供 その1

 或る組織とプロジェクトを立ち上げたのだが、要らぬ手間暇をかけたくないので、開発者や試験者に同一環境を用意しようと提案してくれた方がいたので、賛同し、使ってみた。その手順や陥りやすいミスなどがあれば記しておこうという備忘録である。

入手とインストール

VirtualBox

 他にもOpenSouceやフリーな仮想OSアプリケーションはあるが、VirtualBoxがよいらしい。Mac版、Linux版、Windows版がそろっており、同じ仮想OSイメージを異なるホストOS上できちんと同じく動かせる。
Oracle VM VirtualBox
 私の場合は既にインストールしていたので気にしなかったが、VirtualBox自体のインストールではネットワークの一瞬の切断などが必要なので、何か常時接続などをしている場合は注意されたい。*1

Vagrant

 構成情報を記述した設定ファイルを元に、仮想環境の構築から設定までを自動的に行うことができるのがVagrantだ。他にもあるだろうが、VirtualBoxとのベストパートナー的なものはVagrantである。Mac版、Windows版、Linux版(Debian版、CentOS版)がある。Windows版はインストールがダウンロードできる。

 UbuntuをホストOSにしたい場合はDebian版のdebパッケージをdpkgでインストールしてみるのが良いかもしれない。Windows版は再起動が必要である。

 セキュリティソフトを利用していると、Vagrantのインストールに警告がでることがある。ノートンの場合、Vagrantのインストールソフトウェアのインストールした統計が極端に少ないためであろう。メッセージダイジェストが同じであれば、とりあえず気にしなくてよい。

www.vagrantup.com

開発環境イメージを作成

ゲストOSの用意

 例として、ゲストOSにUbuntu 15.10を選んだ。これは自前でインストールするか、イメージ配布サイトで入手するとよいが、本来はVagrantで用意しているイメージから選んだほうがよいだろう。これは後述する。

www.osboxes.org

Vagrantで環境構築

 基本的には次の三つのコマンドで事足りる。

 $ vagrant box add {title} {url}
 $ vagrant init {title}
 $ vagrant up

参考:
stupiddog.hatenablog.com

vagrant box add {title} {url}

 最初のコマンドは、元になるOSのひな型イメージなどがパッキングされているboxファイルを提供しているURL(ファイルへのフルパス、間接パスでもよい)を指定し、そのboxファイルなるものを{title}で名付けた論理名で管理することを設定し、パッキング(圧縮?アーカイブ?)されているboxファイルを伸長するものである。このコマンドを実行すると、実行したフォルダに.vagrantフォルダだけが作られ、さらに%homepath%\.vagrant.d\boxesフォルダ(Windowsの場合)以下に{title}で指定した文字列のフォルダが作られ、そのサブディレクトリに、VirtualBox用のイメージや、各種設定用のファイルが配置される。LinuxMacの場合は$HOME/.vagrant.d/boxesフォルダ以下であろう。次はフォルダの展開をtreeコマンドで確認してみたものである。VirtualBox用のイメージファイルや設定ファイル、ssh用の秘密鍵などが用意されていることがわかる。また、"vagrant box list"コマンドによって登録されたboxファイルを認識できていることがわかる。

 このコマンドの実行はboxファイルをダウンロードしたところや、作業ディレクトリのどこでもよい。

 次は、boxファイルがあるフォルダで"vagrant box add robocon-dev-box robocon-dev.box"を実行後、%homepath%\.vagrant.d\boxesのディレクトリ構造を表示してみたものである。ひな型になるVirtualBoxイメージや秘密鍵などが配置されているのがわかる。

C:%homepath%\hogehoge>tree /F %homepath%\.vagrant.d\boxes
フォルダー パスの一覧:  ボリューム Windows_OS
ボリューム シリアル番号は 660A-6583 です
C:%homepath%\.VAGRANT.D\BOXES
└─robocon-dev-box
    └─0
        └─virtualbox
                box-disk1.vmdk
                box.ovf
                metadata.json
                Vagrantfile
                vagrant_private_key


C:%homepath%\hogehoge>vagrant box list
robocon-dev-box (virtualbox, 0)

C:%homepath%\hogehoge>
vagrant init {title}

 次のコマンドはvagrantfileを作るためのコマンドである。このコマンドは、コマンドが実行されたディレクトリにvagrantfileがなければひな型のvagrantfileを生成するだけである。もしvagrantfileが配布されているのであれば、このコマンドを実行する必要はない。このコマンドはvargantfileを置きたい任意のフォルダで実行すればよい。

 尚、vargantfileには、vagrantの設定、VirtualBox利用の場合、VirtualBoxで利用する、メモリ、CPU、ネットワークなどのリソース設定に加え、OSにインストールするライブラリ、アプリケーションなどをインストール・設定するためのシェルスクリプトなどが書けるようになっているが、この記事では扱わない。

vagrant up

 このコマンドの実行で、実行したフォルダのフォルダ名を冠したフォルダを"%homepath%VirtualBox VMs"以下に作ったあと、Vargantfileの設定config.vm.boxで指定された論理名(識別名)と結び付けられている%homepath%\.vargrant.d\boxes\以下にあるvmdkイメージファイルをひな型として、そのフォルダにイメージファイルをコピーし、VirtualBoxに登録し、OSを起動させ、通信設定や、指定されていればライブラリやアプリケーションのインストール実行する。また、コマンドを実行したフォルダに.vagrantというサブフォルダが作成される。OSが起動しているかどうは、VirtualBoxを起動させてみればわかる。"vagrant up"コマンドを実行したフォルダ名を冠にしたイメージ名が登録されているのが確認できるはずだ。

 LinuxMacなどではコマンド"vagrant ssh"で接続できるが、Windowsの場合、Vagrantfileで指定されていなければ、sshポート2222を指定し、%homepath%\vagrant.d\boxes\以下につくられるboxフォルダ内にある秘密鍵sshクライアントに設定し、ユーザーIDにguestを指定すれば、sshクライアントを接続できる。sshクライアントはどれでも接続できるはずだ。

 次は、%homepath%test1214というフォルダでvagrant upを実行した結果作成されたフォルダとファイルをtreeコマンドで表示してみたものである。

C:%homepath%\test1214>tree /F "%homepath%\VirtualBox VMs"
フォルダー パスの一覧:  ボリューム Windows7_OS
ボリューム シリアル番号は 660A-6583 です
C:%homepath%\VIRTUALBOX VMS
└─test1214_default_1481718560954_96751
    │  box-disk1.vmdk
    │  test1214_default_1481718560954_96751.vbox
    │  test1214_default_1481718560954_96751.vbox-prev
    │
    └─Logs
            VBox.log
            VBoxHardening.log


C:%homepath%\test1214>tree /F .
フォルダー パスの一覧:  ボリューム Windows7_OS
ボリューム シリアル番号は 660A-6583 です
C:%homepath%\TEST1214
│  Vagrantfile
│  _Vagrantfile - コピー
│
└─.vagrant
    └─machines
        └─default
            └─virtualbox
                    action_provision
                    action_set_name
                    creator_uid
                    id
                    index_uuid
                    synced_folders


C:%homepath%\test1214>

開発環境イメージの後始末

OSを終了させたい場合:vagrant halt

 "vagrant up"コマンドを実行するとVirtualBoxで仮想OSが起動されたままになっている。単純に機動している仮想OSを停止させたい場合は"vagrant halt"コマンドを実行すればよい。また、再び起動したい場合は"vagrant reload"でよい。

2回目以降にプロビジョニングさせたい場合

 最初の設定を変更して、色々変更した仮想OSをセットアップ(プロビジョニング)したい場合は、"vagrant up --provision"を実行して積極的に指示すればよい。

参考:
www.msng.info

OSを停止させたい場合:vagrant suspend

 "vagrant suspend"を実行すると、仮想OSをそのままの状態を保存して停止させることができる。復帰するには"vagrant resume"を実行する。ただ、resumeを実行するとネットワークの設定やプロビジョニングをし始めたようなメッセージが表示されるので、その振る舞いをもう少し調査すべきである。

OSを捨てたい場合:vagrant destroy

 "vagrant destroy"を実行すれば、仮想OSが実行中であっても削除される。%homepath%VirtualBox VMs"から該当のフォルダが削除される。但し、フォルダは残るので自分で削除すればよい。このコマンドを実行したフォルダの.vagrantフォルダも残るので、削除したければ自分で削除するべし。

ゲストOSのイメージひな型

 
 通常は次のサイトからイメージのひな型を指定するとよいらしい。沢山のイメージが登録されている。

A list of base boxes for Vagrant - Vagrantbox.es

*1:再起動する必要もあったかな?