由于使用 Vmware 时,有时需要频繁的切换 VPN,结果出现了一些网络问题。因此折腾一下 WSL。

准备

这篇文章可以直接扔到 Windows 开发环境配置里的,后来想想算了,还是单开一篇来写,不至于篇幅过长。微软官方推荐使用 WSL2,拥有更好的性能和使用体验。

阅读本文默认你不是 Windows 家庭版用户,家庭版无法开启 Hyper-V。浪子配置时的环境和目标:

  • Windows 11
  • Git Bash
  • Debian 子系统
  • WSL2

Git Bash 是浪子喜欢使用的,Windows 下基本全部替换为了这个,Git 相关篇中已经介绍过。如果少侠使用的 Windows 10 以上系统,推荐使用 Powershell 代替 CMD。话说 CMD 这种东西现在真的还有开发喜欢嘛?

官网教程

微软的教程还是可以的:

Follow me

开启使用 WSL 必需的服务

首先,按下 Windows 徽标键,输入 “启用或关闭 Windows 功能”,勾选 Hyper-V适用于 Linux 的 Windows 子系统,点击确定,然后进行重启。

更新 WSL 内核

下载 安装后打开自己的终端执行以下命令:

1
2
3
4
5
6
# 更新 wsl 版本
wsl --update
# 查看版本
wsl --version
# 配置 wsl2 为默认版本
wsl --set-default-version 2

之后我们进行安装 Debian,打开 Git Bash:

1
2
3
4
# 查询 Windows 支持安装的 Linux 子系统
wsl -l -o
# 安装指定的系统(如果是旧版本可能需要 -d 选项指定子系统)
wsl --install Debian

看到以下内容就代表成功了,只需按照提示创建用户即可。

成功标志
成功标志

其它配置

设置 root 用户密码

1
sudo passwd root

安装 Neovim

浪子还是习惯于使用 Vim 或者 Neovim。这个安装在你没有换源之前还是比较慢的,也可以使用 echo 追加或者替换命令直接替换为国内源后再安装。镜像源直接百度就行,这个资料有很多。

1
2
3
4
# 更新系统
sudo apt update && sudo apt upgrade
# 安装
sudo apt intall -y neovim

后面就没有什么大问题了,安装自己常用的工具使用就行了,

安装其它工具

1
sudo apt install -y wget curl ssh iproute2 git

ssh 允许 root 用户登录

由于浪子是本机安装,这一项直接开放,用的时候方便。

/etc/ssh/sshd_config
1
2
#PermitRootLogin prohibit-password
PermitRootLogin yes

保存修改后运行 systemctl restart ssh 重启即可。

使用 systemd 管理系统服务

浪子安装的 Debian 同时存在 systemd 和 sysVinit 初始化程序,但默认使用的 sysVinit,这里把它给替换为 systemd。关于这两个服务在 Linux 入门篇有说明,这里不再赘述。

首先使用以下命令查看系统使用的服务管理工具:

1
ps -p 1 -o comm=

执行上面的命令后若打印的是 init,就按照下面的操作,直接编辑文件 /etc/wsl.conf,如果没有该文件,直接新建并加入内容保存,然后重启 Linux 子系统。

/etc/wsl.conf
1
2
[boot]
systemd=true

如果解决不了(可能你不是按照本文的步骤),请先升级 wsl 后再次尝试:wsl --update

附:一些错误

无法解析服务器的名称或地址

1
2
3
4
5
6
7
wsl -l -o
无法解析服务器的名称或地址

或者以下错误:

无法从“https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json”中提取列表分发。无法解析服务器的名称或地址
Error code: Wsl/WININET_E_NAME_NOT_RESOLVED

国内网络不好时查找不了,网上百度多数说 DNS 的问题(也算是 DNS 污染),浪子没有按照那个改。亲自尝试,使用魔法或者打开 hosts 添加以下内容都可以:

1
185.199.108.133 raw.githubusercontent.com

hosts 的 IP 不一定非要相同,这个 IP 是可以查出来的,就和访问 Github 修改 hosts 原理是一样的,归根结底都是国内的网络问题。

安装启动时 WslRegisterDistribution failed with error

1
2
3
4
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel

Press any key to continue...

解决办法,下载安装新的 wsl 内核,下载链接在上面。

docker/podman 运行容器时报错

1
Error: netavark: unable to append rule '-d 10.88.0.0/16 -j ACCEPT' to table 'nat': code: 4, msg: iptables v1.8.9 (nf_tables):  RULE_APPEND failed (No such file or directory): rule in chain NETAVARK-1D8721804F16F

解决办法:

1
2
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

参考:https://github.com/microsoft/WSL/issues/6655

基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 要查看 Linux 发行版是设置为 WSL 1 还是 WSL 2,请使用命令 
wsl -l -v
# 设置默认的 wsl 版本,Version 替换为 1 or 2
wsl --set-default-version [Version]
# 命令可用于从 WSL 2 降级到 WSL 1,或将以前安装的 Linux 发行版从 WSL 1 更新到 WSL 2。
wsl --set-version [linux-name] [Version]

# 查找支持的 Linux 分发版系统
wsl -l -o
# 安装支持的分发版 Linux 系统
wsl --install -d [Linux-name]

# 更新 wsl
wsl --update
# wsl 状态
wsl --status
# wsl 版本,如果这个选项没有出现结果请升级 wsl
wsl --version

本站由 江湖浪子 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。