2014年2月7日金曜日

VagrantでWindowsゲストのBoxを作成


前々からVagrantをいじりたくてうずうずしていた私。最近ようやく触る時間ができたので、Windows Server 2012 R2ゲストのBox自作に挑戦した。
最初は[Vagrant] WindowsServer2012R2のBoxを自作する #Vagrant_ja - NAVER まとめを参考にさせてもらっていたが、このまとめの作者であるk-kukitaさんから「今はvagrant-windows使ったほうがよい」とアドバイスを頂いたので、早速vagrant-windowsを試してみた。

必要な手順はvagrant-windows/README.md at master · WinRb/vagrant-windows · GitHubにほとんど書いてある。
なお、VagrantやVirtualBoxのセットアップは、この記事では省略する。
環境
私の環境は下記の通り。
ホストOS:Windows7 Ultimate x64
Ruby 1.9.3
Vagrant 1.3.5
Oracle VM VirtualBox 4.3.6

vagrant-pluginをインストールする。
Rubyコマンドプロンプトにて下記コマンドを実行。
C:\users\dsp74118>vagrant plugin install vagrant-windows

BaseとなるWindowsゲストを作る。
VirtualBoxに新規仮想マシンを作成し、Windows Server 2012 R2をインストールする。ここでは、仮想マシン名を"Win2012R2-Base"とした。
OSインストール後、README.mdに従い下記の設定を行う。

サーバーマネージャがログオン時に表示されないように変更。
Fig.1 サーバーマネージャー自動起動を無効化
「ファイル名を指定して実行」でgpedit.mscと入力し、「ローカル グループ ポリシー エディタ」を起動。
「コンピュータの構成\Windows の設定\セキュリティの設定\アカウント ポリシー\パスワードのポリシー\複雑さの要件を満たす必要があるパスワード」 を無効に。
Fig.2 パスワードの複雑性を無効化
vagrantという名前のユーザーを作成し、パスワードをvagrantに。
vagrantユーザーをAdministratorsグループに追加。
Fig.3 vagrantユーザーに管理者権限を付与
UACを無効化。
Fig.4 UAC無効化
シャットダウンイベントの追跡ツールを無効化。
Fig.5 シャットダウンイベントの追跡ツール無効化
コマンドプロンプトで下記を実行し、WinRMの設定を行う。
(PowerShellのプロンプトではダメなので注意。)
C:\users\dsp74118>winrm quickconfig -q
C:\users\dsp74118>winrm set winrm/config/winrs @{MaxMemoryPerShellMB="512"}
C:\users\dsp74118>winrm set winrm/config @{MaxTimeoutms="1800000"}
C:\users\dsp74118>winrm set winrm/config/service @{AllowUnencrypted="true"}
C:\users\dsp74118>winrm set winrm/config/service/auth @{Basic="true"}
C:\users\dsp74118>sc config WinRM start= auto
ここまでがサイトに書いてある手順だが、他に
  • リモートデスクトップの有効化
  • VirtualBox Guest Additionのインストール
などを実施しておくとよい。
Fig.6 RDP有効化
Sysprepを実行する。
コマンドプロンプトで下記コマンドを入力すればOK。
C:\users\dsp74118>C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /mode:vm

Boxファイル作成
Sysprepによって仮想マシンがシャットダウンされるので、引き続きBoxファイルを作成する。
(Boxファイルのファイル名は任意。下の例の"20140205"は、この作業をしたのが2014年2月5日だったから。)
S:\>mkdir VM\Vagrant_Boxes
S:\>cd VM\Vagrant_Boxes
S:\VM\Vagrant_Boxes>vagrant package --base "Win2012R2-Base" --output win2012r2-x86_64-20140205.box
S:\VM\Vagrant_Boxes>vagrant box add Win2012R2 S:\VM\Vagrant_boxes\win2012r2-x86_64-20140205.box

vagrantfileを作る。
適当なフォルダを作って、vagrant initコマンドを実行する。
S:\VM\Vagrant_Boxes>cd ..
S:\VM>mkdir Vagrantfiles\win2012r2
S:\VM>cd Vagrantfiles\win2012r2
S:\VM\Vagrantfiles\win2012r2>vagrant init win2012r2
Vagrantfileが作成されるので、エディタで開いて編集する。
※コメント行は省略
(snip)
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
(snip)
  config.vm.box = "Win2012R2"
(snip)
  config.vm.provider :virtualbox do |vb|
  #   # Don't boot with headless mode
     vb.gui = true
(snip)
  end
(snip)
  # configs for Vagrant-Windows
  config.vm.guest = :windows
  config.vm.network :forwarded_port, guest: 3389, host: 13389
  config.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct: true
end
今回は、localhost:13389をゲストOSの3389(RDP)にフォワードするように設定してみた。
あと、vb.gui=true を入れておかないと、ゲストOSがHeadlessモードで立ち上がり、VirtualBoxのGUIでゲストOSを操作することができなくなるので、忘れずに。

いよいよVagrantでゲストOSを作成
Vagrantfileが置いてあるフォルダに移動してvagrant upを実行すればOK。
S:\VM\Vagrantfiles\win2012r2>vagrant up

以上。
Chefを使いたいなら、Chef-Clientのインストールを行う。本エントリではChef-Clientの導入手順は省略する。

2013.02.20 続きを書いた。VagrantでWindowsゲストを立ててChef-Soloのrecipeを実行する

0 コメント:

コメントを投稿