2121 年俺 Windows 快乐编程的正确姿势 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
inhzus
V2EX    Windows

2121 年俺 Windows 快乐编程的正确姿势

  •  1
     
  •   inhzus 2021-05-19 22:21:08 +08:00 via iPhone 7572 次点击
    这是一个创建于 1610 天前的主题,其中的信息可能已经有所发展或是发生改变。

    TLDR:hyper-v + virtual switch + Windows terminal ssh + x410

    由于楼主日常开发 C++ 服务端,对 linux 环境强需求。读书时电脑只安装 arch Linux 非常方便,工作后在公司 mbp 用 docker 解决。去年年底买了台电脑玩游戏之余,捣鼓了一些开发环境解决方案,总算找到了最完美的办法,分享给 v 友。

    已知使用 WSL2 的种种问题如下

    • 网络相关的各种问题:静态 ip,端口映射等等,总之不如 host 和子系统之间直接 ip 访问方便;

    • 不支持 systemd,有残废的解决方法:systemd-genie,实测不方便

    • 文件 io 性能差

    我的解决方法:

    1. hyper-v 创建虚拟机;

    2. hyper-v 中创建一个虚拟的 internal switch,给 host 和虚拟机都绑定静态 ip,再 nat 给这个交换机联网;

    3. hyper-v 的虚拟机原生可以开机自启,比 vmware 方便、轻量多了;

    4. 部署 openssh server,Windows terminal 加一个配置默认 ssh 至虚拟机;达到了和 wsl 一样的打开 terminal 就可以使用;

    5. 买了个 x410 软件,类似于 vcxsrv,但是对高分屏的支持更好,界面也更友好;这样也支持了使用 gui 的软件,clion 、google chrome 用起来比 wslg 流畅很多!

    唯一的问题只剩下文件共享不如 wsl 方便,但是既然开发环境都已经搬上虚拟机了,Windows 里边也就不要再放开发相关的东西了吧,极少情况需要的时候用 sftp 客户端也并不麻烦

    32 条回复    2021-12-27 17:34:13 +08:00
    inhzus
        1
    inhzus  
    OP
       2021-05-19 22:41:11 +08:00 via iPhone
    1. 自从卸载了 wsl2,楼主 docker desktop 启动不起来的问题也解决了

    2. 用 x410 这类软件当然有个问题是还要再安装中文输入法,我开发过程中不会输入中文,所以忽略;

    3. 这样的开发环境大概用了一个月,日常 vim + clion + bash 操作非常方便,今天正好看到有讨论 linux de,联想到于是分享出来(楼主开发环境下也不用再折腾双系统 linux 的桌面配置了,工作之后再也没精力折腾之前的 i3 config,简简单单开发
    kekxv
        2
    kekxv  
       2021-05-19 23:29:18 +08:00 via iPhone
    我用 clion + bazel + bazel remote + mingw64 也很方便
    ch2
        3
    ch2  
       2021-05-19 23:36:32 +08:00
    我的 docker desktop 跟 WSL2 是兼容的,但是不需要那玩意,直接用 WSL2 里的 docker 就行了
    Hyper-V 也是不如 WSL2 方便的,两个同时都用了很久,最终放弃了 Hyper-V
    ClericPy
        4
    ClericPy  
       2021-05-19 23:45:34 +08:00
    现在主力基本 manjaro 了, Windows 上基本只打游戏, 偶尔需要 Linux 环境, 其实 multipass 挺香的...

    Hyper-V 跟我好几个安卓虚拟机(Vbox) 冲突, 至于 WSL 当年用过一年多, 后来实在不喜欢就被我净化服务批处理一块给清理掉了.
    nightwitch
        5
    nightwitch  
       2021-05-20 00:54:50 +08:00
    windows 家庭版默认不带 hyperv,溜了溜了
    GG668v26Fd55CP5W
        6
    GG668v26Fd55CP5W  
       2021-05-20 01:07:42 +08:00 via iPhone
    希望 2121 年的时候还能这么快乐
    hanxiV2EX
        7
    hanxiV2EX  
       2021-05-20 01:23:55 +08:00 via Android
    顺便给你一个建议,如果平时不是使用 vim 的话,可以试试 vscode 的 remote 功能,很强大。
    BeautifulSoap
        8
    BeautifulSoap  
       2021-05-20 01:38:15 +08:00 via Android   1
    又是时候祭出我这帖子了,「终于找到给 wsl2 分配固定 ip 的方法」
    https://v2ex.com/t/744955

    我是和 lz 相反,基于 wsl2 开发已经很长时间了,我就是从完整 hyper-v 虚拟机迁移过来的,开发体验比完整 hyper-v 虚拟机好很多

    lz 提出的问题,wsl2 没有静态 ip 这个我的帖子已经给出了个比较好的解决办法了

    文件 io 性能这个,lz 都用 xserver 跑 linux 的 gui 了,这个 wsl2 也行的啊。这不就意味着用 wsl2 和你 hyper-v 一样也根本无需和宿主做文件交互了吗。而且用 wsl2 额外的好处是虽然 io 性能不太好,但是毕竟直接资源管理器就能文件交互,而且 wsl2 内部也能极其方便访问宿主,有时候搞几个文件是真非常方便。而且 wsl2 里随处运行 code 命令跑起 vscode 做编辑也是很舒服的,这些都是不用任何配置直接开箱即用的。Hyper-V 的话你装完系统后想达到同样体验配置起来很麻烦

    然后还有一个 wsl2 的好处很多人都似乎没怎么注意过的,wsl2 配合 Docker for Windows 是真的绝配
    因为 wsl2 里跑的所有发行版都是类似共用内存的。比如我在 wsl2 里装了 Ubuntu 和 Debian 两个发行版,然后我给 wsl2 设了 6G 内存占用上限,那么结果就是 Ubuntu 和 Debian 共用这 6G 内存的上限而不是每个发行版各占 6G 上限(即最大吃掉 12G 内存)。Docker for Windows 也是同理,启用 wsl2 backend 后实际上 docker 就是作为一个独立的 wsl2 发行版在跑的。Ubuntu+Docker 共用 6G 的内存上限,是真比各自跑单独虚拟机节约内存
    而且 wsl2 backend 的 docker 不光能给 wsl2 内发行版用,还能给宿主 Windows 用。我 wsl2 内用 docker 做开发,然后 Windows 用 docker 跑 aria2 之类的下载服务,都只用装一个 docker 就行了
    mason961125
        9
    mason961125  
       2021-05-20 02:22:18 +08:00
    +1 只不过日常用 VSCode 的 Remote SSH 进虚拟机,反正我是没感觉到和本地有什么区别。

    即使 WSL2 是一个用 Hyper-V 实现的轻量级虚拟机,但是里面阉割了一大堆东西,搞了些莫名其妙的 hack,真的非常非常难受。

    顺便吐槽一下 Hyper-V 的内存分配:开了动态内存,虚拟机内部获取到的内存信息是你设置的内存大小,即使你最大内存设置的比这个值要大的多,它也就只能获取这么多;不开动态内存,虚拟机启动之后直接给你占满你分配的值,而不是和 VMWare/VirtualBox 一样用多少分配多少。导致现在开机基本就是 12G 的内存使用量...不过我倒是能理解这个问题,毕竟 Hyper-V 作为一项在服务器上用的 hypervisor,宿主几乎是不需要多大内存的,Hyper-V 要关心的是 guest 之间的内存用量,即:动态内存是会动态的分配 /回收一个 guest 的内存给另一个 guest 用,宿主?你说啥我听不到...

    另外,强推 VSCode 的 Remote SSH 插件。由于 Windows 10 已经自带了 OpenSSH,去服务中启用 OpenSSH Authentication Agent 添加 key,并且在 Windows 的用户目录中 .ssh/config 配置好,打开虚拟机简直和用本地完全没有区别。Remote SSH 相当于在 Windows 上跑一个渲染界面,虚拟机内部跑 vscode 的所有后端处理逻辑,和用本地的 VSCode 可以说没有任何差距。

    Windows Terminal 里面配置一个直接 ssh 到虚拟机的 item,设置为默认 tab,打开就是虚拟机。
    ho121
        10
    ho121  
       2021-05-20 07:28:51 +08:00 via Android
    反过来不好么,linux + kvm + windows guest
    jamesxu
        11
    jamesxu  
       2021-05-20 08:18:04 +08:00 via iPhone
    我也折腾了半天,直接 vmware player + ubuntu 虚拟机,性能也 OK
    inhzus
        12
    inhzus  
    OP
       2021-05-20 08:26:52 +08:00 via iPhone
    @ClericPy hyper-v 确实存在和虚拟机软件冲突的问题,不过去年 vmware workstation 16 已经可以并存了。我也不做移动端开发,确实没感觉到这个问题

    @hanxiV2EX 浏览代码一直在用 vscode remote,确实好用!


    @BeautifulSoap 之前看到你发的帖子了,确实是解决了~但我自己觉得不够干净…就又找其他办法折腾
    docker 的需求我确实比较弱,偶尔在虚拟机里边跑一些 demo 已经够用了

    @ho121 因为新电脑就是想把 3070 用起来玩游戏用 Linux 并不是主要目的
    ktblack
        13
    ktblack  
       2021-05-20 08:38:50 +08:00 via Android
    也提供一个不一样的思路,像我自己做些小项目几个月的样子会换一套环境,这种情况我用的 docker-machine + virtualbox 每个项目创建一个 machine,相关的数据库、redis 全部装在里面,没启动的项目也不会相互影响。
    yEhwG10ZJa83067x
        14
    yEhwG10ZJa83067x  
       2021-05-20 08:43:02 +08:00
    目前我用:virtualbox + vagrant + Windows terminal ssh 这套 win10 下的开发方案,觉得很方便,至少做到,代码+IDE 放 win 环境里,运行结果放虚拟机里。
    yEhwG10ZJa83067x
        15
    yEhwG10ZJa83067x  
       2021-05-20 08:45:15 +08:00
    因为上面那套开发实在是太稳定和顺手了,一直没有折腾 wsl,等有空我也体验一下
    Cloutain
        16
    Cloutain  
       2021-05-20 09:24:16 +08:00
    Windows 下快乐编程的正确姿势就是只做 Windows 开发 ~~~
    gam2046
        17
    gam2046  
       2021-05-20 09:32:00 +08:00
    各位大佬有没有遇到一些( c/cxx )开源项目使用 WSL2 编译会有一些奇奇怪怪的错误?最后我又专门开个虚拟机去编译。
    edk24
        18
    edk24  
       2021-05-20 09:43:21 +08:00
    ubuntu 20.04 + windows10 双系统, 工作用 linux, 娱乐换回 windows
    qW7bo2FbzbC0
        19
    qW7bo2FbzbC0  
       2021-05-20 09:50:06 +08:00
    @BeautifulSoap #8 怎么配置内存占用上限?
    wms
        20
    wms  
       2021-05-20 10:07:20 +08:00
    WSL2 不能访问串口
    theprimone
        21
    theprimone  
       2021-05-20 10:26:08 +08:00
    我前端,升级 WSL 2 之后不能访问主机上的服务很蛋疼,前段时间解决了这个问题:

    https://github.com/microsoft/WSL/issues/4619#issuecomment-821142078
    hulala1021
        22
    hulala1021  
       2021-05-20 11:52:15 +08:00
    wsl2 前断时间用了一下,感觉很吃内存。。
    又用回 virtualbox,感觉现在 virtualbox 越来越好用了
    harwck
        23
    harwck  
       2021-05-20 13:01:34 +08:00 via Android
    Dual boot 才是最佳的解决方案
    BeautifulSoap
        24
    BeautifulSoap  
       2021-05-20 14:00:37 +08:00
    @hjahgdthab750
    C:\Users\[用户名] 目录下新建个文本文件,文件名 `.wslconfig`,内容:

    ```
    [wsl2]
    memory=5GB
    ```
    除了内存,还有其他选项可以选,如指定 kernel,禁用 swap 之类的,参考: https://github.com/MicrosoftDocs/WSL/blob/master/WSL/wsl-config.md#wsl-2-settings
    charlie21
        25
    charlie21  
       2021-05-20 14:17:17 +08:00
    Win 10 Home 版本的系统不支持 Hyper-V 虚拟机(但可以用 wsl 2 )
    Full Hyper-V is not available in Home.
    https://github.com/MicrosoftDocs/WSL/issues/899#issuecomment-690753034
    arphone
        26
    arphone  
       2021-05-20 16:34:40 +08:00
    WSL2 不支持串口太蛋疼了
    imycc
        27
    imycc  
       2021-05-21 14:20:58 +08:00
    vmware 我挂了个文件夹共享,然后放到了快捷访问上。日常就一些小脚本需要把数据导出来,执行完复制出来就好,没有什么不适。

    vscode remote development 真香,我用了四五年 vim 然后叛变了。
    junksheng
        28
    junksheng  
       2021-05-24 20:52:16 +08:00 via Android
    @edk24 太麻烦了,本来也是这样想的,但我发现我懒得关机,关机切换后浏览器那些东西又要重开
    edk24
        29
    edk24  
       2021-05-25 09:38:53 +08:00
    @junksheng windows 不关机好像是会越来越慢,但现在也不一定 关机还是要适当关机的。 不然一个突然停电你失去的东西更多~~~
    junksheng
        30
    junksheng  
       2021-05-25 09:47:58 +08:00 via Android
    @edk24 一般只有更新才关机了,以前会变卡现在不会了...实在是懒
    Rorysky
        31
    Rorysky  
       2021-12-27 17:20:35 +08:00
    @kekxv 一个人用 编译 chache ?
    Rorysky
        32
    Rorysky  
       2021-12-27 17:34:13 +08:00
    @justrand vagrant 就是虚拟机,没啥区别
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5326 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 05:56 PVG 13:56 LAX 22:56 JFK 01:56
    Do have faith in what you're doing.
    ubao msn 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