手动安装 Ubuntu 18.04 到 WSL(即使官方列表里没有它)

手动安装 Ubuntu 18.04 到 WSL(即使官方列表里没有它)

1. 引言

当你在 PowerShell 中运行 wsl --list --online 时,可能会发现 Ubuntu 18.04 已不在列表中。这是因为 Ubuntu 18.04(Bionic Beaver)的标准支持已于 2023 年 5 月结束,微软因此将其移出了默认的在线安装源。然而,许多开发者和运维人员因为旧项目兼容性或特定环境需求,仍需要继续使用 Ubuntu 18.04。本文将详细介绍如何通过手动导入 rootfs 的方式,在 WSL 中安装 Ubuntu 18.04,并完成基础配置。

2. 前提条件

在开始之前,请确保你的 Windows 系统满足以下要求:

  • Windows 10 版本 2004 及以上(内部版本 19041 及以上)或 Windows 11。
  • WSL 功能已启用,且已设置为 WSL 2 版本。
    • 如果尚未启用,请以管理员身份打开 PowerShell,执行:

      复制代码
      dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
      dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

      然后重启计算机。

    • 将 WSL 2 设为默认版本:

      复制代码
      wsl --set-default-version 2

3. 下载 Ubuntu 18.04 的根文件系统(rootfs)

Ubuntu 官方提供旧版本的基础系统镜像,我们需要下载 Ubuntu 18.04 的 rootfs 压缩包。

将下载的文件保存到一个你方便的位置,例如 E:\wsl\ubuntu-base-18.04.5-base-amd64.tar.gz

4. 将 rootfs 导入为 WSL 发行版

打开 PowerShell,使用 wsl --import 命令将下载的 rootfs 压缩包导入为 WSL 的发行版。此命令允许你自定义发行版的名称和安装位置。

示例命令(假设你希望将发行版命名为 Ubuntu1804,安装到 E:\WSL\Ubuntu-18.04,且 rootfs 文件位于 E:\wsl\ubuntu-base-18.04.5-base-amd64.tar.gz):

复制代码
wsl --import Ubuntu1804 E:\WSL\Ubuntu-18.04 E:\wsl\ubuntu-base-18.04.5-base-amd64.tar.gz --version 2

参数说明:

  • Ubuntu1804:你为这个发行版指定的名称(可任意,如 Ubuntu18MyOldUbuntu 等)。
  • E:\WSL\Ubuntu-18.04:你希望系统文件存放的目录路径(如果目录不存在,命令会自动创建)。
  • E:\wsl\ubuntu-base-18.04.5-base-amd64.tar.gz:下载的 rootfs 文件的完整路径。
  • --version 2:指定使用 WSL 2(推荐,性能优于 WSL 1)。

等待命令执行完毕(通常只需几秒钟),你的 Ubuntu 18.04 就已成功安装在指定位置。

5. 创建普通用户并设为默认登录用户

通过 --import 安装的发行版默认以 root 用户登录。从安全和使用习惯考虑,我们应该创建一个普通用户,并设置为默认登录用户。

5.1 以 root 身份启动系统

复制代码
wsl -d Ubuntu1804 -u root

进入 root 的 shell 环境。

5.2 更新包管理器并安装 sudo

复制代码
apt update
apt install sudo -y

5.3 创建新用户(例如 ubuntu

复制代码
useradd -m -s /bin/bash ubuntu
passwd ubuntu   # 按照提示设置用户密码
usermod -aG sudo ubuntu   # 将用户加入 sudo 组

5.4 配置默认登录用户

创建或编辑 /etc/wsl.conf 文件,添加以下内容:

复制代码
[user]
default=ubuntu

如果你熟悉命令行,可以直接执行:

复制代码
echo -e "[user]\ndefault=ubuntu" >> /etc/wsl.conf

(如果文件已存在,请手动编辑添加上述内容)

5.5 退出并重启 WSL

复制代码
exit   # 退出 WSL 回到 PowerShell
# 重启 WSL 以应用配置
wsl --shutdown
wsl -d Ubuntu1804

现在你应该会自动以 ubuntu 用户登录。

6. 修复软件源(解决 EOL 后的归档问题)

由于 Ubuntu 18.04 已结束标准支持,其官方软件包仓库已迁移至 old-releases.ubuntu.com。如果不修改软件源,apt update 将会失败。

在 WSL 中执行以下命令替换源:

复制代码
# sudo sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list

# 安装根证书
apt-get install ca-certificates -y

# 设置清华源
cat > /etc/apt/sources.list <<'EOF'
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# 无外网访问不到
# deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse
EOF

然后更新软件源:

复制代码
sudo apt update

此后即可正常安装软件包。

7. 验证安装并更新系统

检查 Ubuntu 版本信息:

复制代码
lsb_release -a

预期输出类似:

复制代码
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:        18.04
Codename:       bionic

建议进行一次完整的系统升级:

复制代码
sudo apt upgrade -y

8. 常见问题解答

Q1: 执行 wsl --import 时提示"系统找不到指定的路径"?

A: 请检查 rootfs 文件的路径是否正确,路径中是否包含空格或特殊字符。建议将路径用双引号括起来,例如 "E:\wsl\my file.tar.gz"

Q2: 导入后运行 wsl -d Ubuntu1804 卡住或闪退?

A: 可能是下载的 rootfs 文件损坏或架构不匹配。请重新下载,并确认选择的是 amd64 版本(适用于 Intel/AMD 64 位 CPU)。

Q3: 如何卸载这个手动安装的发行版?

A: 使用命令 wsl --unregister Ubuntu1804 即可注销并删除该发行版的所有文件。

Q4: 为什么必须使用 rootfs 而不是直接 wsl --install

A: 因为官方在线源已不再提供 Ubuntu 18.04,所以只能通过离线方式(如 rootfs)安装。rootfs 是 Linux 系统的最小根文件系统,非常适合这种场景。

9. 备注

通过手动导入 rootfs 的方法,你可以绕过官方在线列表的限制,在 WSL 中运行任何自己需要的 Linux 发行版或特定版本。本文以 Ubuntu 18.04 为例,完整演示了从下载、导入、用户配置到源修复的全过程。即使未来其他版本进入 EOL 阶段,你依然可以用同样的方法继续使用它们。


附:常用 WSL 命令速查

  • 列出所有已安装的发行版及状态:wsl --list --verbose
  • 设置默认发行版:wsl --set-default <发行版名>
  • 终止所有 WSL 实例:wsl --shutdown
  • 导出现有发行版为 tar 文件:wsl --export <发行版名> <文件名.tar>
  • 从 tar 文件导入新发行版:wsl --import <新发行版名> <安装目录> <文件名.tar> --version 2
相关推荐
陈皮糖..1 小时前
docker-compose实验案例之基于docker容器化部署下 Flask+Redis 访问计数功能的实现与调优
linux·运维·redis·docker·微服务·flask·云计算
维度攻城狮2 小时前
TrendRadar:搭建新闻热搜自动化推送工具,打破信息差
运维·自动化·trendradar
坚持就完事了2 小时前
Linux的用户
linux·运维·服务器
●VON2 小时前
2G 内存云服务器部署 Spring Boot + MySQL 实战:从踩坑到上线
服务器·开发语言·spring boot·mysql·ui·von
liulilittle2 小时前
Ubuntu 系统 libc6-dev 依赖冲突解决
linux·运维·服务器·ubuntu·shell
Wenhao.2 小时前
Docker 安装 Qdrant
运维·docker·容器
liulilittle2 小时前
Debian/Ubuntu 18.04 上安装 GLIBC 2.28 (2026)
linux·运维·服务器·开发语言·c++·ubuntu·debian
MMendex2 小时前
华为云项目实战day1
linux·服务器·nginx·华为云·ssh·负载均衡
不知名。。。。。。。。2 小时前
仿muduo库实现高并发服务器----通信链接管理Connection
运维·服务器·网络