知识库

个人知识管理

用户工具

站点工具


利用vagrant创建box

从零开始制作一个vagrant镜像box

Vagrant 是一个用来构建和管理虚拟机环境的工具,配合virtual box能够快速搭建统一的开发环境。Vagrant 有着易于使用的工作流,并且专注于自动化,降低了开发者搭建环境的时间,提高了生产力。

Vagrant管理的虚拟机叫做box,官网的box仓库地址下载很慢,所以我们尝试自己做一个box。

测试环境

安装 virtual box和vagrant, 我们基于ubuntu Server 18.04搭建我们的基础Box,如下步骤对应软件版本为

  • Win10 专业版 1903
  • Virtual Box 6.0.14 和对应拓展包
  • vagrant_2.2.6_x86_64
  • ubuntu-18.04.3-live-server-amd64.iso

安装Ubuntu Server虚拟机

新建一个linux 虚拟机,选择对应的选项

需要注意的是虚拟机的名字,后面会用到,我们这里取名为ubuntu1804

基本上一路确认即可,少数步骤做了改动。

为了加速软件的下载,安装时将软件源设为了国内的网易源地址

设定用户名时,用户名推荐设为vagrant,这是大部分公开的box镜像默认用户名。

安装时记得勾选 openssh server,后续使用ssh连接用的上。

其他的选项随自己需求定。

等待安装完成后重启。

配置虚拟机环境

虚拟机安装完成后,我们需要配置相应的环境,包括需要打包的开发环境等。

安装Virtual Box拓展包

vagrant启动的virtual box虚拟环境会用到文件共享功能(方便主机和虚拟机之间文件共享),该功能依赖Virtual Box的拓展包,需要我们进行相关配置。

点击Virtual Box菜单栏,选择设备安装增强功能

然后在ubuntu server中依次执行如下命令安装拓展包

sudo apt-get update
sudo apt-get install linux-headers-$(uname -r) build-essential dkms
sudo mount /dev/cdrom /mnt
cd /mnt
sudo ./VBoxLinuxAdditions.run

为了避免文件共享的时候出现权限问题,我们将当前用户添加到Virtual Box所在组。

sudo usermod -aG vboxsf vagrant

可以查看/etc/group验证结果

安装vagrant密钥

后续使用vagrant ssh连接虚拟机时,默认使用密钥对的形式,我们可以导入默认的密钥,方便我们后续使用,免得每次连接虚拟机都要输入密码。

默认密钥地址在 vagrant github 仓库中。

mkdir -p ~/.ssh
wget -O ~/.ssh/authorized_keys https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R vagrant:vagrant ~/.ssh

设置vagrant无密码执行sudo命令

此处有个坑

按照上述过程制作出的box文件在启动的时候会出现错误,无法正常和主机共享目录,错误提示为 mkdir -p /vagrant命令执行失败,根据启动日志和相关资料issues 1659,设置vagrant用户无密码执行sudo命令后解决了。

我们设置系统默认编辑器为vi, 本人习惯使用vi。

sudo update-alternatives --config editor

执行如下命令

sudo visudo

在文件下方加入如下语句

vagrant ALL=(ALL) NOPASSWD:ALL

然后保存。

关闭不必要的服务

ubuntu18.04默认启动了一个CloudInit服务来连接云数据中心,对本地开发来说这完全没必要,我们禁用掉此服务。

sudo dpkg-reconfigure cloud-init

在弹出的对话框中取消所有勾选项

清理安装包

sudo apt-get purge cloud-init
sudo rm -rf /etc/cloud/
sudo rm -rf /var/lib/cloud/

如果现在重启,由于系统中某些服务在等待网络连接的原因,可能导致系统无法启动或启动时间过长,我们需要禁用掉相关的服务。

查找系统中依赖在线网络的服务

sudo systemctl show -p WantedBy network-online.target

图中iscs服务都和网络存储有关,本地开发可以不需要。

禁用对应服务

sudo systemctl disable iscsid.service
sudo systemctl disable open-iscsi.service

本段参考Ubuntu 18.04 Chronicles: removing cloud-init

清理镜像

为了缩小最后打包的镜像文件大小,需要清理一些缓存文件

sudo apt-get autoremove
sudo apt-get autoclean
sudo rm -rf /var/cache/apt/archives/*

现在可以关闭虚拟机了。

sudo shutdown -h now

打包制作box

确保虚拟机处于关闭状态。

我们新建一个目录boxes,在这个目录下,使用如下命令打包刚刚制作的虚拟机。

vagrant package --base ubuntu1804 --output ubuntu1804.box

其中ubuntu1804就是我们刚刚新建的虚拟机名字, ubuntu1804.box是打包后的box文件。

打包完成后,可以看到一个默认的ubuntu1804.box文件,这个就是我们配置好的虚拟机镜像。

我们可以将这个文件复制到不同机器上使用。

添加vbox到vagrant

虚拟机镜像被vagrant管理使用必须先添加到vagrant中,我们先查看当前存在的box列表。

vagrant box list

然后添加我们刚刚制作的box

vagrant box add ./ubuntu1804.box --name ubuntu1804

使用已添加的vobx

新建一个目录,test-project,在该目录下,执行如下命令

mkdir test-project
cd test-project
vagrant init ubuntu1804

该命令会生成一个Vagrantfile配置文件

启动虚拟环境

vagrant up

然后我们通过ssh进入刚刚的虚拟环境。

vagrant ssh

虚拟机的/vagrant目录就是Vagrantfile工程所在目录。

搞定,收工!

参考引用

利用vagrant创建box.txt · 最后更改: 2019/11/25 03:26 由 alvis