ページ ツリー

比較バージョン

キー

  • この行は追加されました。
  • この行は削除されました。
  • 書式設定が変更されました。

目次

VirtualBox の VM を細かく設定する

VirtualBox の設定は virtualbox プロバイダの設定で行います。
VirtualBox プロバイダの customize メソッドは VirtualBox の VBoxManage コマンドを経由して、これから起動しようとしている コマンドを経由して、
これから起動しようとしている VM のあらゆる設定を行います。

たとえば、メモリサイズを変更する場合は次のように書きます。

コード ブロック
config.vm.provider :virtualbox do |vbox|
  vbox.customize ['modifyvm', :id '--memory', '4096']
end

VBoxManage コマンドの詳細は VirtualBox のドキュメント [ https://www.virtualbox.org/manual/ch08.html ] を確認してください。のドキュメント を確認してください。

 

メモリサイズや CPU コア数を設定する

仮想マシンの基本的なリソースもここで設定できます。 

...

※ ゲスト OS が WIndows の場合など、CPU コア数を変更できない場合もあります。

 

VirtualBox の環境設定をする

クリップボードや入力インタフェースも同じように設定できます。

コード ブロック
config.vm.provider :virtualbox do |vbox|
  # クリップボード共有の設定
  vbox.customize ['modifyvm', :id, '--clipboard', 'bidirectional']
 
  # ドラッグアンドドロップの設定(双方向はまだサポートされていないらしい)
  vbox.customize ['modifyvm', :id, '--draganddrop', 'hosttoguest']
 
  # マウスの種類の選択
  vbox.customize ['modifyvm', :id, '--mouse', 'usbtablet']
 
  # キーボードの種類の選択
  vbox.customize ['modifyvm', :id, '--keyboard', 'usb']
end

 

起動ロゴを設定する

VIrtualBox は 640 * 480 の非圧縮ビットマップファイルを起動ロゴとして表示できます。
Vagrantfile と同じディレクトリに logo.bmp を置いた場合は、次のように記述します。 

コード ブロック
config.vm.provider :virtualbox do |vbox|
  # 起動ロゴのファイルパス
  vbox.customize ['modifyvm', :id, '--bioslogoimagepath', "#{Dir::pwd}/logo.bmp"]
 
  # フェードインする
  vbox.customize ['modifyvm', :id, '--bioslogofadein', 'on']
 
  # フェードアウトする
  vbox.customize ['modifyvm', :id, '--bioslogofadeout', 'on']
 
  # 起動ロゴの表示時間
  vbox.customize ['modifyvm', :id, '--bioslogodisplaytime', '10000']
end

 

名前解決をホストにブリッジする

VirtualBox の NAT エンジンは、デフォルトでゲストに対してホストに設定されている DNS サーバを登録します。
この設定を on にすると、ゲストはホストに登録されている DNS サーバのリストを参照します。
ゲストを立ち上げたままネットワークを移動するような場合は on にすると良いです。

...

コード ブロック
config.vm.provider :virtualbox do |vbox|
  vbox.customize ['modifyvm', :id, '--natdnshostresolver1', 'off']
end

 

Vagrantfile の設定を外部ファイルで制御する

Vagrantfile は Git リポジトリでバージョン管理されるファイルです。
しかし、利用者ごとに異なるユーザー名やパスワードなどは Git リポジトリにコミットしたくないので、Vagrantfile リポジトリにコミットしたくないので、
Vagrantfile に直接書くのは避けたいです。

.yml ファイルを読み込む

Vagrant プラグインは不要です。 Ruby 標準添付の yaml ライブラリだけで実現できます。

...

コード ブロック
require 'yaml'
vm_config = YAML::load_file('config.yml')
 
vm_config['A'] == 'aaa'
vm_config['B']['B2'] == 'bbb2'

 

その他の方法

dotenv を Vagrant のプラグインとしてインストールしておき、.env ファイルに設定を書く方法や、vagrantファイルに設定を書く方法や、
vagrant-secret プラグインを利用する方法などがあるようです。

 

プラグインがインストールされているかチェックする

vagrant-omnibus などの必須プラグインがインストールされていない場合に、そのまま などの必須プラグインがインストールされていない場合に、
そのまま vagrant up を実行してしまうと Ruby のスタックトレースが表示され、vagrant up が失敗します。
スタックトレースを見ても、ユーザーはどうしてそれが失敗したのか判断できない場合が多いです。

...

コード ブロック
unless Vagrant.has_plugin?('vagrant-omnibus') then
  raise 'vagrant-omnibus プラグインがインストールされていません。'
end

 

Chef プロビジョナ

Cookbook のパスを指定する

cookbooks_path に Cookbook が格納されているディレクトリへの相対パスをリストで指定します。
Vagrant では指定したパスにディレクトリが存在しない場合でも何事も無くプロビジョンをしようと
してしまうので、事前にチェックするようにしています。

コード ブロック
config.vm.provision :chef_solo do |chef|
  cookbooks_path = ['cookbooks', 'site-cookbooks']
  cookbooks_path.each do |dir|
    unless File.exists?(dir) then
      raise "cookbook_path (#{File.absolute_path(dir)}) is not found."
    end
  end
  chef.cookbooks_path = cookbooks_path
end

 

SSL の警告を抑制する

Chef プロビジョナの実行時に次のような警告が表示されることがあります。

...

コード ブロック
titleVagrantfile
config.vm.provision :chef_solo do |chef|
  chef.custom_config_path = 'Vagrantfile.chef'
end

 

他の Chef や Ruby がインストールされている環境でプロビジョンする

ゲストマシンに GEM_PATH などが指定されているとき、プロビジョニングがうまくいかない場合があります。
これを回避するには、Chef プロビジョナに Chef のバイナリパスと環境変数を指定します。

コード ブロック
config.vm.provision :chef_solo do |chef|
  chef_gem_path    = "/opt/chef/embedded/lib/ruby/gems/1.9.1"
  chef.binary_env  = "GEM_PATH=#{chef_gem_path} GEM_HOME=#{chef_gem_path}"
  chef.binary_path = "/opt/chef/bin"
end

 

 

 

yum や Chef の remote_file でダウンロードしたファイルをホストにキャッシュする

vagrant-cachier プラグインを使用します。

このプラグインを使用すると、ホストマシンのディレクトリが /var/cache/yum や Chef::Config[:file_cache_path] に
マウントされ、Box 単位、または Vagrant up する VM 単位で永続化されます。 

利用するには、vagrant-cachier プラグインのインストールが必要です。

コード ブロック
$ vagrant plugin install vagrant cachier

Vagrantfile では vagrant-cachier プラグインがインストールされている場合に、
キャッシュする単位とキャッシュするモノを指定します。 

コード ブロック
if Vagrant.has_plugin?('vagrant-cachier') then
  # Box 単位でキャッシュする
  config.cache.scope = :box
 
  # Chef と yum のファイルをキャッシュする
  config.cache.enable :chef
  config.cache.enable :yum
end


注意

このプラグインで Chef::Config[:file_cache_path] をキャッシュする場合は、
Chef::Config[:file_cache_path] が永続化されることを意識し、次の点に注意します。

  • ここに置くファイル名には必ずバージョン番号をつける
  • 一時ファイルを置いてはいけない(特に、make install するソースコードなど)