Vagrant 是一款我非常喜欢的软件。它能优雅地管理虚拟环境。无论你的团队开发人员本地用Mac OS X、Windows、Linux等系统,它都可以通过管理虚拟化的技术来达到一致的开发体验。当然你可能会说都9102年了,用 Docker 不就可以了吗?嗯,当然可以。它们的关系并不是互斥的,相比之下 Vagrant 有自己特定的使用场景。Vagrant 本身是管理工具,它搭建虚拟环境既可以基于VirtualBox,VMware,也可以基于 Docker。 这些不是本文讨论的重点。如果你感兴趣,请自行搜索。
言归正传。一直在用 Vagrant 来管理我本地的虚拟环境。最近我发现我用的镜像之一 CentOS 版本已经有更新了,于是我想升级一下。结果由于我国的互联网网络环境越来越局域,导致下载非常慢。于是我就动了离线安装的心思。当然 Vagrant 很强大,自身支持离线安装。按照命令行的提示,我操作了一番:
用迅雷将所需的 .box 镜像下载到本地;
用命令将该镜像离线安装。如下:
# 镜像所在地址 /path/XLDownload/virtualbox.boxvagrant box add --name centos/7 /path/XLDownload/virtualbox.box
结果很顺利!!成功。
但是因为我有强迫症,总是喜欢复查一下。如下:
➜ vagrant box add --name centos/7 /path/XLDownload/virtualbox.box==> box: Box file was not detected as metadata. Adding it directly...==> box: Adding box 'centos/7' (v0) for provider:box: Unpacking necessary files from: file:///path/XLDownload/virtualbox.box==> box: Successfully added box 'centos/7' (v0) for 'virtualbox'!➜ lltotal 8drwxr-xr-x 3 facebook staff 96B 7 15 09:26 0drwxr-xr-x 3 facebook staff 96B 9 7 2018 1804.02-rw-r--r-- 1 facebook staff 58B 7 15 09:43 metadata_url
仔细的人可能已经注意到该镜像版本居然是0(我之前的老版本为1804.02),然而我要更新的其实是1905.1。也就是说虽然安装成功了。但是版本没有检测成功。仔细观察了一下我们就会发现这句话“==> box: Box file was not detected as metadata. Adding it directly...”。于是我去官方搜了一下 https://www.vagrantup.com/docs/boxes/format.html#box-metadata。发现还有一种安装方式是先通过 metadata 文件安装的。所以创建文件如下:
{"name": "centos/7","description": "This box contains centos/7","versions": [{"version": "1905.1","providers": [{"name": "virtualbox","url": "file:///path/XLDownload/virtualbox.box"}]}]}
取名 metadata.json,然后执行:
➜ vagrant box add metadata.json==> box: Loading metadata for box 'metadata.json'box: URL: file:///path/XLDownload/metadata.json==> box: Adding box 'centos/7' (v1905.1) for provider: virtualboxbox: Unpacking necessary files from: file:///path/XLDownload/virtualbox.box==> box: Successfully added box 'centos/7' (v1905.1) for 'virtualbox'!
复查一下。
➜ vagrant box listcentos/7 (virtualbox, 1804.02)centos/7 (virtualbox, 1905.1)
完美!
至此已经结束了。希望对大家有帮助。如果没有玩过 Vagrant 的朋友,欢迎加入。
对了,别忘了关注我的公众号。




