Mat*_*lay 23 windows-subsystem-for-linux
在Windows 10中,如何在WSL中安装多个独立的Ubuntu实例?我想为不同的工作空间分别设置实例.例如,一个在Python开发,一个用于Ruby开发,一个对于.NET开发的核心,等我知道我可以堵塞所有这些在同一个Ubuntu的上WSL实例,但我宁愿为每个这些单独的一个场景.这可能吗?
小智 117
较新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
Run Code Online (Sandbox Code Playgroud)
wsl -d <distro>启动发行版。如果已安装WSL 2,则可以在--import使用--version选项期间在版本之间转换发行版:
wsl --import UbuntuRuby .\UbuntuRuby ubuntu.tar --version 2
Run Code Online (Sandbox Code Playgroud)
较小的发行版,例如Alpine,可以更快地进行实验。最后,wsl --import可以从标准输入读取-并wsl --export可以写入标准输出-。如果需要,这允许使用压缩程序来节省磁盘空间。
Luk*_*kti 14
另一种解决方案是在 WSL 上运行的现有 Linux 发行版中利用 Docker,而不是从 Microsoft Store 或.appx文件复制发行版。这个方法实际上是微软在WSL Docs中解释的。
此方法很有用,因为您可以利用 Docker 注册表中提供的各种发行版。
例如,您已经从 Microsoft Store 安装了Ubuntu-18.04发行版。
wsl -d Ubuntu-18.04
Run Code Online (Sandbox Code Playgroud)
运行docker服务
service docker start
Run Code Online (Sandbox Code Playgroud)
docker run -d ubuntu:20.04
Run Code Online (Sandbox Code Playgroud)
docker ps -a
Run Code Online (Sandbox Code Playgroud)
C:\data。/mnt正在运行的 Linux 上的目录中。如果您C:\data在 Windows 上有一个目录,则可以在 Linux 上的目录中访问其内容/mnt/c/data。docker export 123123abcabc > /mnt/c/data/exported-ubuntu-20.04.tar
Run Code Online (Sandbox Code Playgroud)
现在,导出的文件可以在C:\data\exported-ubuntu-20.04.tar.
exit
wsl --import anyName C:\data\anyLocation C:\data\exported-ubuntu-20.04.tar
Run Code Online (Sandbox Code Playgroud)
wsl --list -v
wsl -d anyName
Run Code Online (Sandbox Code Playgroud)
Bra*_*aca 13
可能,但是需要一些工作。您可以使用LxRunOffline- “ Linux子系统(WSL)的Windows子系统的全功能实用程序”。您可以通过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.
Run Code Online (Sandbox Code Playgroud)
我最近遇到了同样的问题,因为我同时与不同的公司合作,并且需要一个可以轻松创建新 WSL2 实例的脚本,也可以轻松删除它。
删除本身并不难,因为官方命令wsl --unregister <distro_name>工作正常,并且完美地删除了WSL2实例,不留任何痕迹。
然而,创作可能很麻烦,甚至乏味。我的脚本就是这样做的:https : //github.com/IAL32/WSL2-Create-Distro
以下示例使用 Ubuntu20.04 (Focal Fossa) 使用先前下载的 tarball 创建 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
Run Code Online (Sandbox Code Playgroud)
在幕后,如果创建了一个新用户,它也会将其默认 shell 从 更改/bin/sh为/bin/bash。
首先,我们必须找到该Windows Store Appx的安装位置。这是一个Powershell脚本来查找该路径。首先输入发行名称(例如Ubuntu18.04)。
$DistroName=Read-Host "Enter Distribution Name"
$path = (Get-AppxPackage *DistroName*).InstallLocation
echo $path
Invoke-Item $path
pause
Run Code Online (Sandbox Code Playgroud)
Ubuntu 18.04的安装路径为:
%ProgramFiles%\WindowsApps\CanonicalGroupLimited.Ubuntu18.04onWindows_1804.2018.427.0_x64__79rhkp1fndgsc
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
文件夹名称应该不同。现在,双击第一个,直到安装。打开HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss\<some-GUID>并将DistributionName字符串注册表更改为UbuntuPython(或任意)。对每个实例重复该过程。对于每个实例,GUID都是新的。确保为每个注册表更改DistributionName不同的注册表,否则ubuntu.exe将执行wsl.exe而不是安装。在GitHub上查看这些EXE文件的源代码:Microsoft / WSL-DistroLauncher。
| 归档时间: |
|
| 查看次数: |
9122 次 |
| 最近记录: |