认识WSL离线安装
1. 什么是WSL离线安装?
WSL(Windows Subsystem for Linux)离线安装,顾名思义,是指在没有互联网连接或网络受限的环境下,完成WSL核心组件以及Linux发行版的安装过程。这与通过Microsoft Store或直接从网络下载安装包的常规方式不同。离线安装通常涉及预先下载所有必需的文件,然后在目标机器上进行本地部署。
它主要包含以下几个核心部分的离线部署:
- WSL核心功能: Windows操作系统内置的“虚拟机平台”和“适用于Linux的Windows子系统”功能。
- WSL内核更新包: 这是一个独立的可执行文件,包含了WSL 2运行所需的Linux内核。
- Linux发行版包: 通常是`.msixbundle`文件(用于通过PowerShell安装,类似应用商店下载的格式)或`.tar.gz`压缩包(用于自定义导入)。
2. 为什么需要WSL离线安装?
在许多特定场景下,离线安装WSL是必不可少或更优的选择:
- 网络受限或无网络环境: 在一些封闭的网络环境(如企业内部网、开发测试环境)或根本没有互联网连接的机器上,传统安装方式无法进行。离线安装允许用户在有网络的环境中下载好所有组件,然后带到目标机器上部署。
- 提高安装效率: 对于需要批量部署WSL或频繁重装系统的用户,预先下载好所有安装包可以节省每次安装时重复下载的时间,尤其是在网络状况不佳的情况下。
- 版本控制与一致性: 在团队协作或生产环境中,有时需要确保所有开发者的WSL环境版本保持一致。离线安装可以确保部署的是特定、经过测试的WSL版本和Linux发行版,避免因在线更新导致的版本不兼容问题。
- 绕过防火墙或代理限制: 某些企业防火墙或代理服务器可能会阻止或限制对Microsoft Store或特定下载源的访问。离线安装提供了一种绕过这些限制的解决方案。
3. WSL离线安装需要哪些组件?
为了成功进行WSL离线安装,您需要准备以下关键组件:
- WSL核心功能组件: 这些是Windows系统自带的功能,通过DISM命令启用。虽然命令本身不需要联网,但系统内部需要确保这些组件文件是完整的。
-
WSL 2 Linux内核更新包: 这是一个独立的安装程序,通常命名为`wsl_update_x64.msi`。这是WSL 2运行所必需的最新内核。
获取地点: 您可以从Microsoft官方文档页面找到下载链接,通常是:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
-
所需的Linux发行版包:
-
`.msixbundle`文件: 这是通过Microsoft Store分发的应用包格式。例如,Ubuntu、Debian等都提供此格式的离线包。
获取地点: 您可以通过第三方网站(如https://store.rg-adguard.net/,选择PackageFamilyName: CanonicalGroupLimited.Ubuntu_xxxxxx或您所需的发行版)生成Microsoft Store应用下载链接,然后下载相应的.msixbundle文件。
-
`.tar.gz`文件: 一些发行版或自定义WSL环境会提供这种格式的根文件系统压缩包。
获取地点: 某些发行版(如Alpine Linux)可能直接提供根文件系统tarball。您也可以通过现有的WSL实例使用`wsl –export`命令导出自己的WSL发行版为`.tar`文件,以供其他机器离线导入。
-
`.msixbundle`文件: 这是通过Microsoft Store分发的应用包格式。例如,Ubuntu、Debian等都提供此格式的离线包。
4. 对操作系统有什么要求?
进行WSL离线安装,您的Windows操作系统需要满足以下最低要求:
- WSL 1: Windows 10 版本 1607 或更高版本。
-
WSL 2:
- x64 系统:版本 1903 或更高版本,并安装了内部版本 18362 或更高版本。
- ARM64 系统:版本 2004 或更高版本,并安装了内部版本 19041 或更高版本。
- 启用虚拟化: 您的电脑BIOS/UEFI中需要启用CPU的虚拟化技术(如Intel VT-x或AMD-V)。这通常在BIOS/UEFI设置的“CPU配置”或“虚拟化技术”部分进行设置。
如何进行WSL离线安装?(详细步骤)
1. 离线文件准备(在有网络的机器上完成)
在您即将进行WSL离线安装的机器上(如果它有网络连接),或者在另一台有网络连接的机器上,下载所有必需的安装文件,并将它们传输到目标离线机器的某个本地目录(例如 `D:\WSL_Offline_Installer\`)。
1.1 下载WSL 2 Linux内核更新包
访问https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi 下载 `wsl_update_x64.msi` 文件。
1.2 下载Linux发行版离线包
根据您的需求选择下载`.msixbundle`或`.tar.gz`文件。
-
下载 `.msixbundle` 文件 (推荐,类似应用商店安装方式):
例如,下载Ubuntu。访问 https://store.rg-adguard.net/。
- 在搜索框中输入“
9P9QfPTQ0QWH
”(这是Ubuntu的PackageFamilyName,可以通过Microsoft Store应用链接解析得到),或者直接输入“Ubuntu”。
- 选择“ProductId”或“PackageFamilyName”作为筛选条件。
- 点击右侧的对勾按钮。
- 在生成的列表中,找到最新版本的`.msixbundle`文件(通常是最大的那个)。例如,类似 `CanonicalGroupLimited.Ubuntu_2004.2004.5.0_x64__79rhkq1p8nfxj.msixbundle` 的文件。点击下载。
- 对于其他发行版,如Debian,可以尝试搜索“Debian”或其对应的PackageFamilyName。
将下载的`.msixbundle`文件保存到与`wsl_update_x64.msi`相同的目录(例如 `D:\WSL_Offline_Installer\`)。
- 在搜索框中输入“
-
下载 `.tar.gz` 文件 (适用于自定义导入):
如果您需要导入一个自定义的Linux环境,或者某些发行版只提供rootfs的tarball,可以下载对应的`.tar.gz`文件。
例如,对于Alpine Linux,您可以从其官方网站找到根文件系统tarball的下载链接。
或者,如果您已经有一个运行中的WSL发行版,可以在线机器上使用以下命令导出:
wsl --export <DistroName> <FilePath\DistroName.tar>将导出的`.tar`文件(或`.tar.gz`文件)保存到离线安装目录。
2. 在离线机器上进行WSL安装
2.1 启用WSL核心功能
此步骤通常是使用Windows内置的DISM工具来启用,即便离线,只要Windows安装文件完整,也能成功。
以管理员身份运行 PowerShell 或 命令提示符,然后执行以下命令:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
第一条命令启用“虚拟机平台”组件,这是WSL 2运行所必需的。第二条命令启用“适用于Linux的Windows子系统”。
执行完这两条命令后,系统可能会提示您重启。请按照提示重启电脑。
2.2 安装WSL 2 Linux内核更新包
导航到您之前保存 `wsl_update_x64.msi` 文件的目录(例如 `D:\WSL_Offline_Installer\`)。
双击运行 `wsl_update_x64.msi` 文件,或者在 PowerShell 中执行:
Start-Process -FilePath "D:\WSL_Offline_Installer\wsl_update_x64.msi" -Wait
按照安装向导的提示完成安装。这通常是一个快速的过程。
2.3 设置WSL 2为默认版本
为了确保新安装的Linux发行版默认运行在WSL 2模式下(提供更好的性能),执行以下命令:
wsl --set-default-version 2
您可能会看到“WSL 2 requires an update to its kernel component.”的提示,但因为您已经离线安装了内核更新包,这个提示通常会消失。
2.4 离线安装Linux发行版
方法一:使用`.msixbundle`文件安装(推荐)
这种方法模拟了Microsoft Store的安装过程,但完全离线进行。
导航到您保存`.msixbundle`文件的目录(例如 `D:\WSL_Offline_Installer\`)。
以管理员身份运行 PowerShell,执行以下命令:
Add-AppxPackage -Path "D:\WSL_Offline_Installer\CanonicalGroupLimited.Ubuntu_2004.2004.5.0_x64__79rhkq1p8nfxj.msixbundle"
请将文件名替换为您实际下载的`.msixbundle`文件的完整路径和名称。
安装完成后,您就可以在开始菜单中找到并启动这个发行版了。
方法二:使用`.tar.gz`或`.tar`文件导入
这种方法适用于导入自定义的或直接提供的根文件系统压缩包。
首先,创建一个目录来存储您的Linux发行版数据。例如:`D:\WSL_Distros\Ubuntu2204\`
以管理员身份运行 PowerShell 或 命令提示符,执行以下命令导入:
wsl --import <DistroName> <InstallLocation> <TarFilePath> --version 2
参数说明:
- `<DistroName>`: 您想为这个WSL实例设置的名称,例如 `Ubuntu2204Offline`。
- `<InstallLocation>`: 这个WSL实例的安装路径,例如 `D:\WSL_Distros\Ubuntu2204\`。
- `<TarFilePath>`: 您下载的`.tar.gz`或`.tar`文件的完整路径,例如 `D:\WSL_Offline_Installer\ubuntu-base-22.04.tar.gz`。
- `–version 2`: (可选,但推荐) 指定导入的发行版默认使用WSL 2模式。
示例命令:
wsl --import UbuntuOffline D:\WSL_Distros\UbuntuOffline D:\WSL_Offline_Installer\ubuntu-base-22.04.tar.gz --version 2
导入完成后,您可以通过 `wsl -l -v` 命令查看已安装的发行版。
3. 首次启动与设置用户
无论是哪种安装方式,首次启动时,WSL都会提示您创建新的Unix用户账户及设置密码。
在开始菜单中找到您安装的Linux发行版,点击启动。
Installing, this may take a few minutes...
Please create a default UNIX user account.
Enter new UNIX username: <您的用户名>
Enter new UNIX password: <您的密码>
Retype new UNIX password: <再次输入密码>
输入您的用户名和密码后,即可开始使用WSL环境。
4. 管理已安装的WSL发行版
离线安装后,您依然可以使用WSL命令行工具来管理您的发行版:
- 查看所有已安装发行版:
wsl -l -v - 设置默认启动发行版:
wsl --set-default <DistroName> - 终止某个发行版:
wsl --terminate <DistroName> - 卸载发行版:
wsl --unregister <DistroName>此命令会删除与该发行版相关的所有数据。
常见问题与故障排除
1. WSL 2 requires an update to its kernel component.
这个错误通常意味着WSL 2运行所需的Linux内核没有正确安装或版本过旧。
- 解决方法: 确保您已经下载了最新版本的 `wsl_update_x64.msi` 并成功运行了它。您可以通过在PowerShell中运行 `wsl –version` 来检查WSL的版本信息。如果内核版本显示为0.0.0或非常低,则说明内核安装有问题。
2. Virtualization is not enabled in your BIOS/UEFI.
WSL 2依赖于硬件虚拟化技术。如果此技术在您的电脑BIOS/UEFI中未启用,WSL 2将无法运行。
- 解决方法: 重启电脑,进入BIOS/UEFI设置界面(通常在开机时按Del、F2、F10、F12等键)。在CPU配置或高级设置中找到“Intel VT-x”、“AMD-V”、“虚拟化技术”或类似选项,并将其设置为“Enabled”。保存设置并退出。
3. `Add-AppxPackage` 报错或安装失败。
这可能是由于下载的`.msixbundle`文件损坏,或者系统依赖项不满足。
-
解决方法:
- 重新下载`.msixbundle`文件,确保文件完整。
- 确保PowerShell是以管理员身份运行。
- 检查您的Windows版本是否满足WSL的要求。
- 如果错误信息提示依赖项问题,有时可能是Windows版本过旧或缺少某些系统更新。
4. `wsl –import` 导入后无法启动或启动失败。
这可能是因为导入的`.tar`文件有问题,或者权限设置不正确。
-
解决方法:
- 确保导入的`.tar`文件是有效的Linux根文件系统压缩包。
- 检查导入路径 `<InstallLocation>` 是否有足够的磁盘空间。
- 尝试不指定 `–version 2` 先导入,如果能启动,再使用 `wsl –set-version <DistroName> 2` 切换。
- 确保导入路径在NTFS文件系统上。
5. 离线安装后,如何在WSL内部进行更新?
离线安装后,您的Linux发行版内部的软件包管理系统(如apt、dnf、pacman)仍然需要互联网才能下载和安装更新。
-
解决方法: 如果目标机器依然没有网络,您将无法直接通过 `apt update` 等命令更新软件包。在这种情况下,您需要:
- 搭建本地镜像源: 在本地网络中搭建一个Debian/Ubuntu等发行版的软件包镜像源,并将WSL内部的 `/etc/apt/sources.list` 文件指向这个本地镜像。
- 手动下载deb包并安装: 在有网络的机器上下载所需的`.deb`包或`.rpm`包,然后传输到离线WSL环境中,使用 `dpkg -i` 或 `rpm -i` 命令手动安装。
- 重新导入更新后的发行版: 在有网络的机器上更新一个WSL发行版,然后使用 `wsl –export` 导出为新的`.tar`文件,再将其传输到离线机器进行 `wsl –import` 导入替换。
6. 磁盘空间需求如何?
WSL核心组件(包括内核)的安装包通常在几十MB到几百MB之间。
Linux发行版的离线包大小差异较大:
- 一个典型的Ubuntu `.msixbundle` 文件可能在300MB到600MB左右。
- 导入的`.tar.gz`文件大小取决于其包含的内容,一个基础的Alpine Linux可能只有几MB,而一个功能齐全的Ubuntu根文件系统可能几百MB到1GB以上。
安装完成后,WSL发行版在磁盘上的占用空间会更大,因为它会解压文件系统并随着您的使用(安装更多软件、产生日志等)而增长。通常,一个新安装的Ubuntu发行版可能占用2-4GB的磁盘空间。
因此,请确保您的目标磁盘分区至少有10GB或更多的可用空间,以满足WSL核心组件和至少一个Linux发行版的安装及未来使用需求。