Edited at

Windows ServerのVagrant box構築を自動化する(VirtualBox編)

More than 1 year has passed since last update.


概要

Windows ServerのVagrant box構築を自動化する(今回は2012R2と2008R2)。boxを構築しておけば必要な時にVM作って消してやり直してが高速で出来るので大変便利である。

自動化されるのは以下の部分である。


  • 評価版ISOイメージのダウンロード

  • 仮想マシン(VM)の構築と起動

  • OSインストール

  • 更新(Windows Update)

  • VirtualBox Guest Additionsのインストール

  • 各種設定(リモートデスクトップなど)

  • sysprep(セキュリティID消去など)

  • boxの構築

つまり、Windows Updateが全て終わった最新の状態を作成できる。

今回はpacker-templateを使う。詳しい説明はこちら


経緯

2008R2での検証が必要になりvagrantで効率化しようと考えたのだが、ネット上からwindowsのboxを適当に拾ってくるわけにもいかず、自前で構築する事に(だって何か怖いじゃん。プロプライエタリだよ?)。Windowsのbox構築を自動化する用のpackerテンプレートはいくつかあるのだが、packer-templateは2008R2に対応しておらず、boxcutterは手元の環境でうまく動かない。packer-templateが2012R2で動くことは確認できたので、今回はpacker-templateを元にboxcutterの2008R2用の設定を移植することとした。


注意点

この手順は非常に時間がかかる(Windows Updateや仮想HDDのシュリンク等を含むため)。手元の環境では2012R2が8時間かかった。2008R2は更にかかった(よく覚えてないくらい)。


検証

以下の環境にて動作を確認した



  • ホストOS


    • OS:Windows 10 Home

    • CPU:Core-i5 2450M (2.5GHz)

    • Memory:4GB

    • SSD:128GB




  • ゲストOS


    • Windows Server 2012 R2 (評価版)

    • Windows Server 2008 R2 (評価版)



なおゲストOSはどちらも英語版である。

とりあえず特定のOSに依存する部分は無いような気がしている。もしMacOSやLinux上で動いたら教えて欲しい。


必要ソフト

今回は必要ソフトの詳しい説明は省く。既に良い記事が幾らでもQiitaにある。


Vagrant

仮想環境のフロントエンドツール。VMの構築や削除をコマンド一つで行える。作って壊してを繰り返す時に大変便利。


VirtualBox

Oracle社の仮想環境。わりとどこでも動く。


Packer

boxの作成を自動化するツール。vagrantと作者が同じ。


packer-template

packerでの自動化に必要なテンプレート。2012R2用のものしかなかったので今回はforkして2008R2用を追加した。親リポジトリはこちら


構築手順


必要ソフトをインストール

インストールはWindowsならChocolatey、MacOSならHomebrew経由が簡単である。今回はChocolateyを使ったやり方を述べる。まずインストーラーをダウンロードして管理者権限で実行する。その後下記コマンドでVagrant, VirtualBox, Pakcerをインストール出来る。

>./install.ps1

>choco install vagrant virtualbox packer -y

管理者権限で実行すること。powershellを右クリックして[管理者として実行する]でOK

packer-templateはgit cloneかzipでダウンロードするかして、どこでもよいので適当なフォルダに配置する。以降の作業はこのフォルダで行うので、容量の大きいパーティション上を推奨(例えば構築中の仮想マシンの仮想HDDファイルはこのディレクトリ以下に配置される)。


評価版ISOイメージの取得(Optional)

デフォルトではpackerが自動でダウンロードするので前もってダウンロードしておく必要はない。もし既にダウンロード済みであれば以下の修正でISOイメージからVMを構築できる。ちなみにダウンロードはこちらから。2008R2 2012R2

2008R2の場合は./vbox-2008r2.jsonを、2012R2の場合は./vbox-2012r2.jsonの下記の部分を変更する。(2008R2のイメージをダウンロードして./isoフォルダに置いた場合の設定。ISOイメージ名は環境による(と思う)。)


./vbox-2008r2.json

- "iso_url": "http://care.dlservice.microsoft.com/dl/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO"?

+ "iso_url": "./iso/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso"


(行頭-が削除行、+が追加行である)


boxの構築

カレントディレクトリにて下記コマンドを実行。非常に時間がかかるので注意

2012R2を使う場合

>packer build -force -only virtualbox-iso ./vbox-2012r2.json

2008R2を使う場合

>packer build -force -only virtualbox-iso ./vbox-2008r2.json


使用手順

box listに出来たboxを追加する

>vagrant box add ?

仮想マシンを配置するフォルダで下記コマンドを実行

>vagrant init

あとはいつも通りup,halt,destroy出来る。

起動:>vagrant up

停止:>vagrant halt

破壊:>vagrant destroy

もちろん破壊後>vagrant upすれば最初の状態に戻る。お疲れ様でした。boxの更新についてはQiitaを(ry


正規版DVDからの構築

正規版DVDのISOイメージを用いた作成も可能とは思うが未検証である。手順は以下。

正規版DVDからISOイメージを作成し、適当なフォルダに格納する。

チェックサムを計算する。Windowsであればここからツールをダウンロードできる。

ISOイメージの場所とチェックサム値を用いて./vbox-2012r2.jsonファイルのチェックサムとパスを修正する。(2008R2の場合は./vbox-2008r2.jsonを修正)


./vbox-2012r2.json

- "iso_checksum": "beed231a34e90e1dd9a04b3afabec31d62ce3889",

- "iso_url": "./iso/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso"?

+ "iso_checksum": "<計算したチェックサム値>",
+ "iso_url": "<取得したISOイメージへのパス>"


あとはbox構築のコマンドを発行すればよい。


今後の課題など


  • 日本語対応

  • Hyper-V上での動作

  • PullRequestするかどうか

  • なんか文章が読みにくい

PullRequestってどういう時にしてもいいんでしょうね?適当?