9
11

More than 5 years have passed since last update.

VagrantでWindows boxを構築する

Last updated at Posted at 2015-08-14

まえがき

VagrantでWindowsをゲストとしたBoxを構築する場合、Linuxなどで使用される起動時のSSHが使用出来ない。

Windowsがゲストの場合、WinRMというSOAPベースのプロトコルが使用されるらしい。

そのため、box化するWindowsのWinRMの設定が必要となるのだが、設定がなかなか見つからなかったためまとめておく。

設定手順(ゲスト側)

Vagrantユーザーの追加

これは…管理者権限持った「vagrant」という名前のユーザーを「vagrant」というパスワードで追加してやればいいだけなので割愛。

firewallの穴あけ

WinRMが使用する以下のTCPポートを開る。

port
5985
5986

Enable-PSRemoting

これをやらないと、ハマります。
PowerShellを「管理者として実行」で起動して

Enable-PSRemoting

と入力し、以下のようなメッセージが出てきたら、 A を入力していく

PS C:\WINDOWS\system32> Enable-PSRemoting

WinRM クイック構成
Windows リモート管理 (WinRM)
サービスを使用して、このコンピューターのリモート管理を有効にするコマンド
"Set-WSManQuickConfig" を実行します。
 これには、次の処理が含まれます:
    1. WinRM サービスを開始または (既に開始されている場合は) 再起動します。
    2. WinRM サービスのスタートアップの種類を [自動] に設定します。
    3. どの IP アドレスでも要求を受け付けるリスナーを作成します。
    4. WS-Management トラフィック用の Windows
ファイアウォールの受信規則の例外を有効にします (HTTP のみ)。

続行しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ
(既定値は "Y"):a
WinRM は既にこのコンピューター上で要求を受信するように設定されています。
このコンピューター上でのリモート管理には、WinRM が既に設定されています。

確認
この操作を実行しますか?
対象 "名前: microsoft.powershell SDDL:
O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;IU)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)。選択し
たユーザーがこのコンピューターに対して Windows PowerShell
コマンドをリモートで実行できるようにします。" に対して操作 "Set-PSSessionConfiguration"
を実行しています。
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ
(既定値は "Y"):a
PS C:\WINDOWS\system32>

WinRMの設定

そのまま、PowerShellで以下を実行する。

winrm quickconfig -q
winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="512"}'
winrm set winrm/config '@{MaxTimeoutms="1800000"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
sc.exe config WinRM start= auto

疎通確認

そのままPowerShellから以下を実行

(-Split (( winrm id | where {$_ -like '*ProductVersion*'}) -Split '=')[1])[5]

エラーにならなければ(「3.0」と表示されるはず)OK。

設定手順(ホスト側)

VagrantfileのVMのWindowsのboxベースのVMの設定に以下を記載する

    config.vm.guest = :windows
    config.vm.communicator = "winrm"

    config.vm.provider "virtualbox" do |vb|
      vb.gui = true
      vb.memory = "4096"
      vb.customize ["modifyvm", :id, "--paravirtprovider", "hyperv", "--hardwareuuid", "ほげほげ"]
    end

備考

「modifyvm」で「hardwareuuid」を指定しているのは、ライセンス認証を通したマシンのUUIDを設定しておかないと、別のマシンと判断されて、ライセンス認証しないといけなくなるため…
悪用厳禁です!
同じ「hardwareuuid」を持ったVMを同時起動しないこと!(同時起動するとライセンス違反になると思いますので…同じマシンが2つあるって、そもそも、あり得ないお話でしょうから)

参考

PowerShellでリモートPCの操作を行うに為にEnable-PSRemotingをするための準備
WindowsでVagrantを扱う私的まとめ (Windows OSのBox作成編 Part.1)

9
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11