在Windows On Arm上使用WSL2

529 阅读2分钟

最近第一次在Windows On Arm上使用wsl2,遇到了一些以前没遇到过的问题,网上相关的资料也不多,因此简单将问题与解决方法记录下来,希望能帮助到遇到相似问题的同学们。

0 换源

需要注意arm版本ubuntu的软件源与amd64的是不一样的,网络上搜索出来的换源教程使用的软件源基本都是针对amd64的linux的,直接使用会发生如下错误:

E: Failed to fetch http://mirrors.163.com/ubuntu/dists/xenial/main/binary-arm64/Packages  404  Not Found
E: Failed to fetch http://mirrors.163.com/ubuntu/dists/xenial-security/main/binary-arm64/Packages  404  Not Found
E: Failed to fetch http://mirrors.163.com/ubuntu/dists/xenial-updates/main/binary-arm64/Packages  404  Not Found
E: Failed to fetch http://mirrors.163.com/ubuntu/dists/xenial-proposed/main/binary-arm64/Packages  404  Not Found
E: Failed to fetch http://mirrors.163.com/ubuntu/dists/xenial-backports/main/binary-arm64/Packages  404  Not Found

下面这个是arm版本ubuntu20.04的清华源,别的linux版本相应的软件源大家可以自行Google:
mirrors.tuna.tsinghua.edu.cn/help/ubuntu…

1 网络问题

安装好ubuntu后,遇到偶然ping不通的问题:

ping www.baidu.com
ping www.baidu.com Temporary failure in name resolution

最开始是发现每次每次执行完sudo apt-get update命令后就发生上述错误,只需要重启就能解决。后来发现是重启后隔一段时间,就会发生这个错误。

开始时我使用关键词Temporary failure in name resolution在网上一顿搜索,搜索出来的解决方法都是修改/etc/wsl.conf/etc/resolv.conf,但修改后并没有解决问题。

另外,在刚重启时虽然能ping通外网了,但执行npm install命令仍然失败。

后来搜索关键词wsl 网络,发现wsl默认状态下的ip地址不是固定的,每次重新启动。 按照文章里介绍的方法配置好后,上述问题就都解决了。
ctrl+R,输入%USERPROFILE%,回车。在打开的文件夹中新建一个.txt文件,输入

[wsl2]
networkingMode=bridged # 桥接模式
vmSwitch=my-switch # 你想使用的网卡
ipv6=true # 启用 IPv6

将文件名改为.wslconfig 开启cmd,输入wsl --shutdown & wsl回车重启wsl。
ps:如果你的电脑没有hyper-v功能,可以按照下文[2 启动HyperV操作]来开启hyper-v。

思考

虽然网络问题应该是解决了,但是还有两个问题没有想明白。

为什么能ping通了,npm install依然无法使用?

ping走的是icml协议,npm可能走的是http/tcp协议的,也许就是因为这个不一样?

为什么wsl不设置为固定ip,则重启一段时间后就无法ping通?

2 启动HyperV

家庭版的windows是没有hyper-v功能的,但可以使用下面网站介绍的方法开启hyper-v功能。 zhuanlan.zhihu.com/p/558063980