アップデートが出来なくなったWSL2が実はインストーラ版だった
WSL2 は今や完全に Windows でのアプリ開発に浸透したといえる存在ですが、さまざまなバージョンがあるため、思わぬところでハマることがあります。
僕は今回、 WSL2 をコマンドラインから wsl --update
しても何も起こらず 2.0.0 から新しいバージョンにアップデートが出来ないという症状に遭遇しました。
また、巷には WSL2 の ディストリビューションを 再インストールする方法はいくらでも出てくるものの、 WSL2 そのものを再インストールしたい ということがあまりないのか そもそも検索性が悪い それに関する情報が全くなかったので、僕のようにハマった人のために書いておきます。
結論からいうと、コマンドラインからの wsl --update
が失敗するという症状が起こる場合、入っている WSL2 が PowerShell で wsl --install
した以外の手段でインストールされている可能性があります。
僕の場合はいつのタイミングだったかインストーラ経由でインストールしたらしく Windows の 設定 > アプリ > インストールされているアプリ の一覧に Windows Subsystem for Linux が表示されていました。
おそらく WSL2 の github リポジトリの Release でインストーラが配布されているため、昔の自分はここからインストールしたのでしょう。(確か前はコマンドラインからはインストールが出来なかったはず)
この古いバージョンを削除したあと、 PowerShell などで wsl
と叩けば stable な WSL2 が再インストールされます。
当初の懸念は「インストールされているディストリビューションが消えないか」でしたが、 この方法でインストールした WSL2 を消しても登録済みのディストリビューションが消えることはありませんでした。
経緯
ある日、WSL2を更新しようとしたところ何故か 2.0.0 からアップデート出来なくなっていました。
PS > wsl --update
# 更新しています的なプログレスバーが出たあと特にエラーなども出力されずに終了する
PS > wsl --version
WSL バージョン: 2.0.0 # が、バージョンを確認すると 2.0.0 のまま
...
こういう「出力されない」タイプのエラーって検索しようがないので本当に厄介で・・・。
色々試しましたが、最終的に 調べるのがめんどくさい WSL2 自体を再インストールをしちゃえばいいんじゃねということに。
その過程で
もしかして今入っている WSL2 ってめちゃくちゃ古いやつなんじゃね 🤔
という疑惑が浮上。
そういえば今のWSL2環境は、数年前のまだコマンドラインからセットアップが出来ない頃にインストーラを使って入れたものだった気がしてきました。
というわけで、冒頭のようにアプリ一覧からインストーラ版を削除したあと、 PowerShell から再インストールを行って解決できましたとさ。
みなさん、アップデートはこまめに行いましょう。
(中身の Ubuntu のアップデートは定期的にやってたつもりが WSL2 のアップデートをすっかり怠っていました。。)
Discussion