💪

VagrantでWindows10を構築する(HyperV)

2025/02/05に公開

前置き

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