TLDR:hyper-v + virtual switch + Windows terminal ssh + x410
由于楼主日常开发 C++ 服务端,对 linux 环境强需求。读书时电脑只安装 arch Linux 非常方便,工作后在公司 mbp 用 docker 解决。去年年底买了台电脑玩游戏之余,捣鼓了一些开发环境解决方案,总算找到了最完美的办法,分享给 v 友。
已知使用 WSL2 的种种问题如下
网络相关的各种问题:静态 ip,端口映射等等,总之不如 host 和子系统之间直接 ip 访问方便;
不支持 systemd,有残废的解决方法:systemd-genie,实测不方便
文件 io 性能差
我的解决方法:
hyper-v 创建虚拟机;
hyper-v 中创建一个虚拟的 internal switch,给 host 和虚拟机都绑定静态 ip,再 nat 给这个交换机联网;
hyper-v 的虚拟机原生可以开机自启,比 vmware 方便、轻量多了;
部署 openssh server,Windows terminal 加一个配置默认 ssh 至虚拟机;达到了和 wsl 一样的打开 terminal 就可以使用;
买了个 x410 软件,类似于 vcxsrv,但是对高分屏的支持更好,界面也更友好;这样也支持了使用 gui 的软件,clion 、google chrome 用起来比 wslg 流畅很多!
唯一的问题只剩下文件共享不如 wsl 方便,但是既然开发环境都已经搬上虚拟机了,Windows 里边也就不要再放开发相关的东西了吧,极少情况需要的时候用 sftp 客户端也并不麻烦🐶
1
inhzus OP 1. 自从卸载了 wsl2,楼主 docker desktop 启动不起来的问题也解决了
2. 用 x410 这类软件当然有个问题是还要再安装中文输入法,我开发过程中不会输入中文,所以忽略; 3. 这样的开发环境大概用了一个月,日常 vim + clion + bash 操作非常方便,今天正好看到有讨论 linux de,联想到于是分享出来(楼主开发环境下也不用再折腾双系统 linux 的桌面配置了,工作之后再也没精力折腾之前的 i3 config,简简单单开发 |
2
kekxv 2021-05-19 23:29:18 +08:00 via iPhone
我用 clion + bazel + bazel remote + mingw64 也很方便
|
3
ch2 2021-05-19 23:36:32 +08:00
我的 docker desktop 跟 WSL2 是兼容的,但是不需要那玩意,直接用 WSL2 里的 docker 就行了
Hyper-V 也是不如 WSL2 方便的,两个同时都用了很久,最终放弃了 Hyper-V |
4
ClericPy 2021-05-19 23:45:34 +08:00
现在主力基本 manjaro 了, Windows 上基本只打游戏, 偶尔需要 Linux 环境, 其实 multipass 挺香的...
Hyper-V 跟我好几个安卓虚拟机(Vbox) 冲突, 至于 WSL 当年用过一年多, 后来实在不喜欢就被我净化服务批处理一块给清理掉了. |
5
nightwitch 2021-05-20 00:54:50 +08:00
windows 家庭版默认不带 hyperv,溜了溜了
|
6
falcon05 2021-05-20 01:07:42 +08:00 via iPhone
希望 2121 年的时候还能这么快乐
|
7
hanxiV2EX 2021-05-20 01:23:55 +08:00 via Android
顺便给你一个建议,如果平时不是使用 vim 的话,可以试试 vscode 的 remote 功能,很强大。
|
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 就行了 |
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,打开就是虚拟机。 |
10
ho121 2021-05-20 07:28:51 +08:00 via Android
反过来不好么,linux + kvm + windows guest
|
11
jamesxu 2021-05-20 08:18:04 +08:00 via iPhone
我也折腾了半天,直接 vmware player + ubuntu 虚拟机,性能也 OK
|
12
inhzus OP @ClericPy hyper-v 确实存在和虚拟机软件冲突的问题,不过去年 vmware workstation 16 已经可以并存了。我也不做移动端开发,确实没感觉到这个问题
@hanxiV2EX 浏览代码一直在用 vscode remote,确实好用! @BeautifulSoap 之前看到你发的帖子了,确实是解决了~但我自己觉得不够干净…就又找其他办法折腾 docker 的需求我确实比较弱,偶尔在虚拟机里边跑一些 demo 已经够用了 @ho121 因为新电脑就是想把 3070 用起来玩游戏😂用 Linux 并不是主要目的 |
13
ktblack 2021-05-20 08:38:50 +08:00 via Android
也提供一个不一样的思路,像我自己做些小项目几个月的样子会换一套环境,这种情况我用的 docker-machine + virtualbox 每个项目创建一个 machine,相关的数据库、redis 全部装在里面,没启动的项目也不会相互影响。
|
14
yEhwG10ZJa83067x 2021-05-20 08:43:02 +08:00
目前我用:virtualbox + vagrant + Windows terminal ssh 这套 win10 下的开发方案,觉得很方便,至少做到,代码+IDE 放 win 环境里,运行结果放虚拟机里。
|
15
yEhwG10ZJa83067x 2021-05-20 08:45:15 +08:00
因为上面那套开发实在是太稳定和顺手了,一直没有折腾 wsl,等有空我也体验一下
|
16
Cloutain 2021-05-20 09:24:16 +08:00
Windows 下快乐编程的正确姿势就是只做 Windows 开发 ~~~
|
17
gam2046 2021-05-20 09:32:00 +08:00
各位大佬有没有遇到一些( c/cxx )开源项目使用 WSL2 编译会有一些奇奇怪怪的错误?最后我又专门开个虚拟机去编译。
|
18
edk24 2021-05-20 09:43:21 +08:00
ubuntu 20.04 + windows10 双系统, 工作用 linux, 娱乐换回 windows
|
19
qW7bo2FbzbC0 2021-05-20 09:50:06 +08:00
@BeautifulSoap #8 怎么配置内存占用上限?
|
20
wms 2021-05-20 10:07:20 +08:00
WSL2 不能访问串口
|
21
theprimone 2021-05-20 10:26:08 +08:00
我前端,升级 WSL 2 之后不能访问主机上的服务很蛋疼,前段时间解决了这个问题:
https://github.com/microsoft/WSL/issues/4619#issuecomment-821142078 |
22
hulala1021 2021-05-20 11:52:15 +08:00
wsl2 前断时间用了一下,感觉很吃内存。。
又用回 virtualbox,感觉现在 virtualbox 越来越好用了 |
23
harwck 2021-05-20 13:01:34 +08:00 via Android
Dual boot 才是最佳的解决方案
|
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 |
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 |
26
arphone 2021-05-20 16:34:40 +08:00
WSL2 不支持串口太蛋疼了
|
27
imycc 2021-05-21 14:20:58 +08:00
vmware 我挂了个文件夹共享,然后放到了快捷访问上。日常就一些小脚本需要把数据导出来,执行完复制出来就好,没有什么不适。
vscode remote development 真香,我用了四五年 vim 然后叛变了。 |