手动安装 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:你为这个发行版指定的名称(可任意,如 Ubuntu18、MyOldUbuntu 等)。
  • 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
相关推荐
dingdingfish8 小时前
TLPI 第41章 读书笔记:Fundamentals of Shared Libraries
linux·static·link·dynamic·library·tlpi
mengge.cloud8 小时前
Redis
运维·服务器·数据库·redis·缓存·云计算
Smoothcloud润云8 小时前
GPU服务器租用实例DNS与HTTPS下载排障实战
大数据·运维·服务器·人工智能·https·gpu算力
Apipi*8 小时前
30天速通Linux 第五章Linux 进程管理
linux·运维·服务器
杨云龙UP8 小时前
PostgreSQL 四种常见部署模式快速理解:单实例、流复制、repmgr、Patroni
linux·运维·数据库·postgresql·流复制·高可用ha
白帽攻防录8 小时前
SRC 挖洞:TanStack Start 服务器函数 XSS 深度复盘,CVE-2026-102989 怎么窃取用户会话
运维·服务器·网络安全·xss
流浪0018 小时前
Linux系统篇46——线程(十一) 生产者消费者模型,三种关系和一个交易场所
linux·线程·并发·同步·互斥·阻塞队列·生产者消费者模型
资深电气设计9 小时前
ABB AFC/AF/AX系列接触器在数据中心液冷机组中的负载适配技术
运维·物联网·创业创新·业界资讯
坐看风云变幻9 小时前
Betaflight 开发环境搭建保姆级教程(Ubuntu / Windows+WSL / Docker 三方案 + 官方网址大全)
windows·ubuntu·docker·无人机·飞控·betaflight
.冰块.9 小时前
MySQL下篇 运维实战:备份恢复 + 主从复制 + MHA 高可用,含完整拓扑
运维·mysql·读写分离·高可用·主从复制·mha