wsl debian 仍在 oldoldstable 上,有什么方法可以获得最新版本吗?

wsl debian 仍在 oldoldstable 上,有什么方法可以获得最新版本吗?

正如标题——

wsldebian仍在运行oldoldstable,有什么方法可以获取最新版本(debian bullseye(稳定版)或 Ubuntu-22.04)?
希望我不需要自己升级发行版。

PS C:\Windows\system32> wsl --install -d Ubuntu-22.04
Invalid distribution name: 'Ubuntu-22.04'.
To get a list of valid distributions, use 'wsl --list --online'.

PS C:\Windows\system32> wsl --list --online
The following is a list of valid distributions that can be installed.
Install using 'wsl --install -d <Distro>'.

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS
$ cat /etc/apt/sources.list
deb http://deb.debian.org/debian stretch main
deb http://deb.debian.org/debian stretch-updates main
deb http://security.debian.org/debian-security/ stretch/updates main

stretcholdoldstable-https://packages.debian.org/search?keywords=lsb-release

答案1

简短回答:

更多细节:

安装发行版有多种方法,这不是一份详尽的列表,但出于“自动”安装的目的:

  1. “传统”方式是通过 Microsoft Store。在商店中,每个发行版维护者都会创建和更新自己的 WSL 包。您通常会找到最新的发行版来自维护者在商店。

  2. 后来,微软一度提供了一份可供下载的几个发行版 rootfs 软件包的 URL 列表wsl --import。该列表似乎不再存在,但下载位置似乎是 所 使用 的wsl --install.

  3. 现在,微软提供了 Appx 软件包链接列表这一页我上面提到过。

现在令人沮丧的是——这三种方法都可能导致不同的版本正在安装。遗憾的是,它们没有链接、同步或协调。

例如:

  • 通过 (1) 或 (3) 安装 Debian 将导致 Bullseye 安装,但wsl --install正如您所指出的,通过 安装使用了严重过时的 rootfs,从而导致 Stretch。

  • 通过 (1) 安装 Kali 可获得最新版本。但是,(2) 和 (3) 均安装 2019.02。此版本太旧,密钥已过期,并且甚至没有简单的方法来更新安装后的分布。

我刚刚在全新安装的 Windows 11/WSL 上运行了每一种情况,以确认情况仍然如此。

因此,至少对于 Debian,您可以通过方法(1)或(3)安装并获得 Bullseye。

答案2

即使 中有升级版本Microsoft Store,而我们已经安装了旧版本,升级版本不会升级已安装的版本,而只会在按钮上显示打开选项。奇怪的是,已安装的版本会显示相同的版本,例如Debian version 1.14.00但实际上是VERSION="9 (Stretch)"。解决方案是从 先卸载Installed applications,然后从 重新安装Microsoft Store。这样做之后,我们将获得相同版本Debian version 1.14.00,但带有VERSION="11 (bullseye)"。遗憾的是,似乎Microsoft Store无法正确升级到VERSION_CODENAME,而只有最新项目版本的信息而无法升级它。

编辑: 正如@NotTheDr01ds 所述,这将删除所有数据,因此只有在没有必要保留数据时才这样做。

答案3

将独立的 Debian 11 更新到 12 的说明也适用于 WSL: https://www.cyberciti.biz/faq/update-upgrade-debian-11-to-debian-12-bookworm/ 刚刚测试

答案4

我一直以在常规安装中升级 WSL 发行版的相同方式升级它们,或多或少遵循官方的 debian 升级文档(采取一些捷径,因为我知道在我的特定情况下我可以跳过一些部分)。

不过,从靶心书呆子,我在合并和usrmerge之间的目录的软件包中遇到了一个问题。WSL1 作为 Linux 实现在 NT 微内核上运行(从一开始就设计为与操作系统无关),因此文件位于本机 NTFS 文件系统上,Linux 进程作为本机 NT(但不是 Win32)进程运行。//usr

就像在 Windows 上经常无法重命名打开的文件一样,/lib用符号链接替换也会/usr/lib失败并出现Permission Denied错误。例如:

https://github.com/microsoft/WSL/issues/8927 https://github.com/microsoft/WSL/issues/4279#issuecomment-1846822075

幸运的是,我只遇到了目录错误/lib,这意味着它只是无法移开/lib并用符号链接替换它/usr/lib

我修复它所用的步骤如下。请注意,对于 Windows 命令,您不需要管理员 cmd 提示符,但在 Linux 上,您需要使用 sudo 或 root shell。

  1. 确保您可以启动 Debian 的新 shell。只需启动一个新 shell 而不关闭当前 shell;下一步涉及关闭 WSL,因此如果此操作失败,您可能无法在那之后恢复安装。

  2. Debian,创建一个具有不同名称的符号链接/usr/lib(从 Windows 创建文件不会设置 UNIX 属性,但移动它们是可以的,因此我们稍后将其从 Windows 中移动)。

    sudo ln -s /usr/lib /lib-new
    
  3. 关闭 Debian 上可能运行的所有 shell 和进程。

  4. 视窗命令提示符,确保 WSL1 使用以下命令关闭;它不应列出您的发行版(如果它在几分钟后继续运行,请尝试使用该wsl工具将其关闭或重新启动计算机)。

    wsl -l --running
    
  5. 转到你的发行版根目录,路径应该是这样的%LOCALAPPDATA%\Packages\TheDebianProject.DebianGNULinux_<RANDOM_STRING>\LocalState\rootfs

  6. 使用dir你应该会看到liblib-new。交换它们的位置。

    ren lib lib-old
    ren lib-new lib
    
  7. 重新启动 Debian shell

  8. Debian,重新运行apt upgrade(或者full-upgrade,就我而言,它发生在第一次运行中,即正常升级)。

    sudo apt upgrade
    
  9. 您可以在步骤 8 之前或之后执行此操作,但您必须清理lib-old目录。

    sudo rm -rf /lib-old
    

相同的步骤也适用于其他目录。对于文件,如果任何文件失败,只需进行简单的移动即可,尽管最好先检查/usr/lib/usrmerge/convert-usrmerge并查看它试图做什么(在我的情况下,我制作了一个副本并/tmp进行了修改,添加了更多调试输出以确保我对错误有很好的理解)。

相关内容