Windows 10 バージョン1607(Anniversary Update)からサポートしたWSL(Windows Subsystem for Linux)。その結果としてWindows 10上でもUbuntuなどのLinuxディストリビューションが動作し、各種コマンドが利用可能になった。本連載ではWSLに関する情報を紹介する。
既定WSLを変更する「wslconfig.exe」
過去の連載でも取り上げてきたように、2017年9月頃リリース予定のWindows 10 バージョン1709(Fall Creators Update)では、Ubuntu以外のLinuxディストリビューションがWindows 10上で利用できる。本稿執筆時点のWindows 10 Insider PreviewでWindowsストアにアクセスすると、Ubuntuの他にopenSUSE、SLES(SUSE Linux Enterprise Server)12がダウンロード可能だ。
一見すると何ら問題がないように見えるものの、ユーザーの間では既定のLinuxディストリビューションが選択できないという問題が発生していた様子だ。その回答としてMicrosoftは、「wsl.exe」「wslconfig.exe」と2つの実行ファイルを用意した。正直なところ、どのビルドで加わったのか確認できなかったが、前者は既定のLinuxディストリビューションを起動し、後者は既定のLinuxディストリビューションを操作する実行ファイルである。
まずはwsl.exeの動作を確認しよう。コマンドプロンプトから実行すると、ウィンドウフレームの上部にあるタイトルバーに、Linuxディストリビューション名が示される。つまり、この環境ではSLES12が既定のLinuxディストリビューションという具合だ。
ここでwslconfig.exeに展開済みLinuxディストリビューションを確認するオプション「/l」を加えて実行すると、冒頭で述べた各ディストリビューション名が示される。蛇足だがMicrosoftはWindows 10上に展開したLinuxディストリビューションに「WSLディストリビューション」という呼称を用いているようだ。本稿も見習って、ここからはWindows 10上に展開したLinuxディストリビューションを、WSLディストリビューションと記述する。
さて、上図のヘルプメッセージを読む限り、「unregister」は既定のWSLディストリビューションを解除すると思われるが、実際は展開したWSLディストリビューションを削除してしまう。Windows 10 Insider Preview ビルド16275上でSLES12の登録解除を実行すると、エラー0x80070003が発生した。GitHubコミュニティの書き込みを参考にすると、WSLディストリビューションの再インストール時に発生するポピュラーなバグのようである。
単にWSLディストリビューションをアンインストールするのであれば、「設定」から実行すれば済む話であり、コマンドラインから登録解除する必要はない。ただし、検証しているのがWindows 10 Insider Previewのため、このあたりの動作はWindows 10 バージョン1709で検証した後、改めてご報告する。なお、エラーになったSLES12はアンインストール→再インストールで復活することを確認した。
ヘルプメッセージにあるとおり、既定のWSLディストリビューションを指定するには、オプション「/s」を使用する。今回Ubuntuに変更してみたが、必ずしもタイトルバーにディストリビューション名が表示される訳でもないようだ。なお、wsl.exeはもちろんだが、bash.exeを実行した際はいずれも既定WSLディストリビューションが起動する仕組みとなる。
WSLのリリースノートに目を通すと、Windows 10のファイルシステムとWSLディストリビューションのファイルシステム間で相互運用を可能にするDrvFsのバグフィックスや、ユーザー空間へのカーネルメッセージを扱うNETLINK_KOBJECT_UEVENTのサポートなど、互換性を着々と高めてきた。既にRS(RedStone)3の新機能実装は一段落し、開発チームもローンチに向けたバグフィックスが作業の中心となり、WSLも1つの中間目標を迎えることとなる。
阿久津良和(Cactus)