##概要
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イメージ名は環境による(と思う)。)
- "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を修正)
- "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ってどういう時にしてもいいんでしょうね?適当?