由于使用 Vmware 时,有时需要频繁的切换 VPN,结果出现了一些网络问题。因此折腾一下 WSL。
准备
这篇文章可以直接扔到 Windows 开发环境配置里的,后来想想算了,还是单开一篇来写,不至于篇幅过长。微软官方推荐使用 WSL2,拥有更好的性能和使用体验。
阅读本文默认你不是 Windows 家庭版用户,家庭版无法开启 Hyper-V(听说可以自行安装,浪子没试,只要是 windows 电脑拿回来我就给重装专业版了😉)。浪子配置时的环境和目标:
- Windows 11
- Git Bash
- Debian 子系统
- WSL2
Git Bash 是浪子喜欢使用的,Windows 下基本全部替换为了这个,Git 相关篇中已经介绍过。如果少侠使用的 Windows 10 以上系统,推荐使用 Powershell 代替 CMD。
话说 CMD 这种东西现在真的还有开发喜欢嘛?
官网教程
微软的教程非常 Nice!
Follow me
开启使用 WSL 必需的服务
首先,按下 Windows 徽标键,输入 “启用或关闭 Windows 功能”,勾选 Hyper-V 和 适用于 Linux 的 Windows 子系统,点击确定,然后进行重启。
更新 WSL 内核
下载 安装后打开自己的终端执行以下命令:
1 | # 更新 wsl 版本 |
之后我们进行安装 Debian,打开 Git Bash:
1 | # 查询 Windows 支持安装的 Linux 子系统 |
看到以下内容就代表成功了,只需按照提示创建用户即可。
这里第一张截图有一个错误,文末有讲。
其它配置
wsl 的两个文件
.wslconfig
用于在 WSL 2 上运行的所有已安装发行版中配置全局设置。wsl.conf
用于为在 WSL 1 或 WSL 2 上运行的每个 Linux 发行版按各个发行版配置本地设置。
设置 root 用户密码
1 | sudo passwd root |
安装 Neovim
浪子还是习惯于使用 Vim 或者 Neovim。这个安装在你没有换源之前还是比较慢的,也可以使用 echo 追加或者替换命令直接替换为国内源后再安装。镜像源直接百度就行,这个资料有很多。
1 | # 更新系统 |
后面就没有什么大问题了,安装自己常用的工具使用就行了,
安装其它工具
1 | sudo apt install -y wget curl ssh iproute2 git |
ssh 允许 root 用户登录
由于浪子是本机安装,这一项直接开放,用的时候方便。
1 | #PermitRootLogin prohibit-password |
保存修改后运行 systemctl restart ssh
重启即可。
使用 systemd 管理系统服务
浪子安装的 Debian 同时存在 systemd 和 sysVinit 初始化程序,但默认使用的 sysVinit,这里把它给替换为 systemd。关于这两个服务在 Linux 入门篇有说明,这里不再赘述。
首先使用以下命令查看系统使用的服务管理工具:
1 | ps -p 1 -o comm= |
执行上面的命令后若打印的是 init,就按照下面的操作,直接编辑文件 /etc/wsl.conf,如果没有该文件,直接新建并加入内容保存,然后重启 Linux 子系统。
1 | [boot] |
如果解决不了(可能你不是按照本文的步骤),请先升级 wsl 后再次尝试:wsl --update。
基本命令
1 | # 以指定用户进入 linux 系统 |
不是很推荐使用
wsl -t
来停止正在运行的 wsl 子系统。
安装 Arch Linux
借助 ArchWSL 项目进行,官方文档:https://wsldl-pg.github.io/ArchW-docs/locale/zh-CN/How-to-Setup/
配置中文环境
编辑 vim /etc/locale.gen
文件,把 zh_CN.UTF-8 UTF-8 这一行取消注释。然后执行以下命令:
1 | locale-gen |
Arch Wiki 不推荐直接修改该文件,浪子本机有中文字体,这点儿不需考虑。你可以按照 wiki 来配置。
使用 pacman
使用 ArchWSL 时,默认情况下,pacman 是不能直接使用的,需要做一些修改。编辑 /etc/pacman.d/mirrorlist
,在文件的最顶端添加:
1 | Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch |
执行以下命令:
1 | sudo pacman-key --init |
参考:https://wsldl-pg.github.io/ArchW-docs/How-to-Setup/#initialize-keyring
禁用 cgroup v1
编辑 ~/.wslconfig
文件(不存在就新建),加入以下内容,重启 wsl 子系统。
1 | [wsl2] |
附:一些错误
无法解析服务器的名称或地址
1 | wsl -l -o |
网上百度说是 DNS 的问题(也算是 DNS 污染),浪子没有按照那个改。亲自尝试,使用魔法或者打开 hosts 添加以下内容都可以:
1 | 185.199.108.133 raw.githubusercontent.com |
hosts 的 IP 不一定非要相同,这个 IP 是可以查出来的,就和访问 Github 修改 hosts 原理是一样的,归根结底都是国内的网络问题。
安装启动时 WslRegisterDistribution failed with error
1 | WslRegisterDistribution failed with error: 0x800701bc |
解决办法,下载安装新的 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 | sudo update-alternatives --set iptables /usr/sbin/iptables-legacy |