VagrantでWindows10を構築する(HyperV)
前置き
VagrantにはBoxという便利なものがあります。
(事前定義された設定やISO等をギュッとしたもの
詳細は「Vagrant Boxes | Vagrant | HashiCorp Developer」を参照)
私がよく使う環境のDebianなりAlmaなりはgeneric/~~
の形で公開されています。
(Officialとの明記はないものの、DL数や使用例から信用して使用しています。
あくまでもOfficial Boxesはhashicorp/~~
とのことです。)
ただ、Windowsに関してはそれっぽいBoxはあれどもDL数や使用例が少なかったり、Boxという特性上設定情報を見にくかったり、で少し抵抗があります。
じゃあVM設定からISO・プロビジョニングまで書いてあるものを基に自分専用で作ってみようと思い立ったわけです。
本題
Packerインストール
そもそもBoxを作るためにPacker
をインストールする必要があります。
Windowsなら「Binary download」から落としてきます。
適当な場所に展開して、環境変数のPATHを通します。
(コマンドプロンプト等でpacker
コマンドが通ればOKです)
Packerのプラグインインストール
自動的にインストールしてくれる(かも)しれませんが、私は実行時にエラーが出たので先に解決させました。
HyperVのプラグインと、
Vagrantのプラグインを
インストールします。
インストール方法は「Installation」に記載がありますが、
packer plugins install github.com/hashicorp/hyperv
packer plugins install github.com/hashicorp/vagrant
上記を実行するだけです。
Packer Templateのダウンロード
Githubで公開していただいているのでありがたく頂戴します。
https://github.com/StefanScherer/packer-windows
git clone https://github.com/StefanScherer/packer-windows
packer build
いよいよBox作成です。
cd packer-windows
を実施した後、
packer build -force -only=hyperv-iso ./windows_10.json
仮想スイッチを指定するなら、
packer build -force -only=hyperv-iso -var "switch_name=<仮想スイッチ名>" ./windows_10.json
を実施します。
packer buildがこける
==> Some builds didn't complete successfully and had errors:
--> hyperv-iso: Error getting host adapter ip address: PowerShell error: Get-NetIPAddress
~~~
上記のようなメッセージでVMのIPが取れないというエラーが発生することがあります。
HyperVの挙動は不思議なことがありますが、仮想スイッチの設定で「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」を有効にすると治ることがあります。
(ただし私はDHCPが取れなくて無効化していた経緯があるので微妙な感じです、
いつの間にか治っているし…)
vagrant box add
30分から1時間くらい呑気に待っていると、カレントディレクトリに「windows_10_hyperv.box」というファイルが出来ているはずです。
これをvagrant box add
で読み込みます。
vagrantbox add .\windows_10_hyperv.box --name custom_win10
(日本語が含まれるディレクトリはエラーになるようなので、適宜移動)
こんな感じで「Successfully~~」になればOKです。
vagrant up
vagrant init -m custom_win10
Vagrantfile
を作成します。
なぜかファイル共有のオプションがついていて認証情報が通らなかったので
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.synced_folder "..", "/vagrant", disabled: true
end
として一回ファイル共有を外します。
その後、
vagrant up --provider=hyperv
をすると無事に起動してきました。
環境構築完了
英語表記にはなっちゃっていますが、とりあえず環境構築できたのでよしとします。
Discussion