IBM 現場SEのITな日々

IBM現場SEが日々駆使している技術、現場SEの経験・知見を綴るブログです

(志賀)超初心者向け:完全無償な検証環境を作る方法(VirtualBox+Vagrant)[CentOS導入編1]

VirtualBox+VagrantCentOSの仮想環境を実装する(実践編つづき)

今回は前回の続きで、CentOS6/7をVirtualBox+Vagrantで自動構築する仕組みを実装していきます。また量が多いので、Windowsは次の機会に回します。

Vagrantを利用して仮想マシンを起動・停止・削除する方法は次の記事でご紹介します。

f:id:users-6h324:20170802144828p:plain

2:各OS用のBoxファイルを作成してBoxを定義する

 BoxとはVagrantを使用してインスタンスを作る際の雛形になるイメージファイルです。Vagrant上でこのイメージファイル定義を追加する必要があります。

具体的にやることは

1:イメージファイルを用意する

2:"vagrant box add"コマンドを実行してVagrant上で定義する

これだけです。なお、1で用意するのはイメージファイルではなく自分で作成したVirtualBox上のインスタンスでもOKです。(= つまり、自分で好きなようにインスタンスを作って簡単に展開可能!)

 

1:イメージファイルを用意する

イメージファイルは以下から簡単に見つけられます。

https://app.vagrantup.com/boxes/search

ただ、こちらは登録さえしてしまえば誰でも登録できるものです。セキュリティ的な観点から考えるとできるだけ公式から提供されているものを使いたいところです。

CentOS6/7は公式から提供されてました。

https://app.vagrantup.com/centos

Boxファイルとしては以下においてありました。ここにある、”CentOS-N.box”のリンクを使います。

http://cloud.centos.org/centos/6/vagrant/x86_64/images/

http://cloud.centos.org/centos/7/vagrant/x86_64/images/

2:"vagrant box add"コマンドを実行してVagrant上で定義する

以下のコマンドを実行します。

定義:vagrant box add [定義するBox名] [Boxファイルのフルパス]

参照:vagrant box list

定義後に参照コマンドを実行した、定義したBox名が表示されればOKです。

 PS C:\asitestenv> vagrant box add CentOS7-3-Server http://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'CentOS7-3-Server' (v0) for provider:
    box: Downloading: http://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7.box
    box: Progress: 100% (Rate: 466k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'CentOS7-3-Server' (v0) for 'virtualbox'!

PS C:\asitestenv> vagrant box add CentOS6-9-Server http://cloud.centos.org/centos/6/vagrant/x86_64/images/C
entOS-6.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'CentOS6-9-Server' (v0) for provider:
    box: Downloading: http://cloud.centos.org/centos/6/vagrant/x86_64/images/CentOS-6.box
    box: Progress: 100% (Rate: 864k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'CentOS6-9-Server' (v0) for 'virtualbox'!
PS C:\asitestenv>
PS C:\asitestenv> vagrant box list
CentOS6-9-Server (virtualbox, 0)

CentOS7-3-Server (virtualbox, 0)
PS C:\asitestenv>

 なお、もしインターネットにつながらない端末でvagrant box addを行いたい場合には、いったん上記リンクから別のマシンにBoxファイルをダウンロードの上ファイルを端末に配置し、ファイルのフルパスをローカルの保管場所に指定してあげることもできます。

3:検証環境に合わせたVagrantfileを作成する

Vagrantは自動でいろいろなファイルを作業ディレクトリに作成するので作業用にひとつディレクトリを作るとよいです。Vagrantの概念ではこのディレクトリ単位でひとつの「プロジェクト」と呼び、インスタンスの作成/削除を行います。

作成したディレクトリ(ここではC:\asitestenv)に移動して、Vagrant初期化コマンド"vagrant init"を実行すると、同ディレクトリにVagrantfileが作成されます。このファイルに作成したいインスタンスの定義詳細(ホスト名やIPアドレス等)を記載します。

PS C:\asitestenv> 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.
PS C:\asitestenv>

 このまま、Vagrantのプロジェクト状態を確認します。

PS C:\asitestenv> vagrant status
Current machine states:

default                   not created (virtualbox)

The environment has not yet been created. Run `vagrant up` to
create the environment. If a machine is not created, only the
default provider will be shown. So if a provider is not listed,
then the machine is not created for that environment.
PS C:\asitestenv>

 この内容から、「このディレクトリにあるVagrantfileにはdefaultという仮想マシンを作るための定義がしてあり、かつ、defaultはまだ作成されていない(not created)」ということが分かります。defaultを作成して起動すると"not created"の箇所が"running"になり、停止すると"poweroff"とステータスの記載が変わります。

 

ディレクトリにあるVagrantfileを開いてみると、デフォルト設定がだらっと一通り書いてありますので、適当にファイルのバックアップを取って、Vagrantfileの中身を全部削除し、以下のように記載してみます。中身は後ほど解説します。

 

Vagrant.configure("2") do |config|

  # client1 base configuration
  config.vm.define :client1 do |client1|
    client1.vm.box = "CentOS6-9-Server"
    client1.vm.network :private_network, ip:"192.168.50.14"
    client1.vm.hostname = "asiclient1"
    client1.vm.synced_folder ".", "/vagrant", disabled: true
  end

end

変更を保存して、もう一度状態確認

PS C:\asitestenv> vagrant status
Current machine states:

client1                   not created (virtualbox)

The environment has not yet been created. Run `vagrant up` to
create the environment. If a machine is not created, only the
default provider will be shown. So if a provider is not listed,
then the machine is not created for that environment.
PS C:\asitestenv>

仮想マシン名がdefaultからclient1に変わってます。これで、なんだかよく分からないけれどとりあえずclient1の仮想マシン定義ができました。

更に、client2の記載をVagrantfileに追加してみます。

Vagrant.configure("2") do |config|

  # client1 base configuration
  config.vm.define :client1 do |client1|
    client1.vm.box = "CentOS6-9-Server"
    client1.vm.network :private_network, ip:"192.168.50.14"
    client1.vm.hostname = "asiclient1"
    client1.vm.synced_folder ".", "/vagrant", disabled: true
  end
    
  # client2 base configuration
  config.vm.define :client2 do |client2|
    client2.vm.box = "CentOS7-3-Server"
    client2.vm.network :private_network, ip:"192.168.50.15"
    client2.vm.hostname = "asiclient2"
    client2.vm.synced_folder ".", "/vagrant", disabled: true
  end

end

この状態で状態確認すると以下のようにclient2の仮想マシン定義が追加されていることが確認できます。

PS C:\asitestenv> vagrant status
Current machine states:

client1                   not created (virtualbox)
client2                   not created (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
PS C:\asitestenv>

パラメータについてひとつひとつ簡単に解説です。

config.vm.define仮想マシン名(clientN)を定義して、

clientN.vm.box ・・・使用するBoxイメージ

clientN.vm.network・・・ネットワークの定義(ネットワークの種類とIPアドレス)

clientN.vm.hostname・・・ホスト名

clientN.vm.synced_folder・・・ゲストOSとホストOS間での共有フォルダ設定(デフォルトON)

clientN.vm.synced_folderについては、この行であえて使用しない設定(disabled:true)にしています。CentOS6/7ではホストOSに入っているVirtualBoxとVboxGuestAdditionsのバージョン差異が原因でマウントエラーになるバグが存在することが分かっているためです。(ホストOS側にあるVBoxGuestAdditions.isoを新しいものに差し替えてバージョン差異を解消してあげるのが根本解決方法ですが、今回は初心者向けゆえここでは触れずにおきます。参考: https://utano.jp/entry/2014/11/vagrant_guest_additions_update_error/

 

Vagrantで自動構築する内容は、上記のようなパラメータ単位で指定できるものもありますし、その他にもユーザを作成する、特定のモジュールを追加インストールする等の細かい処理もVagrantfile内でスクリプトを定義して実行することも可能です。

このあたりの詳細を知りたければ調べてみることをお勧めします。

(参考:https://www.virment.com/vagrantfile-settings/

 

では次回、ここまで作ってきたVagrantfileの内容で、仮想マシンを実際に作ってみたいと思います。