待っていた、Windows Subsystem for Linux(WSL)をサポートしたWindows Server 2016 Insider 16275が公開されました(サポートそのものは16237かららしい)。
Announcing Windows Server Insider Preview Build 16257 - Windows Experience Blog
実機に入れてみたので、簡単に試してみましょう。
WSLを追加
PowerShellのコマンドレット、Enable-WindowsOptionalFeatureを使って有効にします。その前にGet-WindowsOptionalFeatureで入っているかどうか確認してみます。StateプロパティがDisabledなので、入っていませんね。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
再起動するとインストール完了です。
Ubuntuを追加
Windows 10 Insider 16257ではストアからダウンロードしますが、現在のWindows Server InsderではWebからとってきます。Ubuntuを入れていますが、OpenSUSEとSLESにも対応しています。PowerShellのInvoke-WebRequestコマンドレットでとってきます。
Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile ~/Ubuntu.zip -UseBasicParsing
OpenSUSEの場合
Invoke-WebRequest -Uri https://aka.ms/wsl-opensuse-42 -OutFile ~/opensuse.zip -UseBasicParsing
SLESの場合
Invoke-WebRequest -Uri https://aka.ms/wsl-sles-12 -OutFile ~/sles.zip -UseBasicParsing
ここからはUbuntuで説明します。
Expand-Archiveコマンドレットでzipを展開します。%USERPROFILE%直下に展開していますが、好きなところで構わないはずです。Windows 10の場合、%LocalAppData%\LxSSでした。
zipファイルを展開すると、こんな感じです。ubuntu.exeを実行すると、インストールが始まります。
最初にUbuntu用のユーザーを作ります。これはWindows 10と同様に、Windowsのユーザーとは別管理です。
インストール後、aptコマンドで更新しておきましょう。これでインストール終わりです。プログレスバーが乱れているのはリモート接続だからか、Insiderだからか…まぁいいでしょう。
Ubuntuが入っています。
使ってみる
Windows 10と同様に、Windows側のパスもWSLのパスとして登録されていますね。Windows 10と同様に、dirコマンドの結果をパイプでWSL側のgrepに渡せます。もちろん、そのままgrepと実行しても起動できないので、注意してください。
ちなみに、bash.exeを実行した場合、ubuntu.exeを経由せず実行できます。複数のLinux環境入れた場合、どれが優先されるんでしょうね?
消した場合
Enable-WindowsOptionalFeatureで追加できますが、Disable-WindowsOptionalFeatureでWSLを消すこともできます。Linuxモジュールは別管理のようで、Disable-WindowsOptionalFeatureで消した後、ubuntu.exeを実行すると、こんなエラーになります。
もちろん、再度Enable-WindowsOptinalFeatureでWSLを追加すると、ユーザー環境などはそのまま引き続き使用できます。確認してないですが、lxssコマンドもありました。
今後
とりあえずdocker入れたので、WSL側のdockerからWindowsのDockerコンテナ動くかとか、VSTS/TFSのビルドエージェント経由でWSLがどうやって動かせばいいのかとか、試してみたいと思います!