「WSL」カテゴリーアーカイブ

Windows 10 Creators Update: Bash/WSL & Windows Consoleの新しい点

雑に要約しました。

情報源: Windows 10 Creators Update: What’s new in Bash/WSL & Windows Console – Windows Command Line Tools For Developers

Windowsクリエーターズアップデートでは、WSL, コンソールアプリケーションがアップデートされています。

WSLの新機能

互換性の向上

クリエーターズアップデートではLinuxシステムコールインターフェイス(CSI)との互換性が改善されました。

これにより、各種開発ツール、言語処理系、テキストエディタ、RDBMS等が期待通りに動作します。

詳細については情報源の記事を確認ください。

Linuxとの互換テストについては、以下の記事になっています。

Testing the Windows Subsystem for Linux – Windows Subsystem for Linux

Ubuntu 16.04のサポート

Ubuntuが16.04へアップデートされました。

Win10 AUからWin 10 CUへアップデートした場合、自動的にUbuntu 14.04から16.04へのアップデートは行われないので、管理者権限のあるコマンドプロンプトで、以下の要領でWSLのアンインストールとインストールを行います。

既存の環境を余り壊したくない場合には以下の要領でインプレースアップデートが可能です。

Ubuntuのバージョン確認は以下の要領で行います。

ifconfig, ネットワーク接続列挙のサポート

Win10 AUではネットワーク接続列挙の機能が不足していたため、ifconfig、gulp、npmのようなツールが正しく動作しませんでしたが、Win10 CUではこの部分が改善されました。

pingとICMPのサポート

Win10 AUでは管理者権限がないとpingが出来ませんでしたが改善されました。

ファイル変更通知のサポート(INOTIFY)

Win10 AUでの不満点にINOTIFYの非サポートがありましたが、これも改善されました。

Windows, Linuxの相互運用

WSLのコンソールからWindowsアプリケーションの呼び出し、WindowsのコンソールからWSL上のLinuxアプリケーションを呼び出しができ、それだけで無く、パイプ、リダイレクトで接続することができます。

WindowsからLinuxコマンドを呼び出す場合、…\System32\Bash.exe経由で呼び出すので、Git for WindowsやCygwinでその他のbashにpathを通している場合には注意してください。

UNIXとNetlinkソケットの改善

Win10 AUではUnixソケットとNetlinkソケットの一部機能がサポートされていませんでしたが、改善され、多くのツールが動作するようになりました。詳しくは以下のリリースノートを確認ください。

https://msdn.microsoft.com/en-us/commandline/wsl/release_notes

TCPソケットとIPV6の改善

TCPソケットとネットワーク周りが改善され、様々なネットワークソケット機能、IPV6の使用が可能になりました。詳しくは以下のリリースノートを確認ください。

https://msdn.microsoft.com/en-us/commandline/wsl/release_notes

Windowsコンソールとコマンドラインの改善

Windowsコンソールは非常に長い歴史がありますが、長い間ほとんど顧みられること無く、機能改善はされないままで、それ故に多くのサードパーティが登場することになりましたが、長い間ユーザーの不満点として残っていました。

ところが、MSがOSSに配慮するようになって、要約その不満点を理解したのか、2年前よりWindowsコンソールチームがが出来、コンソールのオーバーホールが行われています。

多くのVTシーケンスの改善

以前のWindowsのコンソールは不十分なANSIシーケンスのサポートで有名でしたが、もはやそれは過去のものとなりました。

Win10 AUのコンソールではほとんど一般的なANSI, VTシーケンスがサポートされましたが、いくつかの高度な機能が欠落していました。Win10 CUではさらにVTシーケンスのサポートが改良され、いくつかの高度なVTシーケンスを正しく処理できるようになり、vim、emacs、Midnight Commander、tmux、htopなどの多くのリッチテキストUI機能をコンソールに表示できるようになりました。

24ビットカラーのサポート

コンソールで24ビットカラーがサポートされるようになりました。

マウスのサポート

コンソールでマウスがサポートされるようになりました。

Windowsのシンボリックリンクで管理者権限が不要に

Win10 CUで開発者モードをONにした場合、管理者権限無しでシンボリックリンクの作成が可能になりました。

これについては次の記事を参考にしてください。

https://blogs.windows.com/buildingapps/2016/12/02/symlinks-windows-10/#lHydFmMHvUPDUtk0.97

What’s Next?

Win10 CUにおいてもWSLはベータ版です。

Windows 10 Insider PreviewのFastリングに登録して、新しい追加機能を試すとともにフィードバックをして欲しいとのこと。

Use Visual C++ for Linux to build and debug C++ code on the Windows Subsystem for Linux 

情報源: Use Visual C++ for Linux to build and debug C++ code on the Windows Subsystem for Linux – Windows Command Line Tools For Developers

むかしWSLではsshdなんて動かさないんだって読んだことがあるような気もしなくも無いのですが、sshを使って、WSL上で動作するLinuxのアプリケーションをVisual Studioでリモートデバッグできるようになるらしいです。組合せ的にはWindows 10 Creators UpdateのWSL+Visual Studio 2017(RTM)もしくはその最新プレビュー同士という事になりそうです。準備手順的には以下のURL

https://blogs.msdn.microsoft.com/vcblog/2017/02/08/targeting-windows-subsystem-for-linux-from-visual-studio/

また、先に行われたWindows Developer DayではJavaやPostgresSQLに関する発表もあったらしく、結局何でもありな感じになりそうです。

ただ、まぁWSLでサーバー運用しようとかは考えない方が絶対に良いとは思いますけどね。

Bash on Ubuntu on Windows @ Windows 10 Insider Preview Build 1502

Release Notes

情報源: Bash on Ubuntu on Windows – Release Notes

本日公開されたWindows 10 Insider Preview 15002ではWSLの多数の不具合点が修正されるも、コンソールでCtrl+Cが動作しない、システムスレッドでCPU負荷率が100%になってしまうことがあるという不具合があるようです。

Ctrl + Cに関してはBlogで解説(?)されています。

Bash in Windows Insider build 15002 – many fixes but a couple of bugs!

クリスマス休暇が有りチーム間で上手く連携が取れなかったそうで。。。

WSLでWindows側の%PATH%が$PATHに追加される

情報源: More easily invoke Windows apps and tools from Bash on Windows – Windows Command Line Tools For Developers

こちらも新しいIPよりWindowsで設定されたPATHが自動的にWSL側の$PATHに追加されるようになったようです。細かいところですが、WSLのコンソールでWindowsのアプリケーションが使いやすくなりますね。

WSL Antivirus and Firewall Compatibility

情報源: WSL Antivirus and Firewall Compatibility

WSLとアンチウイルス製品などとの関係のお話し。

基本的にサードパーティのアンチウイルス/ファイアウォール製品では、製品側でWSLへの対応が必要。WSL側ではAntivirus/Firewall用のAPIを用意する。と言うところ。

現状トラブルも多いようなのでWSLを使用する場合にはお使いの製品が対応するまではWindowsが初めから持っているDefenderとWindows Firewallを使用するようにした方が良さそうです。

問題は3rdがそこまで手間かけて対応するかですけど。特にコンシューマ向け製品。

WSL adds Ubuntu 16.04 Xenial support

情報源: WSL adds Ubuntu 16.04 Xenial support – Windows Command Line Tools For Developers

Insider Previewの新しいビルドでWSLが更新されたのは既にお伝えしていますが、Ubuntuがのバージョンが14.04から16.04にアップデートされています。普通に考えればUbuntuのアップデート手順でアップデートなのですが、この記事だとなんと、14.04から16.04へのアップデート出来ないから入れ直せと行っています。ちょっと何を言っているかわからない。だがそういう事らしい。製品版では素直にアップデートできると良いですね。

アンインストール・インストールとも管理者権限のapuコマンドプロンプトかPowerShellで実行してください。

アンインストール

インストール

そして、この記事のMSの開発チームの「目指していない物」リストが面白い。(意訳)

  • 私たちはこのリリースではGUI/X アプリケーションやデスクトップのサポートは目指していません。
  • 私たちはこのリリースではオーディオサーバーやストリーミングのサポートは目指していません。
  • 私たちはこのリリースではCUDAやGPUアクセラレーションによる計算のサポートは目指していません。
  • 私たちはこのリリースではリムーバブルデバイスあるいはネットワークドライブのマウントのサポートは目指していません
  • %localappdata%\lxss は直接触らないでくれる?

つまりボクらが無茶するので、お前ら落ち着けって事らしい。

WSL上でのWindowsアプリケーションの起動と相互運用

情報源: Windows and Ubuntu Interoperability – Windows Subsystem for Linux

今日公開されたInsider Previewのビルドに含まれるWSLでは、WSLのbash上からWindowsアプリケーションの起動が可能になったほか、WindowsプロセスとWSLのプロセスとの間でリダイレクト・パイプが使用できるようになりました。

それを実現する仕組みを示したのが下の図です。

当然WSLのプロセス空間の中でWindowsプロセスが作られるわけではなく、実際にはWSLのローダー側でWindowsのbinがロードされようとされたことを検知したら、それをbash.exeに通知して、Bash.exeに起動させます。また、WinプロセスとWSLのプロセス間でのリダイレクト・パイプを実現するために、その起動したWindowsプロセスの入出力とWSL側のプロセスの入出力をWSLのサービスとbash.exeが橋渡しをします。

どの様にリダイレクトを実現しているのか、Linux側のローダーをどのように設定変更しているかについては、元のBlogにもう少し細やかな説明がありますのでご確認ください。

実際にWSL上でどうWindowsバイナリを使っていくかについては、以下のmsdnライブラリの文書を参考にしてください。

Windows Interoperability

参考:リリースノート