V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
inhzus
V2EX  ›  Windows

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

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

    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,溜了溜了
    falcon05
        6
    falcon05  
       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   ·   实用小工具   ·   923 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:30 · PVG 05:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.