初探WSL2
banner: this
安装WSL2
需要更新到版本 2004、内部版本 19041 或更高版本。
- 以管理员身份打开 PowerShell 并运行:
1 | dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart |
- 重新启动计算机,以完成 WSL 安装并更新到 WSL 2。
- 将 WSL 2 设置为默认版本:
wsl --set-default-version 2
运行该命令后,你可能会看到此消息:WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel 。 跟随链接( https://aka.ms/wsl2kernel ),在文档中安装来自该页面的 MSI,以便在计算机上安装 Linux 内核供 WSL 2 使用。 安装内核后,请再次运行该命令,该命令应会成功完成而不显示消息。
- 打开 Microsoft Store,并选择你偏好的 Linux 分发版。
调整生产环境
git配置
1 | gpg --gen-key #根据提示,生成GPG key,注意:确保邮箱的那项是你github账号认证的邮箱;还有记住输入的密码。 |
1 | gpg --armor --export pub-GPG-key-ID #获取公钥 |
npm换源
- 安装nrm:
npm install -g nrm
- 测试所有源的响应时间:
nrm test
- 切换到
taobao
:nrm use taobao
pip换源
修改~/.pip/pip.conf
(没有就创建一个),内容如下:
1 | [global] |
网络互通
WSL2 不和 Windows 共享一个 localhost,所以不像 WSL1 中 Linux 和 Windows 有无感知的网络互通性。
Windows 访问 WSL2 启动的网络服务,可以直接使用 localhost,但是 Linux 访问 Windows 启动的网络服务这种方式就不行了,可以使用如下脚本获取 Windows 的 IP,并使用 IP 访问 Windows:
ip route | grep default | awk '{print $3}'
。Windows 主机 IP 在每次重启后都会变化。
但是,在WSL2中提供的网络服务却不能被局域网中的设备直接访问到。解决方法:
- 在Windows下bash
arp -a
,找到127开头的接口的第一个动态类型ip(也是127开头),记下为wslip。 - Windows下设置端口转发:
netsh interface portproxy add v4tov4 listenport=宿主机端口 listenaddress=0.0.0.0 connectport=wsl端口 connectaddress=wslip
。 netsh interface portproxy show all
可以查看状态。- 每重启一次都要重新执行。
- 可能需要调整防火墙策略。
文件系统互通
WSL2 访问 Windows 文件系统依然通过挂载分区的方式,Windows 下的磁盘会被挂载在 /mnt
下,例如 /mnt/c
。
相比于 WSL1,这次增加了 Windows 访问 Linux 分区的能力,可以在资源管理器中输入 \\wsl$\<子系统名>
访问对应的子系统分区,为了方便也可以在资源管理器中把 Linux 分区挂载成一个磁盘。
更加方便的一个方式是,在 Terminal 中,使用 explorer.exe .
可以直接调用资源管理器打开当前目录.
安装VS Code Remote
略。
坑
- GPG签名时报错:
error: gpg failed to sign the data,fatal: failed to write commit object
,解决:wsl下bashexport GPG_TTY=$(tty)
。 - 某次启动出现类似
1 | [2020-04-23 06:54:31.382] Launching C:\WINDOWS\System32\wsl.exe sh -c '"$VSCODE_WSL_EXT_LOCATION/scripts/wslServer.sh" ff915844119ce9485abfe8aa9076ec76b5300ddd stable .vscode-server 0 ' in c:\Users\Name\.vscode\extensions\ms-vscode-remote.remote-wsl-0.44.2} |
情况,通过此issue用wsl.exe --shutdown
解决。
参考:
https://docs.microsoft.com/zh-cn/windows/wsl/install-win10
https://www.cnblogs.com/songqingbo/articles/5611588.html
https://www.jianshu.com/p/72aada169e92
https://www.cnblogs.com/xueweihan/p/5430451.html
https://github.com/microsoft/WSL/issues/4150