昨天因为临时需要,使用了 WSL2,发现这玩意很奇怪,现在使用 WSL2 的最佳实践有么?

2023-07-21 09:04:49 +08:00
 yazoox

昨天因为临时需要 linux 环境,使用了 WSL2 。第一次使用,感觉怪怪的。

系统是 win11 enterprise 22h2, AMD 5945 128G 显卡亮机卡 4G
wsl 我没动过,安装好系统后就没玩过这个。昨天打开使用,版本就是这个
WSL version: 1.2.5.0
Kernel version: 5.15.90.1

项目是前端

windows terminal 里面安装了一个 ubuntu 就跑起来了。

碰到的问题,

或者,现在 wsl2 使用,大家有什么最佳实践的建议么?

p.s.公司的机器,杀毒软件和防火墙是必须打开的。

3598 次点击
所在节点    Windows
9 条回复
clorischan
2023-07-21 09:30:15 +08:00
不要把 WSL2 当成虚拟机用,(虽然底层确实是基于 Hyper-V, 但是微软做了很多处理的)
简单的说, 就是你这台电脑如果不是 Windows, 而是直接装的 Linux 的情况下
你应该怎么设置代理, WSL2 里面就怎么设置
mrpzx001
2023-07-21 09:34:01 +08:00
https://github.com/he426100/vscode-remote-containers
解决你有关 wsl 的一切问题,包括你说的代理
xwh
2023-07-21 09:44:06 +08:00
[root@localhost ~]# export http_proxy=http://172.19.48.1:7890
[root@localhost ~]# export https_proxy=http://172.19.48.1:7890
[root@localhost ~]# curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>



DigitalG
2023-07-21 10:06:38 +08:00
你自己内网的主机网关 nameserver 那些东西怎么配置的,可以一样设置 wsl 看看。

终端可以考虑别的好看的 ssh 终端。

wsl 可以导出导入 vhdx 文件 来转移(但不跨文件系统来用,很多数据放 wsl 的话,越来越大会不方便操作)。
pangxiang
2023-07-21 10:09:13 +08:00
在~/.bashrc 里添加 export http_proxy=http://主机 IP:代理端口
villivateur
2023-07-21 10:26:11 +08:00
关于 terminal 界面,这个界面不是你选什么终端工具就是什么样子吗?可以自己装个好看的终端然后跑 wsl
nirvam
2023-07-21 10:50:18 +08:00
WSL 有个比较讨厌的问题,是它的虚拟网卡的网段会变,导致无法通过固定的 IP 访问 Windows 宿主机。需要每次都 ip route 看一下,再改环境变量。

我采用的方案:
https://github.com/mike-barber/wsl-subnet-utility

Windows 中设置一个在系统启动时触发的计划任务,执行这个工具,把 WSL 的虚拟网关设置为 192.168.100.1 ,这样 WSL 里就可以固定代理地址:
export http_proxy=http://192.168.100.1:xxxx
export https_proxy=$http_proxy

记得 Windows 上的代理工具里,允许局域网内的访问。

另一个方案是通过读取 WSL 自动生成的 resolv.conf ,获取宿主机 IP
wdssmq
2023-07-21 10:52:45 +08:00
HOST_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
export http_proxy="socks5://${HOST_IP}:10808"
export https_proxy="socks5://${HOST_IP}:10808"

# Git
HOST_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
git config --global http.proxy "socks5://${HOST_IP}:10808"
git config --global https.proxy "socks5://${HOST_IP}:10808"
canbingzt
2023-07-21 15:15:57 +08:00
```bash
hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
port=7890
PROXY_HTTP="http://${hostip}:${port}"

export http_proxy="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}"

git config --global http.proxy "${PROXY_HTTP}"
git config --global https.proxy "${PROXY_HTTP}"
```

取消的话
```bash
unset http_proxy
unset https_proxy

git config --global --unset http.proxy
git config --global --unset https.proxy
```

同时需要在宿主机添加防火墙规则
```powershell
Remove-NetFirewallRule -DisplayName "WSL"
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/958484

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX