昨天因为临时需要,使用了 WSL2,发现这玩意很奇怪,现在使用 WSL2 的最佳实践有么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yazoox
V2EX    Windows

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

  •  
  •   yazoox 2023-07-21 09:04:49 +08:00 4330 次点击
    这是一个创建于812 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天因为临时需要 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 就跑起来了。

    碰到的问题,

    • 访问不了 github (或者说 google.com),因为要安装 nvm ,等等。google 搜索了一下,说设置 reslv.conf ,nameserver 8.8.8.8 。但是设置了这个,公司内部的 git 就访问不了。结果,我来回改这个 reslv.conf 文件,折腾死我了...... 这台公司的电脑(我是 microsoft remote desktop 上去的),是有 proxy 的,可以仅设置到浏览器,也能够设置到系统里,就是不知道怎么共享给 wsl 里面的系统。比如 wsl 直接使用 host's network?
    • 在 v2 搜索了 wsl2 ,看到有兄弟说可以设置网络,但是没有看到详细的解释。似乎要安装 hyper-v 。需要到 windows features turn on/off 里面,把 hyper-v management tool 安装上去么?我也希望能够把开发环境放到 sub linux 里面,然后外面通过 vscode 连接
    • 我使用 wsl --shutdown ,关闭了子系统。下次 开 terminal -> new tab 选择 ubuntu ,几秒钟就打开了,这个子系统这么快的么?看到兄弟们说其实就是 hyper-v 的虚拟机系统?另外,terminal 界面好丑,theme 里面可选也很少.
    • 看到有坛子里有兄弟说,可以 sub linux 里再使用 docker, 然后把开发环境安装到 docker 里面。这么绕来绕去,性能不得下降很多?以后还可以直接把这个 sub linux 的文件拷贝带走?这个是怎么回事?咋操作?\

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

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

    clorischan
        1
    clorischan  
       2023-07-21 09:30:15 +08:00   1
    不要把 WSL2 当成虚拟机用,(虽然底层确实是基于 Hyper-V, 但是微软做了很多处理的)
    简单的说, 就是你这台电脑如果不是 Windows, 而是直接装的 Linux 的情况下
    你应该怎么设置代理, WSL2 里面就怎么设置
    mrpzx001
        2
    mrpzx001  
       2023-07-21 09:34:01 +08:00   1
    https://github.com/he426100/vscode-remote-containers
    解决你有关 wsl 的一切问题,包括你说的代理
    xwh
        3
    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=">
    <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
        4
    DigitalG  
       2023-07-21 10:06:38 +08:00
    你自己内网的主机网关 nameserver 那些东西怎么配置的,可以一样设置 wsl 看看。

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

    wsl 可以导出导入 vhdx 文件 来转移(但不跨文件系统来用,很多数据放 wsl 的话,越来越大会不方便操作)。
    pangxiang
    5
    pangxiang  
       2023-07-21 10:09:13 +08:00
    在~/.bashrc 里添加 export http_proxy=http://主机 IP:代理端口
    villivateur
        6
    villivateur  
       2023-07-21 10:26:11 +08:00
    关于 terminal 界面,这个界面不是你选什么终端工具就是什么样子吗?可以自己装个好看的终端然后跑 wsl
    nirvam
        7
    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
        8
    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
        9
    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
    ```
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3636 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 05:10 PVG 13:10 LAX 22:10 JFK 01:10
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86