😀

vagrantの設定を色々調べて(試してみた)

2022/11/28に公開

入門ChefSolo-InfrastructureasCode-1.0.0を買ってvagrantにハマっています。
vagrantの設定について色々調べてみました。

環境

  • mac-osx

事前準備に必要なもの

参考にしたサイト

vagrantとは?

vm(virtualbox,vmware)をコマンドラインで作成、起動などができるもの
chef-soloやるだけなら特に必要はないが、chef-soloをやる場合に何回も壊しては作るを繰り返すことになるので合ったほうが便利
ちなみにvagrantでもなくてもvirtualboxのコマンドでも頑張れば同様なことはできる。
chef-soloを使う為の箱の自動化処理部分を担ってくれる

Vagrantfileとは

Vagrantfileはvagrantの設定ファイルです
以下Vagrantfileの設定についての説明です。
またこれ以下の設定内容は全て下記のブロック内で設定してください。

Vagtanrfile
Vagrant.configure("2") do |config|
.
.
#このブロック内で定義してください。
end

config.vm.box

Command-Line Interface Box

vagrant内部で持つvmの名前です。
これは

vagrant box add {任意のvm名称}

の{任意のvm名称}の部分にあたります。
設定は下記にような形になります

Vagrantfile
config.vm.box = "{任意のvm名称}"

公式より

The name argument of this command is a logical name, meaning you can effectively choose whatever you want. This is the name that Vagrant searches for to match with the config.vm.box setting in Vagrantfiles.

ちょっと英語が読めませんがvagrant box add したものと同一でなければいけません(多分合ってる)。

また勘違いしやすいのですがこれとGUIの管理ツールから見えるbox名前は一致しません。
これは後で説明します。

config.vm.provider

Providers Configuration

provider (virtualbox,vmware等)の基本設定を変更することができます。

boxの名称の変更

virtualboxのGUI上で見える名前を設定したい場合は

Vagrantfile
  config.vm.provider :virtualbox do |vb|
    vb.name = "{任意の名前}"
  end

とすれば名前を変更できます。
vb.nameとvagrantで操作するbox名は一致しません。
あくまでvirtualbox上のGUIの名前になります。

メモリの設定

仮想boxのメモリの割り当てを変更したい場合は

Vagrantfile
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "変更したいメモリ(Mbyte単位)"]
  end

とすればメモリの割り当てを変更できます。

config.vm.network

Networking Basic Usage

vmのネットワーク設定です。
vagrantbox.esのcentos6.4だとデフォルトはNATのポートフォワーディングのみの設定なので
自分はHostOnlyAdapterの設定を追加しています。

Vagrantfile
config.vm.network :private_network, ip: "ゲストOS側の割り当てたい任意のIPアドレス"

他にもportフォワーディングとかbrigeとか設定できるみたいですが試していないので割愛します。

config.vm.provision

Provisioning Basic Usage

vmの起動後に実行してくれる設定を持たすことができます。
起動後に前処理をしてくれるイメージで問題有りません。

:shell

前処理をshellで実行出来ます。
設定は下記のようになります。

Vagrantfile
config.vm.provision :shell, :path => "{任意の名前}.sh"

この例ですとvmの起動後カレントの{任意の名前}.shを実行するという処理になります。(起動時毎回)

ちなみに自分はvagrantbox.esから取ってきたCentOS 6.4 x86_64 Minimal (VirtualBox Guest Additions 4.2.8, Chef 11.4.0, Puppet 3.1.0)のboxが最初rsyncが入ってなくて初回chef-soloを実行するとエラーになったので
{任意の名前}.shを下記にように書きました。

provisioning.sh
#!/usr/bin/env bash
#
# provisioning shell
# @see http://docs.vagrantup.com/v2/provisioning/shell.html
#

set -e

# rsyncパッケージがデフォルトで入っていない場合はインストールする
if ! yum list installed | grep rsync >/dev/null 2>&1; then
    yum -y install rsync
fi

また:inlineというものもあって.shでなく直接Vagrantfileに書いて実行できるようです。試していないので説明は公式に譲ります。

Vagrantfile
Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision :shell, :inline => "echo hello"
end

他にも

  • chef-soloの設定
  • puppetの設定
  • chef-cliantの設定

ができるみたいですが試していなので割愛します。

config.vm.synced_folder

共有フォルダの設定です。
デフォルトは

  • ホスト側はVagrantfileがおいてあるカレントディレクトリ
  • ゲスト側は/Vagrant

が共有フォルダとして設定されていますが上記内容を変更出来ます。

Vagrantfile
  config.vm.synced_folder "ホスト側のディレクトリ", "ゲスト側のディレクトリ"

[おまけ]vagrant pluginコマンドについて

vagrantはいろんなプラグインがgemで出まわってます。

http://rubygems.org/search?utf8=✓&query=vagrant

このpluginをvagrantに食わせる場合は

vagrant plugin install {gemの名称}

で入れられます。
有名どころだとsaharaとかもこれでinstallできます。

ちなみにvagrantboxesのpluginは自分の環境では上手く動作しませんでした。

vagrant-vbguest plugin

Guest Additionsの自動更新をしてくれるもの

vagrant plugin install vagrant-vbguest

[余談]作ったvagrantのVMについて

vagrantで作ったvmはGUI上で除去などすると
設定ファイルが残ったままになるので再度同じ名前のboxを作ろうするとエラーになります。
そんな時は~/.vagrant.dの削除をしてみてください。

今日はここまで調べたのでまた調べたらこの記事に追記していこうかと思ってます。

Discussion