如何在WSL中安装多个独立的Ubuntu实例?

时间:2018-07-29 21:39:31

标签: windows-subsystem-for-linux

在Windows 10中,如何在WSL中安装多个单独的Ubuntu实例?我想要用于不同工作空间的单独实例。例如,一个用于Python开发,一个用于Ruby开发,一个用于.Net Core开发,等等。我知道我可以将所有这些卡在WSL实例上的同一个Ubuntu中,但是我希望每个单独使用一个场景。这可能吗?

5 个答案:

答案 0 :(得分:76)

较新的wsl命令的导入/导出功能可以轻松创建发行版的副本,而无需安装任何其他工具或使用RegEdit。例如

cd C:\Users\MattSlay
wsl --export Ubuntu ubuntu.tar
wsl --import UbuntuRuby .\UbuntuRuby ubuntu.tar
wsl --import UbuntuPython .\UbuntuPython ubuntu.tar
wsl --import UbuntuDotNet .\UbuntuDotNet ubuntu.tar
wsl -d UbuntuRuby

wsl -d <distro>启动发行版。如果已安装WSL 2,则可以使用--import选项在--version期间在各个版本之间转换发行版:

wsl --import UbuntuRuby .\UbuntuRuby ubuntu.tar --version 2

较小的发行版,例如Alpine,可以使实验更快。最后,wsl --import可以从标准输入-读取,wsl --export可以写入标准输出-。如果需要,可以使用压缩程序来节省磁盘空间。

答案 1 :(得分:6)

可能,但是需要一些工作。您可以使用LxRunOffline-“适用于Linux的Windows子系统(WSL)的功能齐全的实用程序”。 您可以通过Chocolatey:choco install lxrunoffline进行安装,也可以下载并解压缩。 您可能需要将 LxRunOffline.exe 添加到PATH。
https://lxrunoffline.apphb.com/download/{distro}/{version}将重定向到所需发行版的下载页面。根据lxrunoffline wiki,在这种情况下,它可能是... / ubuntu / xenial或类似名称,或者您可以直接从Canonical下载。 然后您可以:
LxRunOffline install -n someName -d where/to/install -f path/to/downloaded/distro多次使用不同的名称和目标目录。
然后,您可以lxrunoffline -w -n someName开始进行所需的安装,最后,您可以在桌面上创建多个快捷方式,并为特定的工作空间使用不同的选项。
LxRunOffline可用命令:

list           List all installed distributions.
get-default    Get the default distribution, which is used by bash.exe.
set-default    Set the default distribution, which is used by bash.exe.
install        Install a new distribution.
uninstall      Uninstall a distribution.
register       Register an existing installation directory.
unregister     Unregister a distribution but not delete the installation directory.
move           Move a distribution to a new directory.
duplicate      Duplicate an existing distribution in a new directory.
run            Run a command in a distribution.
get-dir        Get the installation directory of a distribution.
get-env        Get the default environment variables of a distribution.
set-env        Set the default environment variables of a distribution.
get-uid        Get the UID of the default user of a distribution.
set-uid        Set the UID of the default user of a distribution.
get-kernelcmd  Get the default kernel command line of a distribution.
set-kernelcmd  Set the default kernel command line of a distribution.
get-flags      Get some flags of a distribution. See https://msdn.microsoft.com/en-us/library/windows/desktop/mt826872(v=vs.85).aspx for details.
set-flags      Set some flags of a distribution. See https://msdn.microsoft.com/en-us/library/windows/desktop/mt826872(v=vs.85).aspx for details.
version        Get version information about this LxRunOffline.exe.

答案 2 :(得分:2)

首先,我们必须找到该Windows Store Appx的安装位置。这是一个Powershell脚本来查找该路径。首先输入分发名称(例如Ubuntu18.04)。

$DistroName=Read-Host "Enter Distribution Name"
$path = (Get-AppxPackage *DistroName*).InstallLocation
echo $path
Invoke-Item $path
pause

Ubuntu 18.04的安装路径为:

%ProgramFiles%\WindowsApps\CanonicalGroupLimited.Ubuntu18.04onWindows_1804.2018.427.0_x64__79rhkp1fndgsc

在PS脚本中,Invoke-Item将在文件资源管理器中打开该路径。如果该路径不可见或显示任何安全问题,请从属性菜单中授予该文件夹的权限。现在,仅复制这两个必需文件:

  1. 名为 install.tar.gz (或任何TAR.GZ文件)的分发用户空间tarball。
  2. 要安装的主要可执行文件,名为Ubuntu.exe或Ubuntu1804.exe或Ubuntu1604.exe等。

这是下一节。备份并删除此注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss。将这两个文件放在这样的文件夹结构中(或根据需要):

C:\MyFiles
|
+-- UbuntuPython
|   |
|   +-- ubuntu.exe
|   +-- install.tar.gz
|
+-- UbuntuRuby
    |
    +-- ubuntu.exe
    +-- install.tar.gz

文件夹名称应该不同。现在,双击第一个,直到安装。打开HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss\<some-GUID>,然后将DistributionName字符串注册表更改为UbuntuPython(或任意)。对每个实例重复该过程。对于每个实例,GUID都是新的。确保您分别为每个更改DistributionName注册表,否则ubuntu.exe将执行wsl.exe而不是安装。在GitHub: Microsoft/WSL-DistroLauncher中查看这些EXE文件的源代码。

答案 3 :(得分:1)

不是从 Microsoft Store 或 .appx 文件复制发行版,另一种解决方案是在 WSL 上运行的现有 Linux 发行版中利用 Docker。这个方法实际上在WSL Docs by Microsoft中有解释。

这种方法很有用,因为您可以利用 Docker 注册表中提供的各种发行版。

例如,您已经从 Microsoft Store 安装了 Ubuntu-18.04 发行版。

  1. 从终端运行分发
wsl -d Ubuntu-18.04
  1. 按照 instruction from Docker Docs

    为 Ubuntu 安装 Docker
  2. 运行 docker 服务

service docker start
  1. 使用您想要的任何 Linux 发行版运行容器,例如 Ubuntu 20.04
docker run -d ubuntu:20.04
  1. 列出所有容器,并保留所需分发的容器 ID
docker ps -a
  1. WSL 会将您在 Windows 上的当前位置挂载到正在运行的 Linux 上的 /mnt/your/windows/path。例如,如果您在使用 WSL 运行 Linux 的 Windows 终端中使用 C:\data,则挂载 /mnt/c/data。将选中的容器导出为.tar文件,例如容器ID为123123abcabc
docker export 123123abcabc > /mnt/c/data/exported-ubuntu-20.04.tar

现在,导出的文件在 C:\data\exported-ubuntu-20.04.tar 中可用。

  1. 退出 Linux,回到 Windows 终端,然后将导出的容器作为具有任意名称的新发行版导入并存储在 Windows 中的任何位置
exit
wsl --import anyName C:\data\anyLocation C:\data\exported-ubuntu-20.04.tar
  1. 现在,您可以在列表中看到您的新发行版并运行它
wsl --list -v
wsl -d anyName

答案 4 :(得分:0)

我知道这已经很老了,但我想我可以添加一点钱。

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

删除本身并不难,因为官方命令<div class="triangle"></div>可以正常工作,并且可以完美地摆脱WSL2实例,而不会留下任何痕迹。

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

以下示例使用先前下载的Ubuntu20.04(Focal Fossa)创建一个WSL2实例 tarball(示例使用以下命令:https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64-wsl.rootfs.tar.gz),使用用户名wsl --unregister <distro_name>创建一个用户 并将其添加到组myuser中。还将用户密码设置为管道中指定的用户密码,并将root用户的密码也设置为管道中的密码。

sudo

在后台,如果创建了一个新用户,它还将其默认外壳从.\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 更改为/bin/sh