什么是 WSL
WSL(Windows Subsystem of Linux, Windows 上的 Linux 子系统) 是微软为 Windows 开发的 Linux 子系统,主要面向开发人员,旨在为开发人员提供一种方便快捷的,和 Windows 共存的 Linux 环境。WSL 已经推出了两代,第一代 WSL 主要是通过系统 API 转译实现的,就是用 Windows 系统 API 模拟了一套 Linux 系统 API, 而第二代 WSL, 也就是 WSL2 是基于虚拟机技术实现的,其本质是一个轻量级虚拟机。
WSL 2 目前来说,对开发者非常友好,也即将支持 GPU 调用,也是对广大的搞机器学习的同学的好消息。目前来说,在 WSL 2 上使用 Docker 和 开发 C/Cpp 具有非常良好的体验,配合 VS Code 使用非常方便。
本文中主要阐述一些我自己配置 WSL2 的方法和技巧。
WSL 2 配置
下面按照不同的分类,罗列一些我自己的配置技巧。
WSL 2 使用主机的代理
由于 WSL 2 基于虚拟机技术实现,在网络视角,WSL 2 和 Windows 主机是两台网络设备,通过虚拟交换机相连。所以,想要 WSL 使用主机上的代理,需要按照局域网代理的思路来配置,具体步骤如下:
- 打开主机上代理软件的局域网连接权限
- 通过以下命令查看 Windows 虚拟网卡在 WSL2 中的地址
cat /etc/resolv.conf
输出中,nameserver 字段指向的 IP 地址便是需要的地址
- 假设得到的地址是
172.25.128.1
,Windows 上代理端口是 8080,那么按照协议做如下配置:- 如果代理是 socks5 协议,那么配置命令如下:
export http_proxy=socks5://172.25.128.1:8080 export https_proxy=socks5://172.25.128.1:8080
- 如果是 http 代理,那么配置命令如下:
export http_proxy=http://172.25.128.1:8080 export https_proxy=http://172.25.128.1:8080
- 如果代理是 socks5 协议,那么配置命令如下:
- 以上配置对命令行中能够识别
http_proxy
和https_proxy
的软件生效,而如果需要 git 代理,需要再做一些配置:# 如果是 socks5 代理: git config --global http.proxy socks5://172.25.128.1:8080 git config --global https.proxy socks5://172.25.128.1:8080 # 如果是 http 代理: git config --global http.proxy http://172.25.128.1:8080 git config --global https.proxy http://172.25.128.1:8080
上面的配置都有一个问题,resolv.conf
中的 IP 地址是会变的,每次系统重启后,可能就是不一样的地址了,所以,为了一次解决这个问题,我们需要编写一些脚本来自动完成以上配置,脚本如下:
set_proxy=true
proxyIP=`grep "nameserver" /etc/resolv.conf | awk "{print $2}"`:
proxyPort=8080
proxyProtocol=http
if [ $set_proxy = "true" ]
then
export http_proxy=$proxyProtocol://$proxyIP:$proxyPort
export https_proxy=$proxyProtocol://$proxyIP:$proxyPort
git config --global http.proxy $proxyProtocol://$proxyIP:$proxyPort
git config --global https.proxy $proxyProtocol://$proxyIP:$proxyPort
else
unset http_proxy
unset https_proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
fi
把上面这段脚本追加到 WSL 2 用户目录下的 .profile 中即可完成自动代理设置,需要代理时,set_proxy
设置为 true
, 不需要时设置为 false
即可。设置完后若想立即生效,执行以下命令:
source .profile