Vagrant 打包自己的VirtualBox机器

前提:virtualbox 、 vagrant 、 package 三个软件都安装好了

操作:

A> 通过 virtualbox 的管理界面,安装好虚拟机,并配置好相应的开发软件环境
a1> 安装增强功能,以便能挂载相应的共享目录
http://www.codelinux.cn/virtualbox-安装增强功能.html
a2> https://www.vagrantup.com/docs/synced-folders/basic_usage.html
a3> 通过vagrant 安装的VM,使用nginx做Web开发时,需要关闭 sendfile off; 配置 否则会造成更新CSS、图片、JS等静态资源无法更新
a4>https://github.com/hashicorp/vagrant/issues/351#issuecomment-1339640
B> 创建 vagrant 用户,并配置其密钥登陆,可以使用官方提供的,也可以自己生成
C> 运行命令,生成相应的box文件:
vagrant package --base virtualbox-machine-name --output new_name.box
D> 打包出来的文件,可以共享,其他人 vagrant box add new_name new_name.box 就可以使用了
E> vboxmanage list vms 可以查看所有已经存在的虚拟机,防止名字对应不上导致的错误,如下 :

虚拟机名字或参数错误导致的异常,参数应该是 -- 两个减号

Tips:如下Shell脚本,可以参考

#!/bin/bash

# 1. 下载官方公钥
wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub && echo "1. vagrant.pub下载完成"

# 2. 重命名authorized_keys,移动到.ssh文件下
mv vagrant.pub .ssh/authorized_keys && echo "2. 重命名为authorized_keys"

# 3. 修改authorized_keys文件权限 除了属主vagrant以外,group和其他用户都不可写
chmod go-w /home/vagrant/.ssh/authorized_keys  && echo "3. 修改authorized_keys权限完成"

cat .ssh/authorized_keys

echo "证书设置完毕,可以关机制作镜像了"

 

在使用上面的官方密钥之后,当我们启动机器的时候,会提示密钥不安全,已自动更新密钥,更新后的密钥路径可以通过 vagrant ssh-config 查看

问题:
1. powershell 版本过低
解决:
https://social.technet.microsoft.com/wiki/contents/articles/21016.how-to-install-windows-powershell-4-0.aspx
进入以上地址,根据系统版本下载相应的版本,如果在安装的时候提示服务啥的无法启动,请开启[Windows的自动更新]等相关服务,并注销或重启

2. 如果 virtubox中的machine使用了物理磁盘,则无法打包
3. 在打包的时候,会验证SSH登陆,如果没有配置成功,则也可以打包,但强迫症!!
4. SSH端口,如果原虚拟机已修改,则打包后的box,在初始化后,需要修改配置文件
config.ssh.port = 2102
5. 关于自动挂载共享目录问题:需要在基础包中【安装增强功能】,然后再打包