[メモ] WSL1で動くDebian 10(buster)を12(bookworm)までアップグレードしてみる

新PCをセットアップしているので、よい機会だと思い、WSL上のディストリビューションを最新verまでアップグレードすることにした。

既存の環境とは別にアップグレード版の環境を作ることにする。
旧OSから移行したので、OSイメージは残っている。これを流用する。

mkdir $env:LOCALAPPDATA\wsl\debian12
wsl --import Debian12 $env:LOCALAPPDATA\wsl\debian12 .\Debian.tar.gz --version 1
wsl -d Debian12

ここからはこのサイトに記載の手順に従い、まずは10→11にアップグレード。

apt update && apt upgrade && apt full-upgrade && apt autoremove
sed -i 's#/debian-security/ buster/updates#/ bullseye-security#g' /etc/apt/sources.list
sed -i 's/buster/bullseye/g' /etc/apt/sources.list
export LC_ALL=C 
apt update && apt upgrade
apt full-upgrade

debian 11にアップグレードが完了したので、一旦再起動。Powershellに移動して、以下のコマンドを実行。

wsl -t Debian12
wsl -d Debian12

問題なく起動したので、次に11→12にアップグレード。今度はこのサイトを参考に進める。

apt update && apt upgrade && apt full-upgrade && apt autoremove
sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list
export LC_ALL=C
apt update && apt upgrade

ここで私の環境では以下のエラーが発生した。

Selecting previously unselected package usrmerge.
(Reading database ... 36002 files and directories currently installed.)
Preparing to unpack .../usrmerge_37~deb12u1_all.deb ...
Unpacking usrmerge (37~deb12u1) ...
Setting up usrmerge (37~deb12u1) ...

FATAL ERROR:
Can't rename /lib: Permission denied at /usr/lib/usrmerge/convert-usrmerge line 290.

You can try correcting the errors reported and running again
/usr/lib/usrmerge/convert-usrmerge until it will complete without errors.
Do not install or update other Debian packages until the program
has been run successfully.

E: usrmerge failed.
dpkg: error processing package usrmerge (--configure):
 installed usrmerge package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 usrmerge
E: Sub-process /usr/bin/dpkg returned an error code (1)

このサイトを参考に、一度再起動を実施。

wsl -t Debian12
wsl -d Debian12

そのうえで、以下のコマンドを実行して、エラーが出なくなることを確認。

/usr/lib/usrmerge/convert-usrmerge

再度アップデートをおこなう。

export LC_ALL=C
apt update && apt upgrade

今度は以下のエラーが発生する。

You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 dirmngr : Depends: libldap-2.5-0 (>= 2.5.4) but it is not installed
 gnupg : Depends: gpgv (>= 2.2.40-1.1) but 2.2.27-2+deb11u2 is installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

書いてある指示に従い修正する。

apt --fix-broken install

再度アップデートをおこなう。

apt update && apt upgrade
apt full-upgrade

debian 12にアップグレードが完了したので、一旦再起動。Powershellに移動して、以下のコマンドを実行。

wsl -t Debian12
wsl -d Debian12

debian12にアップグレードされたことを確認する。

cat /etc/os-release

WSLのディストリビューションの名前を変更する。

Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\* | ? { $_.DistributionName -eq "Debian" } | Set-ItemProperty -Name DistributionName -Value DebianOld

Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\* | ? { $_.DistributionName -eq "Debian12" } | Set-ItemProperty -Name DistributionName -Value Debian

デフォルトのユーザを変更する。

Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\* | ? { $_.DistributionName -eq "Debian" } | Set-ItemProperty -Name DefaultUid -Value 1000

最後にデフォルトのディストリビューションを切り替える。

wsl --set-default Debian

細かい動作は確認していないが、これで切り替えは完了。