在windows11上使用 WSL2 安装 centOS9 系统(支持 systemd)

2022年9月微软官方发布声明,wsl 已经支持 systemd。运行 WSL 2 需要 Windows 10 系统版本 2004+(内部版本 19041+)。或者 Windows 11 系统。微软官方文档:安装 WSL 条件

在 bios 中开启虚拟化(不同机器方法不同自行百度)

CPU 是 Intel(英特尔)的话,虚拟化技术即 VT(Virtualization Technology);CPU 是 AMD 的话,虚拟化技术即 SVM(Secure Virtual Machine mode)。

虚拟化技术能够令单个 CPU 模拟多个 CPU 并行,将一台电脑分成了多个独立的电脑,每台“虚拟”的电脑上都可以按照需要进行模拟。一台电脑上就可以运行多个操作系统,并且可以在相互独立的“虚拟电脑”内运行而互不影响。

华硕主板+ Intel(英特尔)CPU 开启虚拟化:进入 bios 主界面后,选择Advanced Mode(F7),然后选择Advanced设置,并找到Intel(VMX)Virtuallzation Technology设置项,将默认的 Disable,改成Enabled启用,表示开启 VT 虚拟化。

在 windows 上查看:任务管理器- 性能- CPU –虚拟化:已开启

在 Windows 功能面板中,启用“虚拟机平台”和“WSL子系统”可选组件

在 Windows 中,打开控制面板->卸载程序->启用或关闭 Windows 功能
勾选上“适用于 Linux 的 Windows 子系统”、勾选上“虚拟机平台”(virtual machine platform)。windows 会自动安装组件,然后重启电脑即可。

注意:只需要勾选“适用于 Linux 的 Windows 子系统”、“虚拟机平台”,这两个组件。新版本中显示的是英文virtual machine platform(虚拟机平台)。不需要勾选“hyper-v”组件,也不需要勾选“windows 虚拟机监控程序平台”。

升级 WSL 2 为最新版本

Microsoft Store 中获取最新版本的 WSL

安装完毕,然后打开命令行工具:Windows Powershell(管理员),查看 wsl 版本:

# 查看 wsl 版本`wsl --status # 显示如下:`WSL 2
# 查看 wsl 版本`wsl --version # 显示如下: WSL 版本: 2.5.9.0 内核版本: 6.6.87.2-1 WSLg 版本: 1.0.66 MSRDC 版本: 1.2.6074 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.26100.1-240331-1435.ge-release Windows: 10.0.26100.4652

2022年9月微软官方发布声明,wsl 已经支持 systemd

安装 centOS

Microsoft Store 中查看 GNU/Linux 分发版。里面没有 CentOS-WSL,需要从 github.com 中寻找。地址:CentOS for WSL,这里有适合 wsl2 的centOS9和 centOS8。

镜像zip下载地址  github项目地址

Centos Stream 是 Centos 8 之后一个滚动发布的 Linux 分发版。在 2021 年年底,Centos 8 将会停止维护,届时 Centos Stream 将作为 RHEL 的上游分支进行持续更新。在红帽开源开发模式中,红帽在发布红帽企业 Linux 新版本前,会先在 CentOS Stream 上开发红帽企业 Linux 源代码,使 CentOS Stream 成为红帽企业 Linux 未来版本的预览。

第一步:下载最新版:CentOS 9-stream。然后解压 zip 文件。其中包含有两个文件。一个是能安装在 wsl2 上的centOs,一个是根目录系统文件。

第二步:把文件解压到,其他盘,专门用来做 centOS 的系统的位置,其中能搭建开发环境,以及开发程序。例如:E:\wsl\centOS

第三步:在CentOS安装文件上,用鼠标右键点击,以管理员的身份运行。然等待安装完毕。再然后按回车键。看到多出来一个文件:ext4.vhdx,它式虚拟硬盘。centOS系统文件以及开发安装的文件,都会储存在它里面。

安装 Window Terminal 终端

Window Terminal(Windows终端)集成了Windows上的 PowerShell、cmd、Windows Linux子系统(WSL)三大环境。用来输入 wsl 命令,非常合适。

打开Microsoft Store,搜索 Window Terminal,然后点“获取”。然后等待下载安装。

点击【开始】菜单,拖动【Windows Terminal】图标到桌面,可得到一个桌面快捷方式。还可以把它【固定到任务栏】,便于经常使用。

登录 CentOS

方式一:使用Window Terminal终端,来登录管理 centOS 非常方便。

Window Terminal终端中,查看。

查看已经安装的全部 wsl 子系统
wsl --list 查看正在运行的 wsl 子系统 wsl -s 关机: wsl --shutdown

方式二:鼠标右击CentOS.exe,并“以管理员身份运行”,即成功登录系统了。

开启 systemd 支持

若要刚安装发行版 centOS,启用 systemd,需要设置:/etc/wsl.conf。登录刚安装 centOS,执行命令:

echo -e "[boot]\nsystemd=true" | tee -a /etc/wsl.conf

此命令会创建/etc/wsl.conf文件,并且写入设置:

[boot]
systemd=true
# 或者手工写入
vi  /etc/wsl.conf

然后,关闭 WSL 分发版 centOS,再重启 WSL 实例。在Window Terminal终端中,执行命令:

停止关闭 centOS 分发版
wsl --shutdown
查看在运行的分发版
wsl --list --running

检测 systemd 支持

然后重新登陆 centOS,判断 wsl 是否已启用 systemd,可通过以下命令查看:

ps --no-headers -o comm 1

如果命令返回的是 init 说明 systemd 未启用,如果是 systemd 那么你的 systemd 已启用成功了。

查看已启用的 systemd service

systemctl list-unit-files --type=service

安装软件包

查看 CentOs 系统版本方法
cat /etc/os-release适用于所有使用systemd的Linux发行版‌
包括但不限于Ubuntu、Debian、Fedora、CentOS、OpenCloudOS等。
uname -r
uname -a
适用于所有的 linux,包括Redhat、SuSE、Debian、Centos等
lsb_release -a此命令适用于所有的 Linux 分发版,包括 RedHat、SUSE、Debian…等分发版。
在默认情况下,Linux 中是不带 lsb_release 命令的,安装命令dnf -y install redhat-lsb
LSB是Linux Standard Base的缩写,用来显示 LSB 和特定版本的相关信息。如果使用该命令时不带参数,则默认加上-v 参数。
cat /etc/redhat-release
cat /etc/centos-release
适用于 RedHat、CentOS
cat /proc/version当前 centos 版本与 redhat 对应的版本的命令

安装工具包

cd /tmp

dnf -y install vim
dnf -y install wget
dnf -y install zip unzip
dnf -y install tree

安装 epel-release 源

查看本地源文件

ls -l /etc/yum.repos.d

显示如下:
-rw-r--r-- 1 root root 4229 Mar  3 02:30 centos-addons.repo
-rw-r--r-- 1 root root 2588 Mar  3 02:30 centos.repo

epel-release源是由 Fedora 社区打造,为 RHEL 及衍生分发版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。官方的 rpm repository 提供的 rpm 包也不够丰富,很多时候需要自己编译那太辛苦了,而 EPEL 恰恰可以解决这两方面的问题。

dnf -y install epel-release

再次,查看本地源文件

ls -l /etc/yum.repos.d

显示如下:
-rw-r--r-- 1 root root 4229 Mar  3 02:30 centos-addons.repo
-rw-r--r-- 1 root root 2588 Mar  3 02:30 centos.repo
-rw-r--r-- 1 root root 1519 Dec  2  2021 epel-next.repo
-rw-r--r-- 1 root root 1621 Dec  2  2021 epel-next-testing.repo
-rw-r--r-- 1 root root 1453 Dec  2  2021 epel.repo
-rw-r--r-- 1 root root 1552 Dec  2  2021 epel-testing.repo

安装 packages-microsoft-prod 源

packages-microsoft-prod源是软件包库,是 Microsoft 构建并支持适用于 Linux 系统的各种软件产品,并使它们可通过标准 APT 和 YUM 程序包存储库提供。适用于 Linux 分发版和 Linux 包版本的自动配置存储库。packages-microsoft-prod

cd /tmp
wget -c https://packages.microsoft.com/config/rhel/9.0/packages-microsoft-prod.rpm
rpm -ivh packages-microsoft-prod.rpm

# 清理缓存
dnf clean all

# 更新源
dnf makecache

再次,查看本地源文件

ls -l /etc/yum.repos.d

显示如下:
-rw-r--r-- 1 root root 4229 Mar  3 02:30 centos-addons.repo
-rw-r--r-- 1 root root 2588 Mar  3 02:30 centos.repo
-rw-r--r-- 1 root root 1519 Dec  2  2021 epel-next.repo
-rw-r--r-- 1 root root 1621 Dec  2  2021 epel-next-testing.repo
-rw-r--r-- 1 root root 1453 Dec  2  2021 epel.repo
-rw-r--r-- 1 root root 1552 Dec  2  2021 epel-testing.repo
-rw-r--r-- 1 root root  206 May  3 11:55 microsoft-prod.repo

升级 CentOS 软件包

只升级所有软件包,不升级操作系统,不升级系统内核。

cd /tmp

dnf -y upgrade

卸载 centOS 系统

在某些情况下,需要卸载 wsl 分发系统 centOS 的时候,有两种办法:

方式一:使用Window Terminal终端命令注销来卸载:

停止全部分发版系统
wsl --shutdown
查看正在运行的分发版系统
wsl --list --running
查看已经安装上的全部分发版系统
wsl --list
注销分发版系统 centOS
wsl --unregister CentOS9-stream
查看已经安装上的全部分发版系统
wsl --list

虚拟硬盘文件ext4.vhdx,会被清除掉,卸载完成。

方式二:使用Window Terminal终端,先停止分发版系统,然后切换到安装目录下E:\wsl\centOS,运行如下命令:

停止全部分发版系统
wsl --shutdown

e:
cd wsl/centOS
./CentOS9-stream.exe clean

虚拟硬盘文件ext4.vhdx,会被清除掉,卸载完成。

windown 10 与 wsl 中 centOS 文件互传

windown 10 上的磁盘空间都直接挂在到 centOS 上。

方法一

打开 WSL子系统 centoOS 的 shell 终端,对于 wsl 来说, windows 是挂载/mnt,目录下。列出来本机电脑上的所有磁盘空间。

cd /mnt
ls -l

列出来本机电脑上的 E 磁盘空间上的所有文件夹以及文件。

cd /mnt/e
ls -l

把 windown 上的文件复制到 centOS

把windown 10上的E盘上 wwww 文件夹下 lanmper,全部复制到 centOS 上的 www 目录下

cp -r /mnt/e/www/lanmper /usr/www/

方法二

在windows上打开资源管理器,输入\\wsl$,然后按回车键。就可以看到所有的子系统。

用鼠标点击wsl的子系统,就能进入centOS的目录,点击任何目录,都能进入

方法三

打开 WSL子系统 centoOS 的shell终端,输入:

explorer.exe

会打开 window 下目录。即可在资源管理器界面中浏览 WSL 系统的目录数据。

配置WSL2实现与宿主机的网络互通

 

前言

WSL1 是基于代理的虚拟化技术,它通过将 Linux 系统调用转换为 Windows 系统调用来实现与 Windows 内核的交互。WSL2 则使用了真正的虚拟机技术,它在 Windows主机 上运行一个轻量级的 Linux 内核。

WSL2 无法访问 Windows 的 localhost 网络是由 WSL2 的网络架构所致。WSL2 使用了一个虚拟网络适配器来与 Windows 主机进行通信,这导致 WSL2 无法直接访问 Windows 的 localhost 网络。因此,以往的 WSL2 在访问 Windows 网络时需要将其当作 LAN 的另一个设备,而 Windows 宿主则可以把 WSL 当作本机设备。这导致了很多问题,尤其是梯子方面的。

WSL2 2.0 引入的镜像网络可以解决 localhost 访问问题。启用镜像网络后,WSL2 和 Windows 主机将使用相同的网络,并且可以通过 localhost 访问本机系统上的服务。这意味着你可以在 WSL2 中访问本机系统上运行的应用程序,以及通过本机系统访问在 WSL2 中运行的应用程序。

配置

在Windows的资源管理器的地址栏输入: %UserProfile% ,即可打开当前用户的主目录,创建文件: .wslconfig
[wsl2]
memory=4GB # 分配给 WSL 2 的内存大小
processors=2 # 分配给 WSL 2 的 CPU 核心数
localhostForwarding=true # 是否启用 localhost 转发

[experimental]
autoMemoryReclaim=gradual # 开启自动回收内存,可在 gradual, dropcache, disabled 之间选择
networkingMode=mirrored # 开启镜像网络
dnsTunneling=true # 开启 DNS Tunneling
firewall=true # 开启 Windows 防火墙
autoProxy=true # 开启自动同步代理
sparseVhd=true # 开启自动释放 WSL2 虚拟硬盘空间

重启WSL

管理员身份运行PowerShell:

  • 停止WSL: wsl --shutdown
  • 启动WSL: wsl之后就可以在 wsl 中使用 localhost 的方式来访问宿主机上的服务了。
    curl http://localhost

其他命令

  • 在WSL中查看宿主机的IP:cat /etc/resolv.conf,输出中 nameserver 后面的地址即是宿主机的IP地址。

WSL2网络模式详解

镜像网络模式(Mirrored Mode)

  1. # 镜像网络特点:
  2. – WSL和Windows共享网络栈
  3. – 使用相同的IP地址
  4. – 可以通过localhost互相访问 – 防火墙规则统一管理

防火墙问题:是的,Windows防火墙会拦截WSL中启动的服务。你需要手动添加防火墙规则:

# 以管理员身份运行PowerShell,添加防火墙规则
New-NetFirewallRule -DisplayName "WSL Service Port" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow

默认网络模式(NAT模式)

如果不使用镜像网络,WSL2默认是NAT模式

  1. # NAT模式特点:
  2. – WSL有独立的虚拟网络(通常是172.x.x.x)
  3. – Windows作为网关(通常是172.x.x.1)
  4. – WSL可以访问外部网络,但外部不能直接访问WSL
  5. – 需要端口转发才能从Windows访问WSL服务

网络模式对比 

特性镜像模式NAT模式(默认)
IP地址与Windows相同独立的172.x.x.x
本地访问localhost直接访问需要端口转发
防火墙统一管理,需要配置规则WSL内部独立
外部访问直接可达需要复杂配置

验证当前网络模式

# 检查WSL实际使用的网络模式
cat /proc/sys/net/ipv4/conf/all/forwarding

# 如果是镜像模式,值为0;NAT模式为1

服务访问测试(镜像模式)

在WSL中启动服务后测试:

# 在WSL中启动服务(比如8080端口)

#检查是否被占用

netstat -ano | findstr :3306

#在windows中放行8080端口

New-NetFirewallRule -DisplayName “WSL_Docker_8080” -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow

# 在WSL中测试

curl http://localhost:8080

# 在Windows中测试

curl http://localhost:8080

nat模式:

需要配置代理:~/.bashrc

# Proxy Configuration for Clash for Windows
export http_proxy=”http://192.168.1.11:7890″
export https_proxy=”http://192.168.1.11:7890″
export no_proxy=”localhost,127.0.0.1″
export HTTP_PROXY=”http://192.168.1.11:7890″
export HTTPS_PROXY=”http://192.168.1.11:7890″
export NO_PROXY=”localhost,127.0.0.1″

配置docker desktop

首先安装docker desktop+汉化包:

将汉化包放在C:\Program Files\Docker\Docker\frontend\resources中

打开wsl集成选项

在 WSL 中安装 Docker CLI

# 添加 Docker 官方仓库 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#替换yum源地址 sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo 
# 只安装 Docker CLI(不要安装完整的 Docker Engine) sudo dnf install docker-ce-cli

重启wsl

工作原理:

  • Docker Desktop 在 Windows 端运行 Docker 守护进程
  • WSL 中的 Linux 系统通过 Docker CLI 连接到 Windows 端的 Docker
  • 这样你就可以在 WSL 中直接使用 docker 命令了

安装nvm–nodejs

#nodejs可以使用nvm安装
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 21
nvm use 21
#以上为使用nvm安装node21
# 验证版本
node --version 

安装claude并配置

npm install -g @anthropic-ai/claude-code

claude –version

curl -O “https://cdn.bigmodel.cn/install/claude_code_env.sh” && bash ./claude_code_env.sh

{
"env": {
"ANTHROPIC_AUTH_TOKEN": "your_zhipu_api_key",
"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
"API_TIMEOUT_MS": "3000000",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1
}
}

安装智谱清言claude mcp:

claude mcp add -s user -t http web-reader https://open.bigmodel.cn/api/mcp/web_reader/mcp --header "Authorization: Bearer API_KEY"
claude mcp add -s user -t http web-search-prime https://open.bigmodel.cn/api/mcp/web_search_prime/mcp --header "Authorization: Bearer API_KEY"
claude mcp add -s user zai-mcp-server --env Z_AI_API_KEY=API_KEY -- npx -y "@z_ai/mcp-server"

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部