openSUSE:WSL

(重定向自
跳转到:导航搜索

openSUSE for WSL

适用于 Linux 的 Windows 子系统或 WSL 是 Microsoft Windows 上的一个特殊接口,它允许在 Windows 内核之上运行 Linux 用户空间程序。在某种意义上,它类似于 chroot 或容器在 Linux 上的工作方式。WSL 可用于 Windows 10 和 11,以及 Windows Server 2019(版本 1709 及更高版本 [1])及更高版本。Windows 10 和 11 之间没有功能对等性,Microsoft 更关注最新版本。

Microsoft 商店中提供了可供安装的 openSUSE Tumbleweed 和 Leap WSL 镜像。

在 Windows 10 上启用 WSL

WSL 在 Windows 10 上默认未启用。它需要显式安装才能使 WSL 应用程序正常工作。注意:使用 wsl v2 不需要 wsl v1。v2 使用 Hyper-V 并具有更多功能,但 v1 在磁盘密集型场景中表现稍好。就我个人而言 (Scott B.),我完全使用 v2(从 https://github.com/microsoft/wsl/releases 安装),而没有安装 v1。

有两种方法可以启用 WSL

命令行

管理员身份打开命令提示符 (cmd.exe) 并运行以下命令

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

控制面板

  1. 打开控制面板(开始 > Windows 系统 > 控制面板)。
  2. 如果您看到八到十个项目:单击“查看方式:”下拉框并选择“小图标”。
  3. 打开“程序和功能”。
  4. 单击“启用或关闭 Windows 功能”超链接。
  5. 在“Windows 功能”窗口中,勾选“适用于 Linux 的 Windows 子系统”。列表按字母顺序排列,因此它应该出现在底部附近。
  6. 单击“确定”按钮关闭“Windows 功能”窗口。
  7. 关闭控制面板。
  8. 重新启动计算机(必需)。

启用 WSL2

要启用 WSL2,您需要使用 Windows 10 版本 2004,内部版本 19041 或更高版本。

管理员身份打开 PowerShell 并运行以下命令

wsl --set-default-version 2

您可能会看到以下警告

WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel

如果是这样,请按照链接下载并安装 WSL2 内核包。安装后再次运行上述命令

现有实例可以通过运行以下命令升级到 WSL 2,例如openSUSE-Tumbleweed:

wsl --set-version openSUSE-Tumbleweed 2

启用 systemd

Systemd 支持通过wsl_systemd模式提供,并且默认情况下未在 openSUSE WSL 镜像中安装。

要安装 systemd,您需要通过 zypper 安装wsl_systemd模式。通过wsl.conf的替代方法将在下面介绍。

# zypper in -t pattern wsl_systemd

实例可以通过 PowerShell 中的wsl.exe工具重新启动。

PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -l -v
  NAME                   STATE           VERSION
* openSUSE-Tumbleweed    Running         2
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -t openSUSE-Tumbleweed
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -d openSUSE-Tumbleweed

分步指南

以下指南将在 openSUSE Tumbleweed WSL 实例上安装 systemd。这些命令也应该适用于任何其他 SUSE/openSUSE WSL 实例。

首先,检查 systemd 是否已启用。如果是,您应该看到运行中代替离线在以下命令中

tumbleweed:/home/geeko # systemctl is-system-running
offline

然后通过 zypper 安装提供的 systemd 模式

tumbleweed:/home/geeko # zypper in -t pattern wsl_systemd
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
  patterns-wsl-systemd

The following NEW pattern is going to be installed:
  wsl_systemd

1 new package to install.
Overall download size: 13.1 KiB. Already cached: 0 B. After the operation, additional 57.0 B will be used.
Continue? [y/n/v/...? shows all options] (y): 

然后重新启动 WSL 实例。您可以在单独的 PowerShell 中使用wsl.exe工具来完成此操作。我们首先列出所有实例,然后终止openSUSE-Tumbleweed实例,然后重新启动它。

PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -l -v
  NAME                   STATE           VERSION
* openSUSE-Tumbleweed    Running         2
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -t openSUSE-Tumbleweed
The operation completed successfully.
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -l -v
  NAME                   STATE           VERSION
* openSUSE-Tumbleweed    Stopped         2
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -d openSUSE-Tumbleweed

最后一个命令将立即在 WSL 实例中生成一个 shell。我们可以使用此 shell 来检查 systemd 是否正常运行

geeko@tumbleweed:/mnt/c/Windows/System32/WindowsPowerShell/v1.0> sudo systemctl is-system-running
[sudo] password for root:
running

在这里您可以看到,systemd 现在正在您的 openSUSE Tumbleweed WSL 实例中运行。

wsl.conf

另一种方法是相应地配置 WSL 实例的/etc/wsl.conf文件

[boot]
systemd=true

重新启动后,实例应该有 systemd。

.wslconfig

在 Windows 中,用户可以在 `%UserProfile%\.wslconfig` 处添加一个文件,以实现“多种功能”[1],其中之一与 cgroups 相关

[wsl2]
kernelCommandLine=cgroup_no_v1=all

这对于 systemd (v256) 行为以及 docker/podman 功能特别有帮助。

[1]:更多详情请访问:https://learn.microsoft.com/en-us/windows/wsl/wsl-config

启用 GUI 支持 (WSLg)

gvim

GUI 支持由 WSLg 项目提供(WSLg 是 Windows Subsystem for Linux GUI 的缩写)。WSLg 支持直接在 Windows 上运行 X11 和 Wayland 应用程序。

在更改 WSL 实例之前,请查看 WSLg 说明

一旦 Windows 配置正确,WSLg 就可以通过wsl_guipattern

# zypper in -t pattern wsl_gui

在 SUSE/openSUSE WSL 实例中安装此模式后,您应该能够直接从 WSL 实例运行任何 GUI 应用程序,例如glxgears来自Mesa-demopackage.spec

未启用 WSLg 的系统通常会抱怨“DISPLAY”变量未设置。

在 WSL 上安装 openSUSE

从应用商店

获取 openSUSE for WSL 的最简单方法是从应用商店安装应用程序

应用商店还提供 SUSE Linux Enterprise 版本

在首次启动时,用户可以选择将其 SLE 安装注册为 SLES(企业服务器)或 SLED(企业桌面),以满足其许可需求。

从 openSUSE 下载服务器使用 Appx

您可以从 openSUSE 下载服务器获取 appx 文件

现在,如果尚未安装 openSUSE 证书,您需要安装它

  1. 右键单击 appx 文件,选择属性数字签名,选择签名,单击详细信息查看证书安装证书。这将显示证书导入向导。
  2. 单击单选按钮选择本地计算机,然后单击下一步
  3. 选择将所有证书放入以下存储,然后单击下一步
  4. 单击浏览并选择受信任的人,然后单击确定下一步,最后单击完成
  5. 应该会出现确认对话框,单击确定

从 tar 归档手动安装

另外,也可以手动安装开发版本

  • 注意:从 wsl v2.4.4 开始,`.tar.xz` 文件(可以重命名为 `.wsl` 并双击安装)是 Tier 1 安装方法

这些版本可在以下位置获取

通过:wsl.exe --install ...

默认为“ModernDistributions” - 链接 - 如果您想使用来自商店的 .appx,请包含 --legacy

 wsl --install --distribution openSUSE-Tumbleweed [--legacy]

通过:wsl.exe --install ... --web-download

默认为“ModernDistributions” - 链接 - 如果您想使用来自“Distributions”的 .appx,请包含 --legacy

 wsl --install --distribution openSUSE-Tumbleweed --web-download [--legacy]

Windows for Arm 上的 WSL

目前只有 openSUSE-Tumbleweed 镜像发布用于 Arm。不幸的是,从 Windows 商店安装将默认为 x86_64 的 WSL 镜像

用户仍然可以使用 --web-download 选项来获取 Arm 镜像。

 wsl --install openSUSE-Tumbleweed --web-download --legacy

Windows 11 和 WSL

  • Windows 11 上的安装类似于 Windows 10,但整体体验应该“更好”。访问 https://github.com/Microsoft/WSL 获取更新版本的 WSL,其中包括 systemd 支持等功能。
  • 注意:Microsoft 已转向提供单独的 arm64 / x64 .msi 文件进行安装/更新
  • 通过提升的 PowerShell 提示符安装
 Add-AppxPackage C:\path\to\Microsoft.WSL_<version>.msixbundle
  • 例如,在 WSL 发行版上添加/编辑 /etc/wsl.conf 将使 systemd 能够正常运行
 [boot]
 systemd=true

已知问题和限制

  • 从 Windows for Arm 上的 Windows 商店获取的 WSL 镜像为 x86_64 镜像。请参阅解决方法
  • 应用程序将根文件系统 tarball 解压到 Windows C: 驱动器中 WSL 特定位置。请确保有足够的空间。由于 WSL 的限制,其他驱动器将无法工作!
  • 由于根文件系统在安装后与应用程序断开连接,因此应用程序的任何潜在更新实际上都不会更新根文件系统内容。WSL 上安装的 openSUSE 系统必须像往常一样在内部更新,维护更新使用 zypper patch,更新和升级使用 zypper upzypper dup
  • WSL 中的系统实际上不会启动,也不使用 systemd。一个专有的 Microsoft /init 二进制文件会初始化系统。因此,服务管理不像在虚拟机中那样工作。它更像是一个交互式容器。
  • 如果尝试启动 WSL 时显示以下错误消息
 Error: WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel

请安装 wsl2 内核更新

报告错误

openSUSE on WSL 的 Bug 可以在 Bugzilla 报告

与 openSUSE 无关的 WSL 特定 Bug 必须通过 GitHub 报告给 Microsoft

外部链接

开发