素敵なおひげですね

PowerShellを中心に気分で書いているブログです。

VirtualBoxでNano Serverを動かしてみる

そろそろNano ServerとPowerShell Coreに触れていかないといけないかなぁと思ったので。

普段使いの環境がVirutalBox + Vagrantなので、Nano ServerもVirtualBoxで動かしたいと思い環境を作ったのですが、ちょっとハマりどころがあったので、その辺を含めてエントリとしてまとめてみました。

はじめに

検証環境

【2016/09/27追記】

本日Windows Server 2016 GA版がダウンロード可能になりました。
GA版でも以降の手順はそのまま実行可能です。

ちなみに日本語版で文字化けするのは改善されていませんでした。
ただ文字化けするのはリカバリコンソール上だけで、PowerShell Remoting等で接続して利用する分には日本語版でも問題なかったです。

Windows Server 2016 GA版(評価版)はこちらからダウンロードできます。


今回検証する環境は、

となります。
Windows Server 2016 TP5はこちらからダウンロードできます。
日本語版だと文字化けするそうなのでUS版を使います。

ハマりどころ

そんなに大したことではないのですが、VirtualBoxで使用可能なネットワークドライバはNano Serverの標準パッケージには含まれていません。
このため、OEMドライバー込みのNano Serverイメージを用意する必要があります。
現時点での各ネットワークアダプターのドライバの対応状況は以下の様になっているみたいです。

アダプタータイプ ドライバ 特記事項
PCnet-PCI × ドライバ無し
PCnet-FAST Ⅲ × ドライバ無し
Intel PRO/1000 MT Desktop E1G6032E.sys OEMDriverの追加が必要
Intel PRO/1000 T Server × ドライバ無し
Intel PRO/1000 MT Server E1G6032E.sys OEMDriverの追加が必要
準仮想化ネットワーク(virtio-net) × ドライバ無し

また、VirtualBoxではvhdx形式の仮想ディスクを読み込めませんので、仮想ディスクはvhd形式で作成する必要があります。

Nano Serverのイメージを作る

イメージ作成の細かい手順は山市さんのブログの資料を見てもらうとわかりやすいです。

山市良のえぬなんとかわーるど: セッション資料公開: Interact x Cloud Samurai 2016 Summer Track 1 Session 2

今回はこちらの資料を参考にして、以下の様なPowerShellスクリプトでイメージを作成しました。
このスクリプトを管理者として実行すると$TargetPathvhdイメージ(nanosv01.vhd)が作成されます。

$MediaPath$BasePath$TargetPath等の各パラメーターは環境に応じて適当に変更してください。

$MediaPath  = (Get-WmiObject Win32_CDROMDrive -Filter "VolumeName='SSS_X64FRE_EN-US_DV9'").Drive
#$MediaPath  = "D:\"
$BasePath   = "C:\Temp\NanoBase"
$TargetPath = "C:\Temp\nanosv01.vhd"
Import-Module (Join-Path $MediaPath "\NanoServer\NanoServerImageGenerator\NanoServerImageGenerator.psm1")
$Params = @{
    MediaPath  = $MediaPath;
    BasePath   = $BasePath;
    TargetPath = $TargetPath;
    # デプロイの種類とエディション
    #   OEMDriverを追加するにはHostモードにする必要があります
    DeploymentType = "Host";
    Edition        = "Standard";
    # ホスト名とAdministratorのパスワード
    ComputerName = "nanosv01";
    AdministratorPassword = (ConvertTo-SecureString "P@ssw0rd" -Force -AsPlainText);
    # リモート管理/EMS設定
    EnableRemoteManagementPort = $true;
    EnableEMS = $true;
    # パッケージ設定 - Intel NICのドライバーを入れるためにOEMDriverを追加
    OEMDrivers = $true;
}
New-NanoServerImage @Params

VirtualBoxでNano Serverを動かす

仮想マシンの作成

仮想ディスクが出来た後はVirtualBoxから仮想マシンを作ってやります。
とりあえず今回はGUIからやっていきます。


VirtualBox マネージャーから仮想マシンを新規作成します。

f:id:stknohg:20160719174749p:plain


名前は適当に。
OSタイプにWindows Server 2016が無かったのでWindows 10(64bit)としておきました。

f:id:stknohg:20160719174822p:plain


メモリサイズは適当に。

f:id:stknohg:20160719174955p:plain


仮想ハードディスクは前項で作成した仮想ディスクを使うのでここでは作成しません。

f:id:stknohg:20160719181756p:plain

警告がでますが、そのまま続けます。

f:id:stknohg:20160719175120p:plain


仮想マシンが出来上がりますが、まだ起動できないのでプロパティを表示します。

f:id:stknohg:20160719175147p:plain


ストレージ設定を開き前項で作成した仮想ディスクを追加します。
以下の図では作成したnanosv01.vhdを、仮想マシンの設定のあるE:\VM\Win2016Nano\に移動した上で追加しています。
仮想ディスクの場所は適宜設定してくだい。

f:id:stknohg:20160719175254p:plain

f:id:stknohg:20160719175315p:plain

f:id:stknohg:20160719175417p:plain


今回はネットワークアダプタIntel PRO/1000 MT Desktopを選択します。
(Intel PRO/1000 MT Serverでも構いません)

f:id:stknohg:20160719175444p:plain

また、PSRemoting用にWinRMのポート(TCP5985)をポートフォワードする様にしておきます。

f:id:stknohg:20160719175548p:plain


EMS用にCOMポートの設定をします。
下図の様に設定するとlocalhost:12345ポートにアクセスするとゲストのCOM1に接続できます。

f:id:stknohg:20160719175645p:plain


以上で設定は完了です。

設定後、仮想マシンを起動すると下図の様にNano Serverが起動し、NICも普通に見える様になります。

f:id:stknohg:20160719180032p:plain

f:id:stknohg:20160719180052p:plain

f:id:stknohg:20160719180107p:plain

f:id:stknohg:20160719180127p:plain

PSRemotingで接続する

作成した仮想マシンにPSRemotingで接続するにはポートを指定してEnter-PSSessionしてやればOKです。
実行例は以下の様になります。

Enter-PSSession -ComputerName localhost -Port 15985 -Credential administrator

$PSVersionTable.PSEditionCoreであり、確かにNano Serverに接続していることがわかります。

f:id:stknohg:20160719180812p:plain

EMSに接続する

EMSに接続するには適当なクライアントからCOMポートに接続してやればOKです。
今回は私が使い慣れているTeratermで接続します。

最初にNano ServerのEMSのボーレートはデフォルトで115200*1なのでTeratermの設定を変更します。

f:id:stknohg:20160719181215p:plain

あとはTelnetlocalhost:12345に接続すれば仮想マシンCOM1に接続できます。

f:id:stknohg:20160719181328p:plain

idコマンドの結果はこんな感じです。
ProductがWindows Server 2012 R2ですが、実際にはWindows Server 2016です。

f:id:stknohg:20160719181340p:plain

また、CMDセッションに接続してPowerShellを起動してやるとこんな感じになります。

f:id:stknohg:20160719181457p:plain

最後に

とりあえずこんな感じです。
頑張ればCUIでの設定やVagrant Boxを作ったりできると思いますが、私の用途では必要なさそうなのでこれ以上はやらないつもりです。

参考情報として、Matt WrockさんのブログでNano Server用のPacker Templateの作り方が紹介されていますので、その辺に興味がある方は参考にしてみてください。

www.hurryupandwait.io

加えてMattさんの作ったVagrant BoxがAtlasで公開されてますので、私はまだ試していないのですが、このBoxを使ってみるのも良いかもしれません。

*1:New-NanoServerImageのパラメータで変更可能