WSL2 で Ubuntu 24.04 LTS へのアップグレードがなぜできない?

投稿者: | 2024年11月4日

二年ぶりの長期サポートバージョン Ubuntu 24.04 LTS に続いて、最初のポイントリリースである 24.04.1 もリリースされたところで、Windows 環境で使っている WSL(Windows Subsystem for Linux) 2 の Ubuntu も長らく使い続けてきた 22.04 LTS から 24.04 LTS へアップグレードしようとしたときの話です。

do-release-upgrade …失敗!

WSL で Ubuntu を使う場合、Microsoft Store で 「Ubuntu」と検索するといろいろ出てきますが、バージョンなどが併記されていない単に「Ubuntu」 となっているものをインストールしておけば、今、一番安定している LTS 版をインストールしてくれますし、いざ、バージョンアップとなっても

> sudo do-release-upgrade

で OK! …のはずなのですが、今回、ずっと使い続けている WSL2 環境でこれを行ってみると、うまくアップデート出来ませんでした。

ただ、唯一、最近、ASRock DeskMeet X300AMD Ryzen 5 5600G で新規に Windows 11 Home をクリーンインストールしたサブ環境だと、何の問題もなく、24.04 LTS へアップグレードできました。

これが気持ち悪い!

他にメインで使っている Windows 10 環境のデスクトップはもちろん、同じ Windows 11 環境のノート PC でもうまくいかないのに、最新の環境だけはうまくいく…最初は、まだバグもあるかも知れないし、失敗した環境には何度かアップグレードを続けてきたクリーンとは言えない環境もありますし、特段、22.04 LTS でも問題なく使えているし…と思っていたのですが、気持ち悪さが勝って、ついに本腰入れて調べました。

snapd …動いてないよね

アップグレードに失敗したときに、出力されるのが以下のエラー。

error: cannot list snaps: cannot communicate with server...

調べてみると snapd デーモンが起動していないときにでるエラーなのですが、そりゃそうでしょう?と思って

> systemctl status snapd

としてみると、当然…

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: ホストが落ちています

というエラーが返ってきます。

これはなぜかというと、snapd は Ubuntu に常駐するプログラム(デーモン)で、Ubuntu の場合、常駐プログラムを動かすには systemd というプログラムが裏で動いている必要があるからです。

( snapd とはなんぞや systemd とはなんぞや…という話を説明すると脱線してしまうので、興味がある方は自分で調べて下さい)

そもそも WSL2 で systemd は動かないよね…と調べてみると…

というドキュメントが出てきて、しれっと「サポートされるようになりました」と書いてある。

うちにある環境で唯一、24.04 LTS へのアップルレードがうまくいった Windows 11 のサブ環境の WSL2 の環境には、さらっと /etc/wsl.conf ファイルがあって、上記のドキュメントにあるように

[boot]
systemd=true

と記載されていました。当然、うまくいかなかった他の環境には記載どころか /etc/wsl.conf ファイルそのものがありません。

そうです。いつの間にか、WSL2 環境でも systemd が動くというのがデフォルトになっていたようなのです。

解決!

そこでうまくアップグレードできなかった環境で、systemd を起動するための wsl.conf ファイルを作ってあげて、一度、WSL2 のターミナルをすべて exit してから、管理者権限で立ち上げた PowerShell から

> wsl --shutdown

として、WSL2 を再起動。

そうして do-release-upgrade を実行してみると、何事もなく 24.04 LTS にアップグレードできました。

WSL2 のデフォルト設定が変わってるなど、こういう大事なことはもっと大々的に周知してください> Microsoft さま

ちなみに、そもそも snapd を消すと言う方法を取っていらっしゃる方もお見受けしましたが、クリーンインストールした際にデフォルトが systemd を動かす( snapd も動く)ようになっていたので、今回はこちらを採用しました。( snapd を消してうまくいくかは確認していないので、あしからず m(_ _)m )


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です