运行 sudo do-release-upgrade 后,我的终端/VS code/wsl.exe Ubuntu 版本(18.04)和 /etc/lsb-release(22.04.01)不匹配?

运行 sudo do-release-upgrade 后,我的终端/VS code/wsl.exe Ubuntu 版本(18.04)和 /etc/lsb-release(22.04.01)不匹配?

我在 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/upgradedo-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安装程序)。

那么...你怎么样改变发行版的名称?通常情况下,您不需要。但有办法……

我通常建议创建你的自己的命名分布基于默认安装:

  1. 首先,确保您使用的是最新的 WSL 版本从 Microsoft Store 安装. 在全面更新Windows 10或11系统,安装从这里

  2. 退出 Ubuntu。

  3. 从 PowerShell 中,wsl --shutdown

  4. 在你想要的地方创建目录你的分发到实时。例如,从 PowerShell:

    mkdir "$env:USERPROFILE\wsl\coniferous_ubuntu"
    cd "$env:USERPROFILE\wsl\coniferous_ubuntu"
    
  5. 仍然在 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
    
  6. 上一个命令的信息将保存在 中$ubuntuDist。运行:

    wsl --import --vhd coniferous_ubuntu "$env:USERPROFILE\wsl\coniferous_ubuntu" "$ubuntuDist.BasePath"
    
    wsl --set-default coniferous_ubuntu
    
    wsl ~
    
  7. 启动此发行版后,您会注意到您是 root 用户,因为 WSL 需要被告知每个发行版的默认用户。通过创建一个/etc/wsl.conf文件来执行此操作,如下所示我的答案在这里

您现在应该有一个名为,而不是在任何特定的版本号之后(可能会改变)。

彻底测试新的发行版,一旦确信不再需要旧的发行版,请执行以下操作:

# WARNING:  Destructive operation.  All files in the distribution will be removed
wsl --unregister Ubuntu-18.04

您也可以从添加或删除程序,这将释放一些额外的空间。

此时,VSCode 应该显示你的发行版的名称以及版本升级不应该引起不必要的混乱。

相关内容