正如标题——
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
stretch
是oldoldstable
-https://packages.debian.org/search?keywords=lsb-release
答案1
简短回答:
对于 Debian:Microsoft Store 中的 WSL Debian 发行版是 Bullseye(目前稳定)。
或者,您也可以通过 Debian 链接手动下载,无需通过商店此 Microsoft 文档页面。
Ubuntu 22.04:现已在 Microsoft Store 上架。如您所见,它目前尚未上市
wsl --install -d <distro>
。
更多细节:
安装发行版有多种方法,这不是一份详尽的列表,但出于“自动”安装的目的:
“传统”方式是通过 Microsoft Store。在商店中,每个发行版维护者都会创建和更新自己的 WSL 包。您通常会找到最新的发行版来自维护者在商店。
后来,微软一度提供了一份可供下载的几个发行版 rootfs 软件包的 URL 列表
wsl --import
。该列表似乎不再存在,但下载位置似乎是 所 使用 的wsl --install
.现在,微软提供了 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。
确保您可以启动 Debian 的新 shell。只需启动一个新 shell 而不关闭当前 shell;下一步涉及关闭 WSL,因此如果此操作失败,您可能无法在那之后恢复安装。
从Debian,创建一个具有不同名称的符号链接
/usr/lib
(从 Windows 创建文件不会设置 UNIX 属性,但移动它们是可以的,因此我们稍后将其从 Windows 中移动)。sudo ln -s /usr/lib /lib-new
关闭 Debian 上可能运行的所有 shell 和进程。
从视窗命令提示符,确保 WSL1 使用以下命令关闭;它不应列出您的发行版(如果它在几分钟后继续运行,请尝试使用该
wsl
工具将其关闭或重新启动计算机)。wsl -l --running
转到你的发行版根目录,路径应该是这样的
%LOCALAPPDATA%\Packages\TheDebianProject.DebianGNULinux_<RANDOM_STRING>\LocalState\rootfs
使用
dir
你应该会看到lib
和lib-new
。交换它们的位置。ren lib lib-old ren lib-new lib
重新启动 Debian shell
从Debian,重新运行
apt upgrade
(或者full-upgrade
,就我而言,它发生在第一次运行中,即正常升级)。sudo apt upgrade
您可以在步骤 8 之前或之后执行此操作,但您必须清理
lib-old
目录。sudo rm -rf /lib-old
相同的步骤也适用于其他目录。对于文件,如果任何文件失败,只需进行简单的移动即可,尽管最好先检查/usr/lib/usrmerge/convert-usrmerge
并查看它试图做什么(在我的情况下,我制作了一个副本并/tmp
进行了修改,添加了更多调试输出以确保我对错误有很好的理解)。