这两天突发奇想,打算放弃了 Parallels Desktop 9,继续折腾 Virtual Box。主要是因为,之前 PD 中国在淘宝的官方店取消了对中国大陆的年付费,也就是说,按照惯例,PD 一年升级一次,今年八月又要花去两百来块。二来,Vagrant 对 VirtualBox 的支持相当好,我也正打算试试这样的比较便捷的命令行启动虚拟机的方式,省的多开一个窗口了。

Vagrant 的中文资料比较少,并且网路上基本都是拿人家封装好的 box 直接用,对于我这种非要自己折腾的人来说,遇到的坑就比较多了。记录一下。

首先是安装 VirtualBox 和 Vagrant,官网上都有安装包,暂且不说了。

然后是下载需要配置的系统安装镜像,以我的 Ubuntu 为例,我使用的是 ubuntu-12.04.4-desktop-amd64.iso 比较稳定的 LTS 桌面版,因为,某些时候,可能还是需要去 ubuntu 下跑下图形程序什么的。

VirtualBox 中安装好 Ubuntu。接着做一下基本设置:

1.安装基础的软件,配置编辑器

sudo apt-get -y install vim git-core
sudo update-alternatives --config editor

2.新建用户组,将自己的用户加入该组:

sudo groupadd admin
sudo usermod -G admib YOURUSERNAME

3.visudo 编辑 sudoer,加入如下配置:

Defaults env_keep="SSH_AUTH_SOCK"
%admin ALL=NOPASSWD: ALL

4.安装 openssh-server

sudo apt-get -y install openssh-server

5.配置 ssh 密钥。(如果你不知道 ssh 密钥是怎么回事,GitHub这份帮助 相信会很有用)

6.安装 VirtualBox 的 Guest Addition,这里需要注意的是,光是安装网上教程安装 GA 是不够的,在最新版 VirtualBox 和 Ubuntu 12.04 下测试失败,会无法挂载共享目录。本人翻遍了 GitHub 上 issue,才找到一个 workaround:

sudo ln -s /opt/VBoxGuestAdditions4.3.10/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions

7.进入 VirtualBox 的 VM (ex: ~/VirtualBox VM/vagrant-precise32) 目录,打包虚拟机:

vagrant package --base vagrant-precise64

这个命令会在当前目录下生成 package.box 的虚拟机文件。

8.导入 box 到 Vagrant,这一步好比把这个虚拟机包放到你的 Vagrant 书架,并命名为 vagrant-precise64 随时取用:

vagrant box add vagrant-precise64 package.box

9.进入你的 project 项目,因为我主要用于 Web 开发,因此我直接进到了我的工作目录 ~/Work。

注意:一般教程会直接让你在这一步执行 vagrant init, 但是,如果你和我一样没有使用默认的 vagrant 用户,vagrant 密码,以及默认的 insecure ssh 密钥的话,直接 init 会导致初始化的时候默认导入 insecure ssh。这样,问题就来了,因为你没有建立 vagrant 用户,又没有配置默认的 insecure ssh,结果就是无法登录虚拟机了,一直在 retry。。

所以,这里,可以直接 copy 一份 Vagrantfile, 修改好里面的这几项先:

config.ssh.username
config.ssh.private_key_path
config.ssh.forward_agent

这样,我们就没有执行 vagrant init 这个命令,这会造成 vagrant 不知道用你书架上哪个虚拟机,所以,顺便在 Vagrantfile 中配置下使用的 box 名字:

config.vm.box = "vagrant-precise64"

即,之前 vagrant box add 后面你指定的 box 名字。

ok 继续执行:

vagrant ssh-config

检查 ssh 的配置已经是正确的,到这里,就配置完成了。

启动虚拟机:

vagrant up

到这里,虚拟机就配置完成了。如果你和我一样做 Web 开发,默认的端口转发的 NAT 网络可能不够方便,继续编辑 Vagrantfile:

config.vm.network "private_network", ip: "192.168.33.10"

这样就开起了 host-only 模式,一般自己开发已经足够了,记得自己在 HOST 机器上修改好 hosts 就可以了。

最后一步:

vagrant reload

让修改的配置生效,等重启完成,尽情得去配置开发环境吧,nodejs,nginx,php,mysql。。。

好吧,如果你看到这里觉得太折腾了的话,直接移步官方文档,按照默认的来,使用人家打包好的 box,一样可以轻松拥有。Vagrant Getting Start

参考: