通过 wsl2 安装 Arch Linux
📄官方文档 👉 links
准备
bios 打开 virtu
windows 功能打开 虚拟机平台
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
安装
wsl -l -o # 查询可以安装的发行版
# wsl --install -d Ubuntu-20.04 # 安装 Ubuntu
由于
wsl -l -o
没有输出 Arch 发行版,因此需要在微软商店中下载,本文下载的是 WSL Arch Linux
安装完成后,点击开始菜单中新增的 Linux 图标,或者在终端中输入 wsl
,即可进入。
sudo passwd # 设置管理员密码
wsl --set-default-version 2 # 使用 wsl2
下载 WSL2 内核,解决报错:WslRegisterDistribution failed with error: 0x800701bc
安装成功后,使用 neofetch
展示一波 🎉
neofetch 安装命令为 sudo pacman -S neofetch
开启 SSH
打开 SSH 配置文件,修改以下内容
# /etc/ssh/sshd_config
Port 10022 # 为了和宿主机22端口区分
PasswordAuthentication yes
PermitRootLogin yes
重启 SSH 服务
sudo systemctl enable ssh
sudo systemctl restart ssh
开启 SSH 服务后,可以通过 ssh user@localhost -p 10022
登录,localhost 也可替换为 wsl 的 ip。
安装 zsh
sudo pacman -S zsh
使用 chsh -l
或 cat /etc/shells
查看可使用的 shell
$ chsh -l
/bin/bash
/bin/rbash
/usr/bin/git-shell
/bin/zsh
/usr/bin/zsh
切换 shell
chsh -s /bin/zsh
重新登录 wsl ,使用 echo $SHELL
查看当前 shell
安装 oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
端口转发
目前 WSL2 已经支持原生自定义网卡,该方案需要 23H2 版本的 Windows 系统才能使用。
不满足系统要求的话,则继续使用端口转发的方案。
在宿主机与 WSL 之间添加端口转发,让局域网中的其他设备可以 SSH 到 WSL。
设置端口转发
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=11122 connectaddress=172.29.20.46 connectport=10022
listenport 为宿主机监听端口,也是局域网内其他主机访问 WSL 的端口
connectaddress 为 WSL 的 IP
connectport 为 WSL 的 ssh 端口
查看端口转发配置
netsh interface portproxy show all
开放防火墙入站端口
netsh advfirewall firewall add rule name="WSL2" dir=in action=allow protocol=TCP localport=11122
完成这一步后,局域网内的设备就可以通过 11122 端口访问了。
ssh user@<宿主机ip> -p 11122
设置静态 IP
WSL2每次启动的时候会检查创建一个WSL交换机,随机分配 IP。
为了获得静态 IP ,需要修改以下配置。
# /etc/resolv.conf
nameserver 172.29.16.1 # WSL 交换机ip,可在宿主机终端使用 ipconfig 获得
nameserver 114.114.114.114
# /etc/wsl.conf
[boot]
systemd=true
[network]
generateResolvConf = false
开发环境
使用 VSCode 配合 Remote - SSH 插件可以很方便的连接 WSL,借助强大的 VSCode,你可以轻松地在 WSL 中开发你的项目。
谈谈感受
ArchWSL 啥都好,就是不能搞深度学习。
References
[1] hez2010, 给 WSL2 设置静态 IP 地址
[2] 你们EE出了个傻子, 局域网ssh连接wsl2配置与问题一站式解决(connection refused)
[3] Ryan Shang, WSL2设置静态IP