如何添加第二个 WSL2 Ubuntu 发行版(全新安装)

如何添加第二个 WSL2 Ubuntu 发行版(全新安装)

我有一个现有的 Ubuntu 发行版,我想要一个全新的 Ubuntu 映像作为第二个发行版。

我想我可以:

  1. 使用以下方法将我现有的发行版导出到 tarwsl.exe --export
  2. 取消注册我现有的发行版wsl unregister
  3. 从 Microsoft Store 卸载 Ubuntu
  4. 从 Microsoft Store 重新安装 Ubuntu,获得全新安装
  5. 通过 tar 导入wsl --import

这样我就可以得到 2 个发行版,一个是我现有的,另一个是新的。有没有更简单/更好的方法?

这是最新的(截至撰写本文时)Windows 10 Build 19035

答案1

重要的:以下程序仅适用于Windows 10 内部版本 18305 或以上版本。请确保命令行中wsl.exe--import选项。对于较旧的 Windows 10 版本,请尝试此替代方法

程序:

  • 首先,我们需要 Ubuntu 的 rootfs tarball。打开https://cloud-images.ubuntu.com/releases/(适用于 Ubuntu < 22.04)或https://cloud-images.ubuntu.com/wsl/(适用于 Ubuntu >= 22.04)在网络浏览器中。转到包含所需 Ubuntu 版本的文件夹。

  • 下载ubuntu-x.x-server-cloudimg-amd64-wsl.rootfs.tar.gz文件(xx 用作版本号)。确保文件名有amd64-wsl且文件类型为.tar.gz(GZIP tarball)。例如,直接链接将如下所示:

https://cloud-images.ubuntu.com/releases/eoan/release/ubuntu-19.10-server-cloudimg-amd64-wsl.rootfs.tar.gz
  • 现在我们将使用wsl.exe命令行安装它。打开命令提示符。实际命令格式如下:
wsl.exe --import <Distribution Name> <Install Folder> <.TAR.GZ File Path>
  • 运行两次命令以使用不同的发行版名称安装 Ubuntu。文件夹名称和发行版名称必须不同否则输出中会显示错误。以下是两个示例:
wsl.exe --import DistroA FolderA ubuntu-x.x-server-cloudimg-amd64-wsl.rootfs.tar.gz
wsl.exe --import DistroB FolderB ubuntu-x.x-server-cloudimg-amd64-wsl.rootfs.tar.gz
  • 已安装的发行版可以像这样执行wsl.exe -d DistroA

笔记:

  • 该过程可以与任何 GNU/Linux 发行版用户空间一起使用。

  • 这不使用 Windows Store。因此,Windows Store 既不显示名称,也不更新安装。

  • 在 Windows 10 ARM64(AArch64)中,使用arm64-wslUbuntu 的云映像。

  • 在此过程中,同一台机器上的其他用户可以访问安装文件夹。如果您使用的是共享机器,请使用适当的权限。

  • 如果您愿意与同一台机器的其他用户共享安装,则只需导出此注册表HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss。然后将其导入同一台机器的其他用户。

进一步阅读:

答案2

Biswapriyo 的回答效果很好,但需要额外的步骤来更改默认用户。请注意,这需要版本 18980 及以上

通过命令添加非root用户adduser

PS C:\Users\Username> wsl -d DistroA
root@DESKTOP:/mnt/c/Users/Username# NEW_USER=username
root@DESKTOP:/mnt/c/Users/Username# adduser "${NEW_USER}"
Adding user `username' ...
Adding new group `username' (1000) ...
Adding new user `username' (1000) with group `username' ...
Creating home directory `/home/username' ...
Copying files from `/etc/skel' ...
New password: ****
Retype new password: ****
passwd: password updated successfully
Changing the user information for username
Enter the new value, or press ENTER for the default
        Full Name []: User Name
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]

启用 sudoer 权限${NEW_USER}

adduser ${NEW_USER} sudo

在 /etc/wsl.conf 中添加设置默认用户:

tee /etc/wsl.conf <<_EOF
[user]
default=${NEW_USER}
_EOF

通过 退出 WSL logout,然后发出 WSL 关闭命令以使更改生效:

wsl --shutdown DistroA

下次wsl -d DistroA调用时,${NEW_USER}用户将处于活动状态。

答案3

我最近遇到了同样的问题,因为我同时与不同的公司合作,需要一个可以轻松创建新的 WSL2 实例并轻松删除它的脚本。

删除本身并不难,因为官方命令wsl --unregister <distro_name>运行良好,可以完美地删除 WSL2 实例,而不留下任何痕迹。

然而,创建可能会很麻烦,甚至很乏味。我的脚本就是这样做的:https://github.com/IAL32/WSL2-Create-Distro

以下示例使用之前下载的 tarball 创建使用 Ubuntu20.04(Focal Fossa)的 WSL2 实例(示例使用以下内容:https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64-wsl.rootfs.tar.gz),创建一个用户名为 的用户myuser 并将其添加到组sudo。它还将用户密码设置为管道中给出的密码,以及 root 用户的密码(也在管道中给出)。

.\CreateLinuxDistro.ps1 -INPUT_FILENAME .\focal-server-cloudimg-amd64-wsl.rootfs.tar.gz -OUTPUT_DIRNAME "$env:LOCALAPPDATA\Packages\ubuntu2004-test-1" -OUTPUT_DISTRONAME ubuntu2004-test-1 -CREATE_USER 1 -CREATE_USER_USERNAME myuser -ADD_USER_TO_GROUP 1 -ADD_USER_TO_GROUP_NAME sudo -SET_USER_AS_DEFAULT myuser

在底层,如果创建了一个新用户,它也会将其默认 shell 从 更改/bin/sh/bin/bash

答案4

我建议使用 Ubuntu“基本”图像(比“云”图像更不臃肿):

下载 rootfs 并导入它:

wget http://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-amd64.tar.gz
wsl --import my-ubuntu c:\wsl\my-ubuntu ubuntu-base-22.04-base-amd64.tar.gz --version 2

更新第一行/etc/passwd或用户定义的/etc/wsl.conf+passwd定义一个启动的应用程序。

为了排除故障,你可以自己指定入口点-ewsl -d BaseUbuntu -e /bin/sh

你可以查看 rootfs 存档以查看哪些应用程序在/bin/中/usr/bin。找到 shell 后,你可以以 root 身份运行映像:

wsl -d my-ubuntu -u root -e /bin/sh

chsh并使用或其他可用工具更新默认 shell 。

相关内容