万万没想到,有一天也会沦落到在一台4G内存的Win7笔记本上搞linux编程,还我的16核Z600……好吧,抱怨也是没有用的,和销售人员一样型号的13寸笔记本,标志着我的coding生涯从此全面进入虚拟机和SSH时代。
先不说外接键盘、鼠标、显示器的酸爽,作为开发编译环境的虚拟机就是个问题。放在某个server上,锁在大楼的某处,感觉蛮牢。直到一次急等着release一个feature时怎么也连不上,跑去一看,那台server已经被人大卸八块了……幸好最后装上还能用,着实惊出一身冷汗。这件事提醒我真的需要好好考虑怎么将开发环境管理好,减少重新配置环境的开销和风险,甚至为整个团队构建更高效的开发和测试环境,提高团队效率……
解放生产力的共产主义理想先不说,说起虚拟机的设置、部署和迁移,vagrant是鼎鼎大名了。按照官网的描述,vagrant是用于创建和配置轻量级、可复用、跨平台的开发环境的工具。
vagrant的主要特点
- 支持多个虚拟化工具,良好的跨平台性能。vagrant支持VirtualBox, Hyper-V, VMware和Docker等虚拟化工具,用户也可以定制provider。
- 提供可配置的虚拟机管理方法。Vagrant的配置文件,使用Ruby的语法描述。通过定义Vagrantfile,可以对虚拟机的网络设置、共享文件、端口转发、内存、CPU等进行定制,通过vagrantfile就可以方便进行部署和迁移。
- 提供了基于标准box定制的privisioning机制。
- 便利的打包和分发过程。vagrant 提供了高效的打包(box)和分享帮助,提供了注册官方的box repository,用户也可以架设自己的分享服务。
安装使用
vagrant安装过程相当的简便,windows, linux和mac os上都有一键式安装包。主要操作也非常简单,可以参考官方教程。
1 | agrant box add # 添加box的操作 |
共享文件的链接问题
如果单机使用,vagrant可以很方便的映射好共享文件夹。但是由于不同文件系统的原理和功能有差异,这个共享文件有时还是会遇到一些麻烦的。比如在windows上安装vagrant管理多个linux的Vitrualbox虚拟机,如果在linux虚拟机中操作共享文件夹,因为windows操作系统不支持linux一样的软连接,就可能遇到文件链接的错误。下面就是npm在安装node.js包时遇到的错误:
1 | npm ERR! Error: UNKNOWN, symlink '../which/bin/which' |
解决这个问题可以给npm加上参数npm install --no-bin-links
,也可以在vagrant配置中修改provider参数,然后重启vagrant。这里注意需要在windows用管理员权限启动vagrant。
1 | config.vm.provider "virtualbox" do |v| |
Vagrantfile文件示例
1 | # -*- mode: ruby -*- |