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 v1 不需要使用 WSL v2。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 项目(Windows Subsystem for Linux GUI 的缩写)提供。WSLg 支持直接在 Windows 上运行 X11 和 Wayland 应用程序。

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

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

# zypper in -t pattern wsl_gui

安装此模式后,您应该能够直接从 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]

适用于 Arm 的 Windows 上的 WSL

目前仅为 Arm 发布了 openSUSE-Tumbleweed 镜像。不幸的是,从 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

已知问题和限制

  • 从适用于 Arm 的 Windows 上的 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 的错误可以在 Bugzilla 中报告

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

外部链接

开发