プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

WSL2 の ubuntu 22.04 を 24.04 にアップグレードする

久しぶりに WSL2 でいろいろとしたいなと思っていたら、ちょうど WSL2 の Ubuntu の 24.04 が出ていたのに気がつきました。ということで、あれこれやり始める前に、バージョンを上げたので、その作業をメモっておきます。

参考にしたサイト

WSLのUbuntu 22.04 LTSを24.04にアップグレードする

準備

まずは、現状確認

mor@DESKTOP-DE7IL4F:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
mor@DESKTOP-DE7IL4F:~$

パッケージを最新にしておく

mor@DESKTOP-DE7IL4F:~$ sudo apt update
(略)
mor@DESKTOP-DE7IL4F:~$ sudo apt upgrade
(略)
mor@DESKTOP-DE7IL4F:~$ sudo apt autoremove

一度、Windows (コマンドプロンプト)からシャットダウンしておく。

C:\Users\mor>wsl --shutdown

アップグレード

アップグレードできるディストリビューションの確認

mor@DESKTOP-DE7IL4F:~$ sudo do-release-upgrade -c
Checking for a new Ubuntu release
New release '24.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
mor@DESKTOP-DE7IL4F:~$

早速、アップグレードすると

mor@DESKTOP-DE7IL4F:~$ sudo do-release-upgrade
Checking for a new Ubuntu release
Please install all available updates for your release before upgrading.
mor@DESKTOP-DE7IL4F:~$

あれ?保留のパッケージがあるので、アップグレードできないらしい。

保留パッケージの解消

まずは、再確認します。

mor@DESKTOP-DE7IL4F:~$ sudo apt upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージは保留されます:
  libgl1-amber-dri libgl1-mesa-dri libglapi-mesa libglx-mesa0 mesa-vulkan-drivers sosreport ubuntu-wsl
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 7 個。
mor@DESKTOP-DE7IL4F:~$

保留が7個ってあるね。どうしたものか調べてみます。下記記事によると apt install すればよいらしい。

Ubuntu 保留されたパッケージの対処方法 | 広目天合同会社

なので、やってみると、

mor@DESKTOP-DE7IL4F:~$ sudo apt install --reinstall libgl1-amber-dri libgl1-mesa-dri libglapi-mesa libglx-mesa0 mesa-vulkan-drivers sosreport ubuntu-wsl
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
(中略)
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

libgtk-3-bin (3.24.33-1ubuntu2.2) を設定しています ...
libgdk-pixbuf-2.0-0:amd64 (2.42.8+dfsg-1ubuntu0.3) のトリガを処理しています ...
Scanning processes...
Scanning processor microcode...
Scanning linux images...

Failed to retrieve available kernel versions.

Failed to check for processor microcode upgrades.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
mor@DESKTOP-DE7IL4F:~$

ん?最後に Failed のメッセージあるけど、アップグレードできたのか?

エラーメッセージの内容

メッセージがが気になるので調べてみると、 WSL2 の Ubuntu 22.04 の問題らしい。どうも needrestart というパッケージが出しているメッセージで、メッセージを抑えたければ、設定ファイルを書き直せばいいみたい。

needrestart パッケージをアンインストールしてもいいみたいだけど、今回はメッセージを無視するだけにします。

アップグレード再び

エラーメッセージに大きな影響がないようなので、保留パッケージがないことを念のため、確認してみると

mor@DESKTOP-DE7IL4F:~$ sudo apt list --upgradable
一覧表示... 完了
mor@DESKTOP-DE7IL4F:~$

大丈夫そう。こっちで表示しても、

mor@DESKTOP-DE7IL4F:~$ sudo apt upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
mor@DESKTOP-DE7IL4F:~$

保留はないね。一応、保留はなくなったみたい。

これで、もう一度やってみます。

mor@DESKTOP-DE7IL4F:~$ sudo do-release-upgrade
Checking for a new Ubuntu release

= Welcome to Ubuntu 24.04 LTS 'Noble Numbat' =
(略)
Continue [yN]

と聞かれるので、 y を入力します。

しばらく順調に進んでいるかとおもいきや

error: cannot list snaps: cannot communicate with server: Get "http://localhost/v2/snaps": dial unix /run/snapd.socket: connect: no such file or directory

Traceback (most recent call last):
  File "/tmp/ubuntu-release-upgrader-t4hk374i/noble", line 8, in <module>
    sys.exit(main())
  File "/tmp/ubuntu-release-upgrader-t4hk374i/DistUpgrade/DistUpgradeMain.py", line 241, in main
    if app.run():
  File "/tmp/ubuntu-release-upgrader-t4hk374i/DistUpgrade/DistUpgradeController.py", line 2662, in run
    return self.fullUpgrade()
  File "/tmp/ubuntu-release-upgrader-t4hk374i/DistUpgrade/DistUpgradeController.py", line 2467, in fullUpgrade
    if not self.doPostInitialUpdate():
  File "/tmp/ubuntu-release-upgrader-t4hk374i/DistUpgrade/DistUpgradeController.py", line 1438, in doPostInitialUpdate
    self.quirks.run("PostInitialUpdate")
  File "/tmp/ubuntu-release-upgrader-t4hk374i/DistUpgrade/DistUpgradeQuirks.py", line 102, in run
    func()
  File "/tmp/ubuntu-release-upgrader-t4hk374i/DistUpgrade/DistUpgradeQuirks.py", line 127, in noblePostInitialUpdate
    self._test_and_fail_on_tpm_fde()
  File "/tmp/ubuntu-release-upgrader-t4hk374i/DistUpgrade/DistUpgradeQuirks.py", line 1898, in _test_and_fail_on_tpm_fde
    snap_list = subprocess.check_output(['snap', 'list'])
  File "/usr/lib/python3.10/subprocess.py", line 421, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/usr/lib/python3.10/subprocess.py", line 526, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['snap', 'list']' returned non-zero exit status 1.
=== Command terminated with exit status 1 (Wed Dec 11 12:42:13 2024) ===

とエラーが出ました。snap に関連するサーバー (snapd?) が動いていないとのこと。

snap のエラーへの対応

でも、そんなの動かしてないよなと思いつつ調べてみると、ちょうどの記事がありました。

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

snapd を動かすためには systemd が必要で、systemd はいつのころからか WSL2 で動くようになっているようです。たぶん、ある時期より古いタイミングでインストールした WSL2 (Ubuntu) では動いてなかったんでしょうね。

で、 WSL2 の Ubuntu でも systemd を動かすことができるとのことです。

systemd を使用して WSL で Linux サービスを管理する | Microsoft Learn

なので、やってみます。

mor@DESKTOP-DE7IL4F:~$ cd /etc
mor@DESKTOP-DE7IL4F:/etc$ sudo touch wsl.conf
[sudo] mor のパスワード:
mor@DESKTOP-DE7IL4F:/etc$ sudo vi wsl.conf
mor@DESKTOP-DE7IL4F:/etc$ cat wsl.conf
[boot]
systemd=true
mor@DESKTOP-DE7IL4F:/etc$

この設定ファイルを作ったのち、一度、 wsl を閉じます。 Windows のコマンドプロンプトから WSL をシャットダウンします。

C:\Users\mor>wsl --shutdown

この状態にしてから、 WSL2 を立ち上げればいいはずです。

3 度目の正直

ということで、もう一度 do-release-upgrade を実行します。順調に進んでいき、途中で

アップグレードを開始しますか?


1 個のインストール済みパッケージは Canonical
によってサポートされなくなりました。ただしコミュニティからのサポートは受けることができます。

71 個のパッケージが削除されます。 177 個の新規パッケージがインストールされます。 790 個のパッケージがアップグレードされます。

合計 863 M をダウンロードする必要があります。 This download will take about 2 分 with a
40Mbit connection and about 23 分 with a 5Mbit connection.

アップグレードの取得とインストールには数時間かかることがあります。ダウンロードが完了してしまうと、処理はキャンセルできません。

 続行する[yN]  詳細 [d]

と聞かれるので、 y を入力します。またしばらく進むと、

サポートが中止された(あるいはリポジトリに存在しない)パッケージを削除しますか?


115 個のパッケージが削除されます。

パッケージの削除に数時間かかることがあります。

 続行する[yN]  詳細 [d]d

削除: libflac8

(自動インストールされた) bolt fwupd-signed g++-11 gcc-12-base irqbalance
  isc-dhcp-client isc-dhcp-common libaio1 libappstream4
  libarchive13t64 libatasmart4 libatk1.0-data libblas3
  libblockdev-crypto2 libblockdev-crypto3 libblockdev-fs2
  libblockdev-fs3 libblockdev-loop2 libblockdev-loop3
  libblockdev-mdraid3 libblockdev-nvme3 libblockdev-part-err2
  libblockdev-part2 libblockdev-part3 libblockdev-swap2
  libblockdev-swap3 libblockdev-utils2 libblockdev-utils3
  libblockdev2 libblockdev3 libboost-regex1.74.0 libbpf0
  libbytesize-common libbytesize1 libc6-i386 libcbor0.8
  libdns-export1110 libefiboot1t64 libefivar1t64 libfwupd2
  libgcab-1.0-0 libgpgme11t64 libgudev-1.0-0 libgusb2 libicu70
  libisc-export1105 libjcat1 libjson-glib-1.0-0
  libjson-glib-1.0-common libldap-2.5-0 liblinear4 libllvm15t64
  liblua5.3-0 liblua5.4-0 libmbim-glib4 libmbim-proxy libmbim-utils
  libmm-glib0 libmpdec3 libnetplan0 libnsl-dev libnsl2 libnss-nis
  libnss-nisplus libnvme1t64 libparted-fs-resize0t64 libpcre3
  libperl5.34 libprocps8 libprotobuf-c1 libpython3.10
  libpython3.10-dev libpython3.10-minimal libpython3.10-stdlib
  libqmi-glib5 libqmi-proxy libqmi-utils libqrtr-glib0 libsmbios-c2
  libssh2-1t64 libstdc++-11-dev libtiff5 libtirpc-dev libtss2-mu0
  libudisks2-0 libunistring2 libvolume-key1 lua-lpeg mime-support
  modemmanager nmap-common openjdk-11-jdk openjdk-11-jdk-headless
  openjdk-11-jre openjdk-11-jre-headless perl-modules-5.34 pkexec
  policykit-1 python3-jaraco.classes python3-jeepney python3-keyring
  python3-secretstorage python3.10 python3.10-dev python3.10-minimal
  sbsigntool secureboot-db tpm-udev ubuntu-advantage-tools udisks2
  usb-modeswitch usb-modeswitch-data xbitmaps xterm を削除

続行する[yN]  詳細 [d]

とでてきます。Python3.10 がちょっと気になるんだけど、いろいろと確認するのもかったるいし、ここは問題出てきたらまた対応することにして、とりあえず、 y を入力します。

システムのアップグレードが完了しました。

Action required

Exit all other instances of Ubuntu WSL before continuing.

Unsaved progress may otherwise be lost.

続けるには [ENTER] キーを押してください

enter を押すと、再起動しろ、という旨のメッセージが出ます。

WSL restart required

Exit this instance of Ubuntu WSL.

The upgrade will then be complete.

続けるには [ENTER] キーを押してください

となり、無事にディストリビューションのバージョンが上がったようです。

なお、 enter キー入力後、念のためコマンドプロンプトから、 wsl --shutdown も実行しておきました。

確認

上がってますね。

mor@DESKTOP-DE7IL4F:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
mor@DESKTOP-DE7IL4F:~$

まとめ

意外と手間取りましたが、無事に Ubuntu のバージョンを上げることができたようです。さて、本題のセットアップに移ろうかな。

2024/12/12 追記

python 3.10 パッケージのアンインストールのことに触れましたが、これは ubuntu 22.04 デフォルトの python のバージョンです。このため、 24.04 にしたら、 python 3.12.3 に切り替わりました。また、 python のバージョンは pyenv で管理しているのですが、こちらの system が指している python も正しく 3.12.3 を呼び出しています。

なので、問題ないですね。