ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

WSL 2 安装 Rocky Linux 完整指南:从 rootfs 到静态 IP 配置

WSL 2 安装 Rocky Linux 完整指南:从 rootfs 到静态 IP 配置 我见过很多人问 Windows 上能不能用 Red Hat 系的发行版答案当然是可以的而且不需要装虚拟机。WSL 作为 Windows 官方的子系统方案跟 Rocky Linux 组合起来既保留了 Windows 日常办公的便利又能拥有一套和服务器生产环境几乎一致的 Linux 工作台。这篇博文会从 WSL 的版本选择开始完整记录我在 WSL 上安装 Rocky Linux 的过程包括 rootfs 获取、首次初始化、静态 IP 配置、CUDA 与 LibreOffice 安装以及最后整理出来的常见报错排查清单。适合想用 Windows 做 Linux 开发、又不想忍受虚拟机性能损耗的朋友也适合需要在本地重现服务器差异环境的运维同学。用了 Rocky Linux 一段时间后我最明显的感受是WSL 里的体验其实很接近一台轻量云主机只是网络和文件系统这些边界需要额外处理。与其在网上零散地搜“wsl安装步骤”“rocky linux设置静态ip”这些词不如一次性把完整流程理清楚。下面直接开工。1. 安装前的思路与版本选型1.1 为什么用 WSL 而不是虚拟机很多人听到“安装 Rocky Linux”第一反应是用 VMware 或 VirtualBox 跑一个虚拟机。但如果你主要工作还在 Windows 上只是偶尔需要敲 Linux 命令、跑脚本、编译程序那虚拟机就太重了。虚拟机每次启动都要等完整的 BIOS、内核、服务管理内存占用也高WSL 2 则是基于轻量级虚拟机技术启动只需要一两秒文件系统和网络访问都做得更贴近本机。WSL 有 WSL 1 和 WSL 2 两条技术路线。WSL 1 是系统调用翻译层兼容性一般很多依赖完整内核的功能跑不了。WSL 2 是一个真正的轻量虚拟机内部跑完整 Linux 内核兼容性更接近原生环境。现在 Windows 10 和 Windows 11 都默认推荐 WSL 2所以这篇文章里的所有步骤都按 WSL 2 来写。如果你的系统还在用 WSL 1建议先升级到 WSL 2后面遇到的问题会少很多。1.2 选 Rocky Linux 版本和架构Rocky Linux 是 CentOS 停止维护后很受关注的 RHEL 兼容发行版。对服务器开发和运维来说Rocky Linux 意味着和 RHEL 相同的包管理方式、相同的目录规范以及更长的支持周期。WSL 里的 Rocky Linux 可以选 9.x 系列也可以选 8.x 系列。9.x 是当前主推的大版本更新更积极如果是为了兼容旧环境8.x 也还行。一般新项目我建议直接用 9.xdnf 的软件源和模块化流module stream都处理得比较干净。另外要注意架构绝大多数 Windows 电脑是 x86_64下载 rootfs 或容器镜像时不要选成 aarch64。1.3 安装前需要确认的 Windows 环境安装 WSL 之前要确认 Windows 版本。Windows 10 2004 以上或者 Windows 11 都可以Windows 10 建议把系统更新装到位否则某些 WSL 2 功能会报错。还需要确保 BIOS 里已经开启虚拟化支持任务管理器里的“性能”页可以看到“虚拟化”是否开启。如果没有开启需要进 BIOS 打开 Intel VT-x 或 AMD-V不然 WSL 2 会直接启动失败。确认完这些之后第一步永远是先安装 WSL 本体再谈 Rocky Linux 导入。2. 准备工作与安装 WSL 本体2.1 开启 Windows 虚拟机平台功能WSL 2 依赖 Windows 的虚拟机平台组件所以第一步是用管理员权限打开 PowerShell执行下面两条命令分别开启“适用于 Linux 的 Windows 子系统”和“虚拟机平台”dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完成之后系统会提示重启。一定要重启不要跳过。很多朋友后面遇到“WSL 2 需要更新组件”的报错都是因为虚拟机平台功能没有真正生效。顺便说一句Windows 11 上可以用一行命令直接完成安装wsl --install这条命令会默认启用所有需要的组件再安装一个默认的 Ubuntu 发行版。如果你不想默认装 Ubuntu可以在安装前先指定发行版或者装完再删掉。不过就算装了 Ubuntu 也没关系后面导入 Rocky Linux 不会跟它冲突。2.2 更新 WSL 并设置默认版本无论用哪种方式开启功能重启后最好手动更新一次 WSL 内核和工具链wsl --update wsl --set-default-version 2wsl --update会从微软服务器拉取最新的 WSL 组件。如果在国内网络环境或者公司内网环境下下载很慢可以不用死等微软也有离线安装包下面会专门讲。设置默认版本为 2 特别重要。如果不设置之后你手动导入一个发行版时可能默认跑在 WSL 1 模式下Rocky Linux 的 systemd 和一些网络功能都会出现奇怪问题。2.3 离线安装 WSL 的备选方案经常有人反馈“wsl --install太慢”或者“wsl --update下载很慢”。这种情况我一般会直接换离线安装包。WSL 2 的完整离线安装包括三个部分开启功能前面已经讲过、安装 WSL 内核 MSI 更新包、设置默认版本。微软官方提供了内核安装包下载下来直接双击安装。安装包里自带最新的 WSL 2 Linux 内核装完再执行wsl --set-default-version 2离线包的好处是不依赖 PowerShell 在线下载组件的速度安装一次之后后续用wsl --update检查更新也会顺畅很多。如果装完仍然提示找不到内核重启电脑大概率能解决。3. 在 WSL 中安装 Rocky Linux 的完整步骤3.1 获取 Rocky Linux 的 rootfs 文件微软商店里没有 Rocky Linux 的直接选项所以我们需要用wsl --import命令手动导入。导入的前提是准备一个 rootfs 文件也就是 Rocky Linux 根文件系统的压缩包。最稳的获取方式是用容器镜像导出。前提是你本机已经装了 Docker Desktop或者有一个临时能用的 Linux 环境。我推荐用 Docker 的原因是导出的 tar 包结构很标准不会被 WSL 拒绝。步骤很简单docker pull rockylinux:9 docker create --name rocky-temp rockylinux:9 docker export rocky-temp -o rockylinux-rootfs.tar执行完这三条命令当前目录下就会多出一个rockylinux-rootfs.tar。这个文件就是纯净的文件系统快照WSL 可以直接导入。如果你不想依赖 Docker也可以直接从 Rocky Linux 官方镜像站下载 rootfs 归档。部分镜像站会有对应的“rootfs”或“container base”文件名称里通常带rootfs.tar.xz。下载后先解压出纯文件系统目录再打包成 WSL 能识别的 tar 格式。这个方法需要判断文件结构新手容易踩坑所以我个人还是建议能用 Docker 就用 Docker。3.2 用 wsl --import 导入 Rocky Linux假设你已经拿到了rockylinux-rootfs.tar下面开始正式导入。先在 Windows 上建一个专门存放发行版虚拟磁盘的目录比如mkdir D:\WSL\RockyLinux然后执行wsl --import RockyLinux D:\WSL\RockyLinux C:\path\to\rockylinux-rootfs.tar --version 2这里我拆开解释一下各个参数RockyLinux是发行版的名称你叫它rocky9或rl9都行后面用wsl -d RockyLinux进入。D:\WSL\RockyLinux是虚拟磁盘文件的存放目录WSL 会在这里生成一个 ext4.vhdx 文件。C:\path\to\rockylinux-rootfs.tar是你 rootfs 文件的绝对路径。--version 2表示强制使用 WSL 2。导入过程一般几十秒到几分钟取决于磁盘速度。看到“正在进行转换”或者“导入完成”提示后执行wsl -d RockyLinux这时候你应该能进入一个 root shell提示符类似[roothostname /]#恭喜Rocky Linux 已经跑起来了。3.3 首次启动后的必要初始化刚导入的 rootfs 非常干净没有普通用户、没有设置密码、没有配置软件源很多基础工具也没装。我习惯按下面顺序初始化先设置 root 密码passwd然后创建日常使用的普通用户useradd -m -G wheel dev passwd dev把用户加入wheel组之后用sudo提权很方便。默认的sudoers文件里wheel组已经有 sudo 权限不用额外改。再更新软件源和系统包dnf update -y dnf install -y sudo vim wget curl tar如果系统默认没有启用sudo命令上面创建用户那步会执行失败所以要优先确认能否用dnf install sudo安装。另外我建议顺手把systemd开起来因为 WSL 默认可能没有 PID 1 进程dnf install -y systemd然后在/etc/wsl.conf里写入[boot] systemdtrue之后在 Windows 的 PowerShell 里执行wsl --shutdown再重新进入 Rocky Linux服务管理功能就正常了。没有 systemd 的话很多安装包里的服务脚本会找不到systemctl所以这一步尤其重要。3.4 配置普通用户为默认登录用户每次都先进入 root 再切换用户确实麻烦。WSL 可以通过配置文件指定默认用户。在 Rocky Linux 里编辑/etc/wsl.conf追加[user] defaultdev保存后执行wsl --shutdown重新进入 Rocky Linux就直接是dev用户了。如果哪天想切回 root可以在 PowerShell 执行wsl -d RockyLinux -u root这个参数很重要忘记 root 密码时可以救急。4. 关键实操静态 IP 与网络配置4.1 WSL 2 的 NAT 网络模型是怎么回事WSL 2 默认走 NAT 网络模式。每次启动Windows 会分配一个内部虚拟网卡Rocky Linux 里的 IP 大概率是172.x.x.x而且每次重启都可能变化。很多人搜“rocky linux设置静态ip”就是想知道能不能把 WSL 里的 IP 固定下来。先说结论在 WSL 2 的默认 NAT 模式下直接在 Linux 里改 IP 是没用的。因为 WSL 初始化时会动态创建虚拟网卡Linux 内部的网络配置文件无法跨越宿主机这层 NAT。真想固定 IP要么用端口转发要么用新版 WSL 的 mirrored 模式。4.2 方案一Windows 宿主机端口转发如果你只是希望 Windows 上的程序能稳定访问 Rocky Linux 的服务最简单的方法是做端口转发。比如 Rocky Linux 里跑了 SSH 或 8080 端口的服务通过 Windows 的netsh interface portproxy把宿主机的某个端口映射到发行版的动态 IP 上。具体操作是在 Rocky Linux 里查看当前 IPip addr show eth0假设拿到172.20.10.5然后在 Windows 管理员 PowerShell 中执行netsh interface portproxy add v4tov4 listenaddress127.0.0.1 listenport2222 connectaddress172.20.10.5 connectport22这样访问127.0.0.1:2222就相当于访问 Rocky Linux 的 22 端口。问题是 IP 一变就要重新设置所以最好把步骤写成一个 Windows 启动脚本每次都重新读取 WSL IP再重新映射。这种方式适合只固定少量端口不适合固定全部网络流量。4.3 方案二Windows 11 的 mirrored 镜像网络Windows 11 22H2 以上的 WSL 版本支持一种叫 mirrored 的网络模式。开启后WSL 里的 Linux 网络会直接使用宿主机的 IP 和网络接口相当于共享一块网卡不再有独立的 NAT IP。在 Windows 用户目录下创建或编辑.wslconfig文件[wsl2] networkingModemirrored然后在 Rocky Linux 里编辑/etc/wsl.conf[network] generateResolvConf true最后执行wsl --shutdown重新启动。启动后你在 Rocky Linux 里执行ip addr会看到 IP 已经变成和 Windows 宿主机一样的地址。这样就不存在“动态 IP”问题了SSH、Web 服务、数据库端口都直接监听在宿主机网络上调试体验接近一台物理机。如果用了 mirrored 模式后 DNS 解析异常可以检查/etc/resolv.conf。WSL 会动态生成一般没问题遇到问题就手动指定一个公共 DNS 服务器或者把generateResolvConf改为false再手动写nameserver 223.5.5.54.4 DNS 和代理的注意事项无论哪种网络模式DNS 都是最容易出问题的地方。WSL 会自动覆盖/etc/resolv.conf如果你手动改过下次启动就会被重置。养成在/etc/wsl.conf里管理 DNS 的习惯会更好。还有一类情况是公司内网需要走代理。WSL 2 访问宿主机可以通过172.x.x.x或宿主机的真实 IP但每次 IP 会变所以代理地址最好不要写死。mirrored 模式下直接访问127.0.0.1就能访问宿主机代理方便很多。另外如果你在 Rocky Linux 里用dnf或curl访问外网时卡住先别怀疑软件源先检查 DNS。ping不通就试curl -v看解析过程大概率是 DNS 被重置成一张不可达的地址了。5. 安装 CUDA、LibreOffice 等常用后续任务5.1 在 WSL Rocky Linux 中安装 CUDA很多人想在 Windows 上用 Linux 跑深度学习于是会搜“wsl安装cuda”。WSL 2 对 NVIDIA GPU 的支持已经比较成熟但有一个关键点Windows 侧必须安装 NVIDIA 显卡驱动Linux 侧不需要也不要安装 NVIDIA 驱动只需要安装 CUDA Toolkit。Rocky Linux 下可以用 dnf 安装 CUDA Toolkit也可以通过 NVIDIA 官方仓库安装。以 CUDA 12.x 为例大致步骤是先添加 NVIDIA 的官方 dnf 仓库然后执行sudo dnf module install nvidia-driver:latest-dkms sudo dnf install cuda-toolkit注意很多教程会让你安装完整cuda包它会自动尝试处理驱动组件在 WSL 里反而容易出问题。稳妥的做法是在 WSL 里只装cuda-toolkit然后跑一个nvidia-smi验证。如果 Windows 驱动已经装好WSL 里执行nvidia-smi能直接看到 GPU 信息说明环境已经通了一半。装完记得把 CUDA 的可执行路径加到环境变量export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH想持久化就写到/etc/profile.d/cuda.sh。5.2 安装 LibreOffice 的 RPM 方式关于“rocky linux安装libreoffice_7.4.7.2_linux_x86-64_rpm”这个描述其实对应的是从 LibreOffice 官网下载 RPM 包手动安装的场景。官网会提供一个多 RPM 包压缩包解压后进入 RPMS 目录执行sudo dnf install *.rpm注意一定不要用rpm -ivh *.rpm硬装。LibreOffice 的 RPM 包之间有依赖关系直接用 rpm 命令会疯狂报缺依赖最后还是得靠 dnf 解决。用dnf install *.rpm后dnf 会解析依赖、拉取仓库补全缺失的库文件更省心。如果只是想用一个办公套件大多数时候不需要下载官网包直接sudo dnf install libreofficeRocky Linux 官方仓库和 EPEL 仓库里都有完整的 LibreOffice 包。只有在需要特定版本或特定编译选项时才建议走官网 RPM 方式。选官网包时还要注意架构x86_64 的 RPM 包不能装到 aarch64 环境。5.3 在 Rocky Linux 里使用 Visual Studio Code 的 WSL 远程模式WSL 最大的好处是能和 Windows 侧的 VS Code 无缝配合。在 Windows 上安装 VS Code 和 “WSL” 扩展后终端里进入 Rocky Linux 目录直接运行code .VS Code 会自动启动 WSL 服务器并在 Windows 窗口里打开一个远程开发环境。插件和终端都在 Rocky Linux 内部运行这意味着你可以直接使用dnf安装的编译工具、调试器而不需要再装一套 Windows 版。Pycharm 连接 WSL 也是同理在解释器设置里选择 WSL然后指定 Rocky Linux 内的 Python 路径即可。这类操作的本质是让 IDE 通过 SSH 或内置 WSL API 连到发行版里网络模式是否镜像不影响基础功能。5.4 在 WSL 里跑 Docker、QEMU 等虚拟化工具Rocky Linux 里也可以安装 Docker。直接在发行版内用dnf install docker-ce或者使用 Docker Desktop 的 WSL 后端。如果你希望在 WSL 里再跑虚拟机比如 QEMU需要确认嵌套虚拟化已开启。Windows 10 的 WSL 2 支持嵌套虚拟化但性能会打折扣建议只做轻量实验。这些都属于“能跑但不一定常用”的场景。真要在 WSL 里做虚拟化我建议先检查内存和磁盘配额WSL 默认最高可能分配主机一半内存容易把 Windows 卡顿。6. 常见问题与排查实录6.1 wsl --install 或 wsl --update 很慢问题表现执行wsl --install或wsl --update时卡在下载阶段进度条半天不动。我的排查思路是先判断是不是网络链路慢换成离线安装包再检查 Windows 的 DNS 设置部分网络下微软的更新域名解析异常会导致下载速度接近 0。如果公司网络有限制可以尝试手动下载 WSL 内核 MSI然后安装绕开在线更新组件的过程。如果wsl --install中途报 403 或者无法连接不要反复重试先手动开启两个 Windows 功能前面提过的命令重启后再用wsl --update补内核。6.2 WSL 报错 error_file_not_found错误代码类似wsl/service/createinstance/createvm/hcs/error_file_not_found这个报错很典型一般是 WSL 2 的内核文件缺失或者 Windows 的虚拟化组件异常。我先执行一次wsl --update再执行wsl --shutdown通常能解决。如果还是不行就去“启用或关闭 Windows 功能”里把“虚拟机平台”和“适用于 Linux 的 Windows 子系统”都取消勾选重启后再重新勾选。这一步会重置组件状态有奇效。6.3 WSL 删除文件后空间没释放WSL 2 使用 ext4.vhdx 虚拟磁盘文件被删除后虚拟磁盘的大小不会自动收缩。如果你在 Rocky Linux 里删了好几个 GB 的文件Windows 的磁盘空间却一直没有回升这是正常现象。新版 WSL 提供了压缩命令wsl --manage RockyLinux --compact执行前先wsl --shutdown确保发行版没有运行。如果版本较老没有--manage参数可以用 diskpart 手动压缩 VHDXdiskpart打开 diskpart 后依次执行select vdisk fileD:\WSL\RockyLinux\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk这个方法能释放很大空间操作前建议备份重要数据。虽然 VHDX 结构比较稳定但压缩期间强制断电仍然有损坏风险。6.4 如何卸载干净 WSL 发行版如果你装了 Rocky Linux 之后不想要了删除要分成两步。先从 WSL 注册表里注销wsl --unregister RockyLinux这个命令会移除发行版相关信息同时删除对应的 ext4.vhdx 文件。但用户目录下可能还留有 WSL 配置文件比如.wslconfig、/etc/wsl.conf等如果有洁癖可以手动清理。想彻底卸载 WSL 本体还需要在“启用或关闭 Windows 功能”里取消勾选两个功能再重启。注意这会清掉你所有发行版的数据操作前务必确认。6.5 VSCode 连接 WSL 失败时怎么处理最常见的是 Windows 上的 VS Code 版本太旧或者 WSL 扩展没有正确安装。先升级 VS Code再安装微软官方的 WSL 扩展然后在 Rocky Linux 终端里手动执行code .VS Code 会自动下载 server 组件并建立连接。如果code命令找不到检查 Rocky Linux 的 PATH 变量通常 WSL 扩展会在/usr/local/bin或~/.vscode-server下创建软链接。实在不行可以用code tunnel的方式通过浏览器访问不过日常开发还是建议本地扩展优先。6.6 dnf 安装软件包时报“没有可用软件包”的排除手段导入的 rootfs 比较精简默认软件源可能只启用了 BaseOS 和 AppStreamEPEL 仓库默认没开。遇到找不到包时先安装 EPELsudo dnf install epel-release再尝试dnf search。如果仍然找不到检查/etc/yum.repos.d/rocky.repo中是否启用了powertools或crb仓库。Rocky Linux 9 里对应的是CRBsudo dnf config-manager --set-enabled crb这一条对很多第三方软件包的安装至关重要。7. 写在最后的实际操作心得前前后后我在 WSL 里装过 Ubuntu、Debian、AlmaLinux 和 Rocky LinuxRocky 整体给人的感觉是稳定、克制、不折腾。它不像 Ubuntu 那样默认带了很多桌面组件rootfs 导入后非常干净适合做服务器环境本地化复刻。如果你原来跑的是 CentOS 7 或 8Rocky Linux 8 会让你感觉特别熟悉如果你愿意接受新版本直接上 9 也没问题。我个人的体会是WSL 里装发行版最重要的是理解wsl --import的工作方式它不关心你从哪里拿到文件系统包只要求你提供一个可用的根文件系统 tar。想通这一点你甚至可以把任何发行版导入 WSL 里玩不再局限于微软商店那几款。最后分享一个小技巧导入 Rocky Linux 后第一时间修改/etc/wsl.conf开启 systemd再配合 Windows 11 的 mirrored 网络模式整个使用体验会非常接近一台原生 Linux 主机。遇到奇奇怪怪的报错先执行wsl --shutdown等几秒再启动。这个不起眼的操作能解决大部分 WSL 层面的偶发问题。
返回列表