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関連の実行ファイルが確認できる

まずはwsl.exeの動作を確認しよう。コマンドプロンプトから実行すると、ウィンドウフレームの上部にあるタイトルバーに、Linuxディストリビューション名が示される。つまり、この環境ではSLES12が既定のLinuxディストリビューションという具合だ。

「wsl.exe」を実行した状態。タイトルバー部分にディストリビューション名が示される

ここでwslconfig.exeに展開済みLinuxディストリビューションを確認するオプション「/l」を加えて実行すると、冒頭で述べた各ディストリビューション名が示される。蛇足だがMicrosoftはWindows 10上に展開したLinuxディストリビューションに「WSLディストリビューション」という呼称を用いているようだ。本稿も見習って、ここからはWindows 10上に展開したLinuxディストリビューションを、WSLディストリビューションと記述する。

「wslconfig.exe」のヘルプメッセージ

さて、上図のヘルプメッセージを読む限り、「unregister」は既定のWSLディストリビューションを解除すると思われるが、実際は展開したWSLディストリビューションを削除してしまう。Windows 10 Insider Preview ビルド16275上でSLES12の登録解除を実行すると、エラー0x80070003が発生した。GitHubコミュニティの書き込みを参考にすると、WSLディストリビューションの再インストール時に発生するポピュラーなバグのようである。

オプション「/u」を使って登録解除を試みると、エラーが発生。その後はWSLディストリビューション一覧からSLES12が削除された

単にWSLディストリビューションをアンインストールするのであれば、「設定」から実行すれば済む話であり、コマンドラインから登録解除する必要はない。ただし、検証しているのがWindows 10 Insider Previewのため、このあたりの動作はWindows 10 バージョン1709で検証した後、改めてご報告する。なお、エラーになったSLES12はアンインストール→再インストールで復活することを確認した。

SLES12を起動すると、再インストールをうながすエラーメッセージが現れる

「設定」の<アプリ/アプリと機能>からアンインストールを実行する

WindowsストアからSLES12のインストールを実行し、起動することで、WSLディストリビューション一覧に復活した

ヘルプメッセージにあるとおり、既定のWSLディストリビューションを指定するには、オプション「/s」を使用する。今回Ubuntuに変更してみたが、必ずしもタイトルバーにディストリビューション名が表示される訳でもないようだ。なお、wsl.exeはもちろんだが、bash.exeを実行した際はいずれも既定WSLディストリビューションが起動する仕組みとなる。

既定WSLディストリビューションをUbuntuに変更した状態

WSLのリリースノートに目を通すと、Windows 10のファイルシステムとWSLディストリビューションのファイルシステム間で相互運用を可能にするDrvFsのバグフィックスや、ユーザー空間へのカーネルメッセージを扱うNETLINK_KOBJECT_UEVENTのサポートなど、互換性を着々と高めてきた。既にRS(RedStone)3の新機能実装は一段落し、開発チームもローンチに向けたバグフィックスが作業の中心となり、WSLも1つの中間目標を迎えることとなる。

阿久津良和(Cactus)