43

我安装了 VirtualBox,然后在其中安装了 Ubuntu 12.10 Server Base OS。我已经在其中安装了各种 php 包和其他包。我的朋友推荐我使用 Vagrant,这样我就可以轻松地与我的队友分享我的设置。

因为我当前的 VirtualBox VM 不是使用 创建的vagrant up,所以我不确定如何打包它。Vagrant的文档谈到了包装,但首先说:

在完成本页的其余部分之前,请确保虚拟环境是通过运行 vagrant up 构建的。

就我而言,我现有的 VM 最初不是使用 vagrant up 创建的。

如何打包现有的 VM?

4

9 回答 9

26

需要意识到的重要一点(并且 vagrant 文档对此并不太清楚)是包装有两种“风味”:

  1. 您所指的“入门”中的包装指南假设您已经从一个 vagrant base box 开始并使用 初始化它vagrant up,而您没有。这允许您打包您对 vagrant base box 所做的任何自定义
  2. 如果您从头开始或从“普通”的 VirtualBox VM 开始,就像您一样,您需要创建一个vagrant base box。您应该按照基于 Ubuntu的指南进行操作。

有一个使用 Oracle Enterprise Linux从头开始​​创建 vagrant box 的详细指南,这可能会有所帮助。你也可以试试VeeWee

或者,您可以从Ubuntu 12.10 基础盒开始并移植您的自定义,在这种情况下,您可以使用更简单的第一种打包方式。

更新

以上是指 Vagrant 1.0。1.1 中的情况略有变化,特别是文档已被重写:

  1. vagrant package 命令允许您以与 1.0 相同的方式打包您对现有 vagrant base box 所做的任何自定义。
  2. 使用 VirtualBox 创建基本盒子的文档在 1.1 中已删除,但文档建议该过程保持不变,但现在需要metadata.json一个附加文件,因为 Vagrant 1.1 支持多个提供程序
于 2013-02-24T10:16:04.480 回答
10

vagrant package --output box_name.box --base "vm 机器名" --vagrantfile Vagrantfile

确保正确设置端口转发和 SSH 密钥。

这可能是一个很好的例子:https ://github.com/okfn/ckan/wiki/How-to-Create-a-CentOS-Vagrant-Base-Box

于 2013-08-14T18:03:59.423 回答
8

任何 VirtualBox 都可以打包到 Vagrant Base Boxes(基本上是带有Vagrantfile.

问题是:VM 不是按照 vagrant base box 构建的,如果你没有在 vagrantbox.es 上共享它,那么它会没事的。

只需安装 vagrant(通过 gem 或安装程序),在 VM 文件夹中运行以下命令将其打包到 .box

注意:对于 Vagrant 1.2.x,推荐的安装方法是使用操作系统特定的包。Ruby Gem 不适用于 1.2.x。

vagrant package --base ubuntu --output /path/to/ubuntu.box

请记住,如果您想与其他人共享 vagrant base box,最好阅读文档并遵循这些规则,以便其他人更轻松。

于 2013-02-06T00:01:13.263 回答
5

虽然不是一个完整的答案,但我认为您可以从文档中获得所需的内容,该文档非常广泛。我相信这vagrant up只是设置 Vagrant“盒子”的一种便捷方式。一个盒子要符合 Vagrant 有许多要求。它们在这里被描述...

文档:Vagrant - 基础盒

一个盒子所需的裸骨如下......

  • VirtualBox Guest Additions 用于共享文件夹、端口转发等。
  • 对 vagrant 用户具有基于密钥的身份验证支持的 SSH
  • Ruby & RubyGems 安装 Chef 和 Puppet
  • Chef 和 Puppet 提供配置支持

一旦一个盒子符合这些要求,它应该只是使用vagrant package命令来创建一个便携式安装的问题......

更多文档:Vagrant - Boxes

所以,虽然我没有一个完整的答案,但我从来没有这样做过,我认为有可能让你的安装进入一个允许你打包和分发它的状态。

于 2013-01-24T14:52:38.473 回答
3

使用“VBoxManage list vms”命令!我将它与 sudo 一起使用,只是看到没有列出 VMS。因此,对正确的经过身份验证的用户使用该命令。上面的答案也有助于制作盒子。

于 2014-03-26T15:41:28.147 回答
1

就个人而言,包装过程的虚幻方面是--base开关。我怀疑很多人可能都是这种情况。查看vagrant package --help说明。该文档似乎也没有提及它。

我发现了这两个很棒的、深入的、逐步的指南,可以从最初是 VirtualBox 机器的机器创建 Vagrant 盒子:

  1. 如何创建 CentOS Vagrant Base Box
  2. 为 Vagrant 从头开始​​创建基础框
于 2014-01-13T20:59:38.433 回答
1

如此处所述 - http://sysadm.pp.ua/linux/sistemy-virtualizacii/vagrant-box-creation.html 您需要三样东西才能导入和打包盒子:

  • 安装访客添加
  • 无密码 sudo
  • SSH 访问所以你只需要登录到你的 Ubuntu 12.10,安装 Vbox Guest 添加,添加用户“vagrant”和无密码 sudo 访问。
于 2015-10-18T08:57:39.677 回答
0

如果您希望它与 vagrant 无缝工作,请查看更新的文档以找到您的盒子应该具备的所有特征:

http://docs.vagrantup.com/v2/virtualbox/boxes.html

您还应该看看一个名为 veewee 的伟大项目,它允许您从头开始编写 vagrant box 的生成脚本。这意味着 veewee 实际上会从您的发行版中下载 ISO 并将其安装在一个原始的 virtualbox 机器上,然后配置和安装所有依赖项。

它为所有不同类型的 linux 发行版提供了许多配方:

https://github.com/jedi4ever/veewee

这里有更多的盒子。他们说他们是木偶盒,但他们与所有提供者(厨师、木偶和 shell 脚本)合作:

https://github.com/puppetlabs/puppet-vagrant-boxes

于 2013-11-04T09:48:57.577 回答
0

您所指的“入门”中的包装指南假设您已经从一个 vagrant 基础框开始并使用 vagrant up 对其进行了初始化,而您没有。这允许您打包您对 vagrant base box 所做的任何自定义。

如果您从头开始或从“普通”VirtualBox虚拟机开始,就像您所做的那样,您需要创建一个 vagrant base box。您应该按照基于 Ubuntu 的指南进行操作。

于 2013-11-22T11:35:55.817 回答