1、日常工作习惯了在 MacOS 下使用 VSCODE 做开发,但是产品运行环境是在 CentOS 上,有时候会用 Docker 去做编译,但是有些环境 docker 也胜任不了,就只能搭建虚拟机,开共享文件夹,达到在 macos 上写代码,在虚拟机中去编译运行的效果。。
2、另外,有时候需要做探索方面的工作,需要装各种各样的环境,如果一直在 macos 上做,也容易导致 macos 越来越臃肿,我想到的办法也是弄虚拟机,虚拟机有快照,弄完了恢复就行。但是装的虚拟机的桌面在 mbpr 上的显示效果都好渣啊。。
3、以上,有时候会觉得自己是被 macos 的给毒害了,😓。。。。
除此之外,还有什么其他方法吗?求大佬指教。
1
whileFalse 2018-02-19 20:18:30 +08:00 4
你用的啥语言,和 OS 相关度很大吗,或者有很多系统调用?
|
2
zhangxiao 2018-02-19 20:21:19 +08:00
举几个 Docker 不够用的例子?
|
3
HuHui 2018-02-19 20:21:31 +08:00 via Android
试试 vagrant
|
4
billows OP @whileFalse 语言和 OS 的相关度不大,但有些阶段会有相关技术只在特定系统下有效的,就可以理解成和 OS 相关度很大了。
|
5
eurokingbai2 2018-02-19 20:23:29 +08:00
sshfs
|
6
Philippa 2018-02-19 20:25:30 +08:00 via Android
编译成机器码以 Go 和 Rust 为例都很方便, Python 等 Docker 全部解决。隔离环境是进阶开发必备习惯。楼主趁机还要推动一下公司变化, 用 Docker 集群随便加机器容器并发隔离环境很好用的。
|
7
hujianxin 2018-02-19 20:25:48 +08:00
docker 什么情况不能胜任呢? docker 既可以作为开发环境,也可以作为生产环境,妥妥的替代虚拟机呀
|
8
billows OP |
9
qq292382270 2018-02-19 20:26:19 +08:00
或许你需要再买一台机器..
|
10
sutra 2018-02-19 20:26:36 +08:00
主要区别就是 BSD-Style 的命令行参数和 GNU-Style 的命令行参数吧。
|
11
neoblackcap 2018-02-19 20:26:57 +08:00 2
首先你要对系统有了解,不要去调用平台相关的 API。如果你对性能要求不是特别高,请优先使用跨平台的库。第三你应该将你代码分成平台相关与平台无关的,平台无关的代码写成一个动态库。先对其进行测试,之后再编写对应的平台相关代码,最后进行集成。具体做法你可以查看 UNP。里面的代码是在 FreeBSD 上面跑的,但是代码是在 OS X 上写的
|
12
billows OP @neoblackcap 我不是经常要这么弄,就是最近刚好要使用 libvrit 相关的东西,牵涉到 KVM、QEMU 等。现在想写点测试代码,就出现这些情况了。
@Philippa 恩,就是 GO 语言。KVM 这个无解啊。 @hujianxin KVM 相关,比 docker 更底层一些了。。。 |
13
zjsxwc 2018-02-19 20:39:17 +08:00
vagrant 楼主没用过?
|
14
WatcherHangzhou 2018-02-19 20:42:02 +08:00
vagrant +1
|
16
billows OP |
17
linghutf 2018-02-19 20:46:14 +08:00
从来不用 linux 桌面,parallel 开无界面 linux 干活
|
18
zjsxwc 2018-02-19 20:53:25 +08:00
@billows
``` 据我所知 vagrant 是对 vbox、VM 等做了封装,撇开可复用性不谈,就我这里侧重的点而言,和我提到的解决方案有什么优势吗? ``` 你提到的解决方案就是虚拟机里搞啊,和 vagrant 没本质区别,但 vagrant 使用 Vagrantfile 文本更方便管理,一条命令可以搞定的你只用虚拟机里乱七八糟的事情。 https://www.vagrantup.com/intro/index.html ``` Why Vagrant? Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team. To achieve its magic, Vagrant stands on the shoulders of giants. Machines are provisioned on top of VirtualBox, VMware, AWS, or any other provider. Then, industry-standard provisioning tools such as shell scripts, Chef, or Puppet, can automatically install and configure software on the virtual machine. ``` |
19
lfzyx 2018-02-19 20:56:54 +08:00
|
20
pathbox 2018-02-19 20:57:56 +08:00 via iPhone
go 可以交叉编译。macOS 也是 unix 内核,我在 mac 下开发 Go 项目没遇到什么问题
|
21
holulu 2018-02-19 21:04:25 +08:00 via Android
情况差不多,在 macos 下写,开 linux vm 编译和测试,ssh 连进 vm
|
22
mcfog 2018-02-19 21:50:10 +08:00 via Android
所以你是开发 linux 下的 gui 程序嘛?为什么还给 linux 装桌面呢(摊手
|
23
neoblackcap 2018-02-19 21:55:31 +08:00
@billows 你这情况,开源 Virtualbox 或者买 Vmware Fusion。或者向公司申请开发机。没有更好的办法了,OS X 开发 linux 应用程序可以,但是你这个都很有可能是系统编程,抛弃所在的平台而使用 OS X,并不会令你的效率提升,反而很有可能拖累你啊。
|
24
x86vk 2018-02-19 22:06:06 +08:00 via Android
其实楼主实机用 linux+btrfs 就行(
|
25
sagaxu 2018-02-19 22:11:00 +08:00
我 linux 下开发编译,windows 下运行,Go 不是自带交叉编译吗?
|
26
hujianxin 2018-02-19 22:17:02 +08:00
其实,我更愿意工作主机用 Linux 台式机、工作站,身边放一台 mac 或者 windows 笔记本来处理别的东西。
|
27
hujianxin 2018-02-19 22:17:18 +08:00
比如 qq,钉钉,微信,office 等
|
28
littlewey 2018-02-19 22:37:12 +08:00 via iPhone
如果需要 native linux 环境开发 libvirt kvm 相关的话,用 mac 当作终端,在 remote centOS/ubuntu 之类的 server 上搞呢?
|
29
GooMS 2018-02-20 00:02:09 +08:00 via Android
我用 Linux 做开发,搞砸了只需要几分钟重装
|
30
ipwx 2018-02-20 00:07:20 +08:00 via iPhone
写好单元测试,用好连续集成,没了。
|
31
likuku 2018-02-20 00:46:35 +08:00
要做 linux 的桌面产品?
那还是买台对 linux 桌面(显卡)兼容比较好的电脑吧。 |
32
yopming 2018-02-20 06:13:36 +08:00
parallel 虚拟机吧
|
33
httplife 2018-02-20 08:41:48 +08:00
公司没有测试用的服务器?
|
34
yanyuechuixue 2018-02-20 09:16:44 +08:00 via Android
用公司的服务器啊,然后用 vscode 里的插件比如 rsync,编辑好会自动同步到远程,直接在那边编译就好啦
|
35
Enochyun 2018-02-20 11:28:09 +08:00
我是买了一个 centos 的服务器,然后在服务器上安装一个 git,本地克隆这个 git 每次本地写好代码 push 到云端调试,就这样。(公司是使用 svn 做版本控制和发布调试)
|
36
billows OP @httplife
@yanyuechuixue @Enochyun 公司资源不太够,自己购买的话,其实还原和快照也没那么方便呀。 @mcfog @hujianxin @littlewey 你们说的方法可能都是在 linux 终端用类似 vim 之类的编辑器写代码。。我问题里有说我还没那个水准。。。 @zjsxwc 装好了 vagrant,也在用,是比直接操作 virtualbox 方便,但是现在卡壳了。 用 sync_folder 功能时,提示不认识 vboxfs 文件类型,我知道是 virtualbox 的插件相关问题导致的。但是看文档,vagrant 提供的 box 都是要求安装好插件的呀,难道还得自己手动安装?我用的官方的 centos/7 |
37
ospider 2018-02-20 16:34:45 +08:00 via Android
别瞎折腾,linux 的代码就老老实实在开发机上写,非要在本地运行有个卵用,环境不一样都各种问题,更何况系统都不一样
|
38
tairan2006 2018-02-20 18:25:39 +08:00
不调用原生 API 就没啥问题啊…我好像没遇到过问题
|
39
wizardforcel 2018-02-20 21:10:22 +08:00
golang 能有啥问题,又不是 C/C++。
|
40
leslie000666 2018-02-21 10:07:09 +08:00 via Android
是为了避免因为开发和生产系统,环境导致程序出现问题?
|
41
adadada 2018-02-21 10:13:35 +08:00
我是做 KVM 和 QEMU 开发的,也在用 mac,来说说我的经验。我不用 Libvirt,所以情况可能和题主有所不同。根据开发的内容对 KVM 的依赖程度,主要分为三种情况:
1. 只依赖 QEMU 不依赖 KVM,例如大部分的设备模拟 (virtio ...) 和 QMP 接口。这种情况下基本就是在 mac 上编译和运行 QEMU。当然,因为 QEMU 主要是为 Linux 环境开发的,mac 上的编译环境经常会被 break 掉,所以可能需要开发者在 upstream 修复之前自己去定位和修复。此外,TCG 通常会比较慢,但是在 upstream 逐渐加入 Hypervisor Framework 支持后 (Paolo 的一部分 patch 已经合并到 upstream),可能会有所改观。 2. 轻度依赖 KVM,例如涉及 MSR 处理和中断处理的地方。这个度不太好定义,还是需要开发者自己把握。这种情况基本上就是要上支持 nested virtualization 的虚拟机了。我目前用的是 VMware Fusion,这个也只能说是勉强能用 (Mac 上的虚拟机对 nested virtualization 的支持普遍不好,更不要提 VirtualBox 这种玩具级别的完全不支持 nested virtualization 的虚拟机了)。代码的话,可以通过 VMware Fusion 的 shared folder 和 VM 共享。 3. 以上都不适用的情况,例如需要使用 nested virtualization 环境下没有的 KVM 特性,只有物理机上有的特性,或者对性能有需求的场景等。这种情况就只能上物理机了。代码的话可以通过 rsync 同步。 |
42
mritd 2018-02-21 15:16:34 +08:00 via iPhone
不行就物理机加 CI 吧
|
43
Mirana 2018-02-21 15:40:58 +08:00
ssh 到虚拟机啊,不要用虚拟机原生的桌面
|
44
gongzhang 2018-02-22 09:23:41 +08:00 via iPhone
注意大小写 macOS
|
45
billows OP |
46
zhangdawei 2018-02-22 11:01:58 +08:00
@hujianxin 能详细介绍下吗
|