初探WSL2

banner: this

安装WSL2

需要更新到版本 2004、内部版本 19041 或更高版本。

  • 以管理员身份打开 PowerShell 并运行:
1
2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /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
2
gpg --gen-key #根据提示,生成GPG key,注意:确保邮箱的那项是你github账号认证的邮箱;还有记住输入的密码。
gpg --list-keys #查看GPG key
1
2
3
4
5
6
7
8
gpg --armor --export pub-GPG-key-ID #获取公钥
gpg --list-keys #查看pub GPG key ID
git config --global user.signingkey pub-GPG-key-ID #设置git签名时用的key(可选)
git config --global commit.gpgsign true #让所有的本地仓库都使用GPG签名
git config --global http.proxy socks5://ip:port
git config --global https.proxy socks5://ip:port
git config --global user.name "yourname"
git config --global user.email "youremail"

npm换源

  1. 安装nrm: npm install -g nrm
  2. 测试所有源的响应时间:nrm test
  3. 切换到taobao : nrm use taobao

pip换源

修改~/.pip/pip.conf(没有就创建一个),内容如下:

1
2
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

网络互通

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中提供的网络服务却不能被局域网中的设备直接访问到。解决方法:

  1. 在Windows下basharp -a,找到127开头的接口的第一个动态类型ip(也是127开头),记下为wslip。
  2. Windows下设置端口转发:netsh interface portproxy add v4tov4 listenport=宿主机端口 listenaddress=0.0.0.0 connectport=wsl端口 connectaddress=wslip
  3. netsh interface portproxy show all可以查看状态。
  4. 每重启一次都要重新执行。
  5. 可能需要调整防火墙策略。

文件系统互通

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
2
3
[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}
[2020-04-23 06:54:31.928] sh: 1: /scripts/wslServer.sh: not found
[2020-04-23 06:54:31.928] VS Code Server for WSL closed unexpectedly.

情况,通过此issuewsl.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