我在 WSL2 上,安装了 Ubuntu 18.04。我执行了几个步骤来升级版本(启用 systemd、为 apt-pkg 创建符号链接等)。我终于能够sudo do-release-upgrade
成功运行,cat /etc/lsb-release
目前返回22.04.1 LTS
。
但是,我的终端、VS Code 和 wsl.exe 仍然显示版本 18.04。我该如何修复此问题以便只使用 22.04.1?
$ cat /etc/lsb-release
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"
$ wsl.exe -l --all
Windows Subsystem for Linux Distributions:
Ubuntu-18.04 (Default)
docker-desktop
docker-desktop-data
$ wsl --status
Default Distribution: Ubuntu-18.04
Default Version: 2
我按照指示这里并运行以下命令或它们的变体:
$ sudo apt update
$ sudo apt upgrade -y
> wsl --shutdown
$ sudo apt --purge autoremove
$ sudo apt install update-manager-core -y
$ sudo do-release-upgrade
我还运行了以下命令这里当我无法运行时reboot
(才意识到我应该wsl --shutdown
在 Powershell 中使用):
cd /mnt/c/ && cmd.exe /c start "rebooting WSL" cmd /c "timeout 5 && wsl -d $WSL_DISTRO_NAME" && wsl.exe --terminate $WSL_DISTRO_NAME
我收到一条错误消息,提示“未找到名为‘apt-pkg’的模块”,因此我按照说明进行操作这里。然后出现了command not found
错误do-release-upgrade
,但我用此信息。
我最终按照说明创建了符号链接,修复了 apt-pkg 错误这里因此 Ubuntu 直接使用 Python 3.6,而不是较新的版本。
然后我尝试运行时收到此错误消息sudo do-release-upgrade
:
A problem occurred during the update. This is usually some sort of network problem, please check your network connection and retry.
Err https://packages.cloud.google.com/apt cloud-sdk InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B53DC80D13EDEF05
我通过运行修复了该错误curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
然后我终于能够运行了sudo do-upgrade-release
,但最后它提示重新启动,所以我无法在同一会话中执行此操作,最终只能重新启动计算机,希望这样可以解决问题。但并没有(至少似乎没有)——我仍然看到 Ubuntu 18.04。我还没有运行cat /etc/lsb-release
,所以我不知道它是否已经在那里更新。因为我在终端和 VSCode 中仍然看到 18.04,所以我基本上只是开始运行和的变体apt update/upgrade
,do-release-upgrade
所以很有可能我在没有意识到的情况下升级了两次。
如果需要任何其他信息,请告诉我。
答案1
好的,我想我知道更新后发生了什么。
Ubuntu-18.04
是个分布名称。 这姓名不会改变;它与最初用于安装它的 Store 安装程序相关联。
目前微软商店中有 4 个 Ubuntu 版本:
“Ubuntu”(无版本名称)。通常,这与最新的 LTS 版本(Ubuntu 22.04)相同,但目前仍保留在 Ubuntu 20.04 上。这可能有几个原因,但对这个答案来说并不重要。
“Ubuntu-18.04”:仍受支持的最早版本。最初安装时,您显然选择了“Ubuntu 18.04”,而不是“Ubuntu”。
“Ubuntu 20.04”:安装此软件包将安装 Ubuntu 20.04,即使“Ubuntu”已更改为 22.04。
Ubuntu 22.04”:安装这个软件包当然会安装 22.04。
然而,任何这些版本可以升级到另一个 Ubuntu 版本,无论是否为 LTS。但是,如上所述,升级不会改变姓名为它创建的。WSL 本身不知道发行版中的内容。您实际上可以安装 Arch Linux(或其他)发行版并将其称为“Ubuntu”。WSL 本身不知道其中的区别(尽管它可能会导致Ubuntu安装程序)。
那么...你怎么样改变发行版的名称?通常情况下,您不需要。但有办法……
我通常建议创建你的自己的命名分布基于默认安装:
首先,确保您使用的是最新的 WSL 版本从 Microsoft Store 安装. 在全面更新Windows 10或11系统,安装从这里。
退出 Ubuntu。
从 PowerShell 中,
wsl --shutdown
。在你想要的地方创建目录你的分发到实时。例如,从 PowerShell:
mkdir "$env:USERPROFILE\wsl\coniferous_ubuntu" cd "$env:USERPROFILE\wsl\coniferous_ubuntu"
仍然在 PowerShell 中,找到现有 18.04 发行版的位置:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | ForEach-Object { (Get-ItemProperty $_.PSPATH) | Where-Object { $_.DistributionName -eq "Ubuntu-18.04" } } | Tee-Object -Variable ubuntuDist
上一个命令的信息将保存在 中
$ubuntuDist
。运行:wsl --import --vhd coniferous_ubuntu "$env:USERPROFILE\wsl\coniferous_ubuntu" "$ubuntuDist.BasePath" wsl --set-default coniferous_ubuntu wsl ~
启动此发行版后,您会注意到您是 root 用户,因为 WSL 需要被告知每个发行版的默认用户。通过创建一个
/etc/wsl.conf
文件来执行此操作,如下所示我的答案在这里。
您现在应该有一个名为你,而不是在任何特定的版本号之后(可能会改变)。
彻底测试新的发行版,一旦确信不再需要旧的发行版,请执行以下操作:
# WARNING: Destructive operation. All files in the distribution will be removed
wsl --unregister Ubuntu-18.04
您也可以从添加或删除程序,这将释放一些额外的空间。
此时,VSCode 应该显示你的发行版的名称以及版本升级不应该引起不必要的混乱。