RHEL 9 在 WSL2 中的手动安装笔记
一、环境概述
| 项目 | 说明 |
|---|---|
| 宿主机 | Windows 11 + WSL2 |
| 目标系统 | Red Hat Enterprise Linux 9 |
| 安装方式 | 官方 WSL2 rootfs → WSL2 导入 → 注册订阅 |
| 存储路径 | E:\WSL\RHEL9 |
注意:Microsoft Store 未提供官方 RHEL 发行版,需手动导入 rootfs。本方案使用 Red Hat 官方 WSL2 tarball,导入后通过
subscription-manager注册为完整 RHEL 9 系统,包含 firewalld / fail2ban 等所有标准包。
二、前置条件
- WSL2 已启用
- Red Hat 开发者账号(免费):访问 developers.redhat.com 注册
- RHEL WSL2 根文件系统:下载官方 WSL2 tarball(标准 RHEL):
下载后保存到本地,例如https://developers.redhat.com/content-gateway/file/rhel/Red_Hat_Enterprise_Linux_9.5/rhel-9.5-x86_64-wsl2.tar.gzE:\WSL-Backup\rhel-9.5-x86_64-wsl2.tar.gz(路径根据实际情况调整)此包是标准 RHEL,含 firewalld / fail2ban 等所有标准包。
三、获取 RootFS
下载官方标准 rootfs(见第二章下载地址),此为标准 RHEL 9 WSL2 rootfs,可直接导入。
文件迁移:若需将文件移动到其他磁盘(如 E 盘),直接在 Windows 资源管理器中剪切/粘贴即可,后续导入命令指定新路径。
四、导入 WSL2
在 Windows PowerShell 中执行。将 E:\WSL-Backup\rhel-9.5-x86_64-wsl2.tar.gz 替换为你的实际下载路径。
# 创建存储目录
mkdir E:\WSL\RHEL9
# 导入为 WSL2 发行版(使用官方标准 rootfs)
wsl --import RHEL9 E:\WSL\RHEL9 <下载文件路径>\rhel-9.5-x86_64-wsl2.tar.gz --version 2
# 验证
wsl -l -v
预期输出:
NAME STATE VERSION
* Ubuntu-24.04 Running 2
RHEL9 Stopped 2
五、注册 Red Hat 订阅
进入 RHEL 9 WSL 环境:
wsl -d RHEL9
5.1 注册系统
使用 Red Hat 开发者账号(不是 Registry Service Account)进行注册:
subscription-manager register --username YOUR_REDHAT_USERNAME --password 'YOUR_REDHAT_PASSWORD'
注意:
- 请将
YOUR_REDHAT_USERNAME和YOUR_REDHAT_PASSWORD替换为你在 developers.redhat.com 注册的开发者账号信息。- 若密码包含特殊字符(如
!、&、*、$),必须使用单引号包裹,否则 Bash 会将其解析为历史扩展或通配符。- 出于安全考虑,不要将真实账号写入文档、截图或代码仓库;建议使用环境变量或交互式输入:
read -rs REDHAT_PASSWORD && \ subscription-manager register --username "$REDHAT_USERNAME" --password "$REDHAT_PASSWORD"
注册成功标志:
The system has been registered with ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
The registered system name is: xxxxxxx
5.2 刷新并验证
# 刷新订阅数据
subscription-manager refresh
# 查看状态
subscription-manager status
预期输出:
+-------------------------------------------+
System Status Details
+-------------------------------------------+
Overall Status: Registered
Content Access Mode is set to Simple Content Access. This host has access to content, regardless of subscription status.
5.3 验证仓库可用
dnf repolist
预期输出:
repo id repo name
rhel-9-for-x86_64-appstream-rpms Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)
rhel-9-for-x86_64-baseos-rpms Red Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs)
5.4 系统更新
dnf update -y
5.5 安装基础工具(可选)
标准 RHEL 9 WSL 镜像已含基础工具,如需补充:
dnf install -y sudo vim wget curl net-tools bash-completion
六、配置用户与 systemd
6.1 创建普通用户
# 创建用户并加入 wheel 组(替换 yourname)
useradd -m -G wheel yourname
passwd yourname
6.2 修改主机名(可选)
WSL2 中改主机名有别于普通 Linux:直接改 /etc/hostname 重启后会失效(WSL 启动时会重写)。持久化做法是写到 wsl.conf 的 [network] hostname 项(在 6.4 配置 wsl.conf 时一起设置即可,无需单独再写一次文件)。
验证:
hostname # 应输出 wsl.conf 中配置的主机名
hostname -f # 应输出同名(短主机名)
cat /etc/hostname # 应输出同名
几个易混点:
hostnamectl set-hostname xxx在 WSL2 systemd 下能立即生效,但下次wsl --shutdown重启后会被 WSL 重置,不持久。wsl.conf里的hostname才是持久化来源。wsl --rename RHEL9 xxx改的是 Windows 侧的发行版名(wsl -l看到的名字),跟 Linux 内部的主机名是两件事。- 若只想临时改一下当前会话主机名:
sudo hostname xxx,重启即失效。
6.3 配置 sudo 免密(可选)
echo "yourname ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/yourname
chmod 440 /etc/sudoers.d/yourname
6.4 配置 wsl.conf
sudo tee /etc/wsl.conf > /dev/null << 'EOF'
[user]
default = yourname
[boot]
systemd = true
[interop]
enabled = true
appendWindowsPath = true
[network]
# 主机名:不改注释掉这一行即可(默认随机主机名)
hostname = rhel9-dev
generateHosts = true
generateResolvConf = true
EOF
各段作用:
| 段 | 关键项 | 作用 |
|---|---|---|
[user] |
default = yourname |
默认登录用户,避免每次 wsl -d RHEL9 都进 root |
[boot] |
systemd = true |
启用 systemd,让 RHEL 内的服务能用 systemctl 管理 |
[interop] |
enabled / appendWindowsPath |
允许 Linux 调 Windows 可执行文件;将 Windows PATH 追加到 Linux |
[network] |
hostname / generateHosts / generateResolvConf |
持久化主机名;自动维护 /etc/hosts 与 /etc/resolv.conf |
6.5 重启生效
exit
在 PowerShell 中:
# 关闭当前实例并完全重启(改 wsl.conf 后必须用 --shutdown,--terminate 不会重读配置)
wsl --shutdown
wsl -d RHEL9
重启后默认以 yourname 用户进入。
6.6 验证 systemd 已生效
# PID 1 必须是 systemd,输出 "systemd" 才算启用成功
ps -p 1 -o comm=
# 查看 systemd 版本
systemctl --version
# 列出运行级别下的服务(应能看到 firewalld / sshd 等标准服务)
systemctl list-units --type=service --state=running
如果
ps -p 1 -o comm=输出的是init而非systemd,说明 systemd 未生效。常见原因:WSL 版本过旧(需 Windows 11 22H2+,或手动将 WSL 内核升到 5.15+);或改完wsl.conf后只wsl --terminate没wsl --shutdown。
6.7 systemd 下管理服务(可选)
systemd 启用后,RHEL 内的服务可像普通 Linux 一样用 systemctl 托管。以自定义服务 myapp.service 为例:
sudo tee /etc/systemd/system/myapp.service > /dev/null << 'EOF'
[Unit]
Description=MyApp
After=network.target
[Service]
Type=simple
User=yourname
WorkingDirectory=/home/yourname/myapp
ExecStart=/home/yourname/myapp/run.sh
Restart=on-failure
RestartSec=10
TimeoutStopSec=30
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp --no-pager
Type=simple适用于前台常驻进程;若进程会 fork 后台(如 Tomcat),改用Type=forking并补PIDFile=,避免 systemd 误判启动失败。
七、验证安装
# 查看系统版本
cat /etc/os-release
# 验证 systemd(详见 6.6)
systemctl --version
ps -p 1 -o comm=
# 查看当前用户
whoami
# 测试 sudo
sudo dnf repolist
八、常见问题
8.1 为什么不用 registry.redhat.io/rhel9 直接拉取?
Red Hat 容器仓库 (registry.redhat.io) 需要订阅权限同步到 Service Account,新注册开发者账号或新建 Service Account 后,权限下发到容器仓库可能有延迟(15 分钟至数小时),且对个人开发者而言流程繁琐。使用官方 WSL2 tarball + WSL 内 subscription-manager 注册是更可靠的路线。
8.2 syspurpose / subscription-manager 报错需要处理吗?
注册时 subscription-manager 可能会有 syspurpose 相关 warning,不影响使用。SCA(Simple Content Access)模式下,注册成功后自动获得内容权限。如遇仓库报错,先 subscription-manager refresh 再重试。
8.3 订阅过期怎么办?
Red Hat 开发者订阅每年需手动续期。到期前登录 developers.redhat.com 重新激活即可。过期后 dnf 会报错,续期后执行:
subscription-manager refresh
九、常用管理命令
| 操作 | 命令 |
|---|---|
| 启动 RHEL9 | wsl -d RHEL9 |
| 设为默认发行版 | wsl --set-default RHEL9 |
| 关闭 RHEL9 | wsl --terminate RHEL9 |
| 查看所有发行版 | wsl -l -v |
| 完全卸载(数据清空) | wsl --unregister RHEL9 |
| 查看注册状态 | subscription-manager status |
| 刷新订阅 | subscription-manager refresh |

浙公网安备 33010602011771号