Ubuntu 有没有 WSL 的替代品?

Ubuntu 有没有 WSL 的替代品?

Windows 现在有一个 Linux 子系统,您可以在其中尝试不同的发行版作为应用程序。无需虚拟机。Linux 上有类似的东西吗?

答案1

首先,它永远是一个更加富有如果您在 VM 上尝试发行版,则会获得更多“真实”体验,但是......

不需要虚拟机。Linux 上有类似的东西吗?

当然,WSL 2 使用的技术几乎适用于任何 Linux 操作系统,但有类似的注意事项和限制。

请记住,@UtkarshChandraSrivastava 在这个答案中提到,WSL 2 真的在虚拟机中运行。

分配正在运行里面但是,WSL 2 在命名空间/容器中运行。每个正在运行的发行版都有不同的:

  • PID 命名空间
  • 挂载命名空间
  • IPC 命名空间
  • UTS 命名空间
  • WSLg 系统分布

但是,它们都与父 WSL2 VM 共享以下内容(因此彼此也共享):

  • 用户命名空间
  • 网络命名空间
  • Cgroup 命名空间
  • 设备树(除 以外/dev/pts
  • CPU/内核/内存/交换(显然)
  • /init二进制(但不是进程)

这与 Docker、Podman 和其他容器系统的工作方式非常相似。它们对命名空间的配置可能略有不同,但核心技术通常是相同的。

因此,在基础层面上,您可以使用容器(无论是 Docker、Systemd-machined、Podman 还是其他容器)重现 WSL2 在 Ubuntu 上执行的大部分操作。在任何这些场景中,通常需要额外的配置才能运行 GUI(尤其是桌面环境),但通常也是可能的。

有了它,您将能够检查发行版的:

  • 包管理器
  • 库存存储库
  • 其他功能(如 Arch 上的 AUR)
  • 常规配置(库存 shell 启动文件等)

但是,您可能在使用网络工具或桌面工具时遇到困难。此外,与 WSL2 一样,容器内的内核将是主机 Ubuntu 发行版中的内核,不是与您正在测试的分布相关的任何特定内容。


当然,在比容器简单得多的级别上,甚至可以使用chroot不同分布的简单环境来实现相同的体验。

答案2

WSL-2 确实使用“轻量级实用虚拟机(VM)”。

您将始终需要一个虚拟机来运行不同的操作系统。

有一种更为人熟知的多程如果你只需要一个 shell 来测试不同的工具/发行版。

答案3

施鲁特

TL,DR:schroot 是运行来自另一个 Ubuntu 版本或另一个基于 Debian 的发行版的程序的好方法。

您可以使用以下方式尝试其他发行版的许多方面施鲁特。这是在一个 Linux 中运行另一个 Linux 的最轻量的虚拟化环境(从技术上讲它是一个虚拟环境,但与 Python 的虚拟环境非常相似,如果这能说明什么的话 — — 它不涉及任何形式的基于 CPU 或基于内核的虚拟化)。

chroot是 Unix 的一项功能,可让您在目录内运行程序,以便程序只能看到该目录及其子目录,而看不到系统的其余部分。Linux 发行版希望某些文件位于特定位置(/etc/lib等),而 chroot 可让您告诉程序“真实”的位置/etc实际上是/somewhere/etc什么,等等。例如,您在 中安装 Debian /debian,然后运行chroot /debian bash并获得在 Debian 中运行的 bash 提示符。您将获得 Debian 的 bash,并且从该 bash 启动的每个程序都是 Debian 中的内容,并将apt install somepackage在该 Debian 中安装软件包,等等,因为 chroot 程序看到的/etc是真实的/debian/etc,等等。内核(因此硬件驱动程序)、网络配置和系统中所有其他不由磁盘文件决定的方面都属于外部世界。

chroot 有很多限制。例如,由于它看不到其自身树之外的任何内容,因此它无权访问/home/proc以及/dev您真正想共享的系统的其他关键部分。它没有相同的用户帐户。此外,chroot 可以绕过安全策略,因此只有 root(系统管理员)可以使用它。

施鲁特是一个提供许多便利功能的程序,它围绕使用 chroot 安装另一个 Linux 操作系统。它负责(根据其配置)在 schroot 中创建/home和可用的目录、共享用户帐户等。它以 Ubuntu 软件包的形式提供,因此您可以使用或您最喜欢的软件包管理器安装它。安装该程序后,创建一个配置文件来声明您想要的 schroot(请参阅 Debian wiki 或网络上其他地方的示例)。/procapt install schroot

下一步是在 schroot 环境中安装另一个发行版。具体如何操作取决于发行版。警告— 您需要在此方面多加小心,因为 schroot 与主机共享很多东西,例如网络访问。如果您在 schroot 内启动网络服务器,它将需要独占端口访问权限,除非将两者配置为使用不同的端口,否则会与主机上的相同软件发生冲突。没有统一的方法来安装另一个这样的发行版。

Debian 及其衍生产品有两个非常方便的功能可以在 chroot 环境中安装另一个发行版:debootstrap 和服务抑制。启动( apt install debootstrap) 是一款工具,用于从 Debian、Ubuntu 或(可能需要进行一些配置)其他基于 Debian 的发行版下载一组入门软件包,并将这些软件包安装在您选择的目录下。现代 Debian 版本带有服务抑制功能,因此在 chroot 中安装软件包不会自动启动系统服务(如果您想尝试旧版本,请小心这一点)。

例如,我是一名软件开发人员,有时我需要测试我的软件如何与其他软件的旧版本或新版本进行互操作。为了测试与 2015 年左右的软件的互操作性,我使用带有 Ubuntu 16.04 的 schroot:

$ cat /etc/schroot/chroot.d/xenial 
[xenial]
description=Ubuntu 16.04
directory=/chroot/xenial
type=directory
groups=users

我开始安装该系统debootstrap xenial /chroot/xenial https://archive.ubuntu.com/ubuntu/。然后我运行

sudo schroot apt install [more packages I needed]
schroot ./interoperability-tests

使用 Ubuntu 16.04 中的程序运行我的互操作性测试。

答案4

在学校我们使用 Docker。它基于容器,因此不需要 VM,在这方面它甚至比 WSL2 更好(WSL2 使用隐藏 VM)。不过据我所知它只支持 cmd

相关内容