wsl2配置
WSL2安装、配置docker、X11等过程…
安装wsl2
官网提供了一键安装方法,但实测不好使,所以下面流程参考手动安装方法
管理员PowerShell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启电脑
下载https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi并安装
管理员PowerShell
wsl --set-default-version 2
- 需要确认有以下输出
1
2
3C:\WINDOWS\system32> wsl --set-default-version 2
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
操作成功完成。
打开Microsoft Store 搜索
ubuntu
,安装合适的版本(22.04LTS)安装后运行即可
打开cmd确认一下是wsl2而不是wsl1:
1
2
3PS C:\Users\X> wsl.exe --list --verbose
NAME STATE VERSION
* Ubuntu-22.04 Running 2- 如果VERSION=1:
1
2
3
4
5
6
7
8
9
10
11PS C:\Users\X> wsl.exe --shutdown
PS C:\Users\X> wsl.exe --list --verbose
NAME STATE VERSION
* Ubuntu-22.04 Stopped 1
PS C:\Users\X> wsl.exe --set-version Ubuntu-22.04 2
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
转换完成。
PS C:\Users\X> wsl.exe --list --verbose
NAME STATE VERSION
* Ubuntu-22.04 Stopped 2
- 如果VERSION=1:
/etc/wsl.conf配置
1
2
3bon@:~$ cat /etc/wsl.conf
[boot]
systemd=true
wsl-ubuntu 环境配置
网络环境配置
主要是防火墙配置,以下针对Macfee防火墙用户
Macfee新增用户规则如下:
- UDP端口
- TCP端口,其中29418为gerrit端口
- Xserver所需端口,也是TCP端口
- UDP端口
ping baidu.com 正常
Docker环境
apt安装docker:
1
2
3
4
5
6
7sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io由于新的ubuntu系统使用了iptables-nft,而WSL2不支持,需要更换iptable策略,否则dockerd起不来:
1
update-alternatives --set iptables /usr/sbin/iptables-legacy
配置docker daemon自启动,
vi ~/.profile
写入1
2# run docker daemon startup
wsl.exe -u root -e sh -c "service docker status || service docker start"- 加上
> /dev/null 2>&1
如果不希望有下面的提示 配置dockerd随WSL启动,vi ~/.bashrc
写入下面内容1
2
3
4
5RUNNING=`ps aux | grep dockerd | grep -v grep`
if [ -z "$RUNNING" ]; then
sudo dockerd > /dev/null 2>&1 &
disown
fi这个方法要求sudo,需要输入密码,所以把用户的sudo密码去掉1
2
3$ sudo visudo
## 写入以下内容
你的用户名 ALL=(ALL) NOPASSWD: ALL
- 加上
wsl.exe --shutdown
,重启wsl,docker ps
测试正常
任何情况下docker命令显示找不到daemon,都可以执行sudo dockerd看下报错是什么,如果没有报错退出,那就只是没有启动而已。
配置nvidia docker环境
windows安装nvidia驱动,wsl只需要安装cuda toolkit
windows下载安装windows侧驱动,wsl侧只需要安装cuda toolkit
wsl安装nvidia-contailer-toolkit: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-with-apt
wsl配置docker nvidia runtime:
sudo nvidia-ctk runtime configure --runtime=docker
参考文档重启后,验证正常
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
x11配置
下面步骤参考(https://github.com/microsoft/WSL/issues/4106#issuecomment-876470388) ,并做了一些补充
- 参考 #网络环境配置 配置x11防火墙,端口6000
- (应该非必须)PowerShell里配置防火墙
New-NetFirewallRule -DisplayName "WSL2" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
- Install vcxsrv on Windows
- Start XLaunch on Windows
- Select Multiple Windows (default)
- Select Start no client (default)
Check✅ Disable access control- Uncheck ☐ Native opengl
- Add
-ac
to Additional parameters for VcXsrv - Save configuration on startup folder, location C:\Users"YOUR_USERNAME”\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (don’t forget to place YOUR_USERNAME)
- Open Ubuntu app, run command
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | head -1 | awk '{print $2}'):0.0
,also put the command in ~/.bashrc - run sudo apt install x11-apps -y
- run xeyes 验证成功
验证xeyes出现问题可以strace xeyes
看下问题是什么,比如防火墙问题会有类似log并卡住超时,最终显示无法连接,那就去检查ip以及端口是否被墙
1 | connect(3, {sa_family=AF_INET, sin_port=htons(6000), sin_addr=inet_addr("172.17.48.1")}, 16) |
把wsl挪到其他盘
- PowerShell
wsl --shutdown
- 打开CMD
- 创建目标文件夹
mkdir D:\wsl\Ubuntu-22.04
cd C:\Users\Xpeng\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\
用户名和CanonicalGroupLimited文件夹替换为对应的- 挪LocalState文件夹
move LocalState D:\wsl\Ubuntu-22.04\LocalState
- 创建链接
mklink /J LocalState D:\wsl\Ubuntu-22.04\LocalState
1
2C:\Users\Xpeng\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc>mklink /J LocalState D:\wsl\Ubuntu-22.04\LocalState
为 LocalState <<===>> D:\wsl\Ubuntu-22.04\LocalState 创建的联接 - 完成
历史检索异常
ctrl+r历史检索按tab后会卡住,参考 https://github.com/microsoft/WSL/issues/4966,原因是按tab后会从/mnt/检索所有可执行文件(可以命令行按空格后直接按tab复现,不过在这里为啥要有这个行为?),而wsl2对/mnt/目录的检索效率很低,所以会卡住。
链接中提供了修改环境变量的解决方法,但是会导致部分命令无法执行,解决方法是:不按tab,用→或者end键替代,改变自己的使用习惯:)