在Windows 10中,如何在WSL中安装多个单独的Ubuntu实例?我想要用于不同工作空间的单独实例。例如,一个用于Python开发,一个用于Ruby开发,一个用于.Net Core开发,等等。我知道我可以将所有这些卡在WSL实例上的同一个Ubuntu中,但是我希望每个单独使用一个场景。这可能吗?
答案 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
将在文件资源管理器中打开该路径。如果该路径不可见或显示任何安全问题,请从属性菜单中授予该文件夹的权限。现在,仅复制这两个必需文件:
这是下一节。备份并删除此注册表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 发行版。
wsl -d Ubuntu-18.04
运行 docker 服务
service docker start
docker run -d ubuntu:20.04
docker ps -a
/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
中可用。
exit
wsl --import anyName C:\data\anyLocation C:\data\exported-ubuntu-20.04.tar
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
。