认识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`文件,以供其他机器离线导入。

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/

    1. 在搜索框中输入“
      9P9QfPTQ0QWH

      ”(这是Ubuntu的PackageFamilyName,可以通过Microsoft Store应用链接解析得到),或者直接输入“Ubuntu”。

    2. 选择“ProductId”或“PackageFamilyName”作为筛选条件。
    3. 点击右侧的对勾按钮。
    4. 在生成的列表中,找到最新版本的`.msixbundle`文件(通常是最大的那个)。例如,类似 `CanonicalGroupLimited.Ubuntu_2004.2004.5.0_x64__79rhkq1p8nfxj.msixbundle` 的文件。点击下载。
    5. 对于其他发行版,如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发行版的安装及未来使用需求。

wsl离线安装