ページ ツリー
メタデータの末尾にスキップ
メタデータの先頭に移動

このページの古いバージョンを表示しています。現在のバージョンを表示します。

現在のバージョンとの相違点 ページ履歴を表示

« 前のバージョン バージョン 11 次のバージョン »

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 コア数を設定する

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

config.vm.provider :virtualbox do |vbox|
  # メモリサイズ
  vbox.customize ['modifyvm', :id, '--memory', '4096']
 
  # CPU 利用率の制限
  vbox.customize ['modifyvm', :id, '--cpuexecutioncap', '80']
 
  # CPU コア数
  vbox.customize ['modifyvm', :id, '--cpus', '4']
 
  # CUP コア数を2以上にするのに必要
  vbox.customize ['modifyvm', :id, '--ioapic', 'on']
 
  # 64bit OS を使用するのに必要
  vbox.customize ['modifyvm', :id, '--hwvirtex', 'on']
end

※ ゲスト 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, '--natdnsproxy1', 'off']
end

 

上記設定と似ていますが、この設定を on にすると、ゲストは自分自身のリゾルバを使用せず、ホストのリゾルバを使用して名前解決をします。

config.vm.provider :virtualbox do |vbox|
  vbox.customize ['modifyvm', :id, '--natdnshostresolver1', 'off']
end

 

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

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

.yml ファイルを読み込む

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

例えば、次の yml ファイルを読み込むには

config.yml
A: aaa
B:
  B1: bbb1
  B2: bbb2
C: ccc

Vagrantfile に以下のように記述します。

require 'yaml'
vm_config = YAML::load_file('config.yml')
 
vm_config['A'] == 'aaa'
vm_config['B']['B2'] == 'bbb2'

 

その他の方法

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

 

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

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

必要なプラグインは事前にチェックできるように Vagrantfile に処理を書いておくとよいです。 

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 プロビジョナの実行時に次のような警告が表示されることがあります。

SSL validation of HTTPS requests is disabled. HTTPS connections are still
encrypted, but chef is not able to detect forged replies or man in the middle
attacks.

Chef 11.12.0 から SSL 証明書のチェックをするようになったようで、
そのチェック方法(ssl_verify_mode)がデフォルトの :verify_none のままになっていると
この警告が表示されます。 

Vagrant でこれを解決するには、この設定を行う外部ファイルを作成し、
Vagrantfile の Chef プロビジョナでそのパスを指定するといいようです。

Vagrantfile.chef
Chef::Config.ssl_verify_mode = :verify_peer
Vagrantfile
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

 

 

 

 

  • ラベルがありません