【问题标题】:How do I package an existing VM that was not created using vagrant up command?如何打包不是使用 vagrant up 命令创建的现有 VM?
【发布时间】:2013-01-08 08:41:01
【问题描述】:

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

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

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

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

如何打包我现有的虚拟机?

【问题讨论】:

    标签: virtual-machine virtualbox packaging vagrant


    【解决方案1】:

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

    文档:Vagrant - Base Boxes

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

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

    一旦盒子符合这些要求,只需使用vagrant package 命令创建便携式安装...

    更多文档:Vagrant - Boxes

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

    【讨论】:

    • 感谢您的回答。让我试着理解你在说什么。您建议我重新创建与当前相同的设置,但使用 vagrant,以便我可以完成包。是吗?
    • 不,我认为可以在事后注入依赖项。在vagrant up 之前有一段时间手动创建框,一次一步。仍然有可能让您的实例处于使其合规和可打包的状态。
    • 我很抱歉,但我认为在这种情况下我需要更多的帮助。我仍然没有完全把注意力集中在文档本身上。你能给我一个更完整的答案吗?谢谢。
    【解决方案2】:

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

    问题是: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,最好阅读文档并遵循这些规则,以便其他人使用。

    【讨论】:

      【解决方案3】:

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

      1. 您所指的packaging guide in "getting started" 假设您已经从一个流浪的基础盒子开始 并使用vagrant up 对其进行了初始化,而您还没有。这允许您打包您对 vagrant base box 所做的任何自定义。
      2. 如果您从头开始或从“普通”VirtualBox VM 开始,您需要创建一个vagrant base box。遵循基于 Ubuntu 的 guide 应该没问题。

      有一个detailed guide for creating vagrant boxes from scratch 使用 Oracle Enterprise Linux,这可能会有所帮助。你也可以试试VeeWee。

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

      更新

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

      1. vagrant packagecommand 允许您以与 1.0 中相同的方式打包您对现有 vagrant base box 所做的任何自定义。
      2. documentation for creating base boxes with VirtualBox 已在 1.1 中删除,但 docs 表明该过程保持不变,但现在额外的 metadata.json 文件 is required 因为 Vagrant 1.1 支持 multiple providers。

      【讨论】:

      • 1.1 已发布,文档已重新编写。有更新的机会吗?
      • 不错。顺便说一句,我刚刚读完 Vagrant 的创建者的“Vagrant: Up and Running”一书,它在文档中进行了更详细的介绍——尤其是关于盒子的创建,它有一整章。它与 v1.1.x 是最新的(即使它们现在是 1.3.x,我认为这本书没有任何损坏或过时的地方)。
      • 注意到本书出版后的一个变化:书中 config.vm.network 的参数是“hostonly”和“bridged”;此后,它们被重命名为“public_network”和“private_network”。
      • @odigity 如果您认为有帮助,请随时编辑答案并添加书中的更多信息。
      • 我刚开始学习vagrant,这对我很有用。如果有人知道我在哪里可以找到 Mitchell 的免费书籍 vagrant up and running,我将非常感激
      【解决方案4】:

      vagrant package --output box_name.box --base "vm 机器名" --vagrantfile 流浪文件

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

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

      【讨论】:

        【解决方案5】:

        查看更新后的文档以找到您的盒子应该具备的所有特性,如果您希望它与 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

        【讨论】:

          【解决方案6】:

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

          如果您从头开始或从“普通”VirtualBox VM 开始,那么您需要创建一个 vagrant base box。您应该按照基于 Ubuntu 的指南进行操作。

          【讨论】:

            【解决方案7】:

            就个人而言,打包过程的虚幻方面是--base 开关。我怀疑很多人可能都是这种情况。查看vagrant package --help 的描述。 The documentation 似乎也没有提及。

            我找到了这两个很棒的、深入的、逐步的指南,用于从最初是 VirtualBox 机器的机器创建 Vagrant 盒子:

            1. How to Create a CentOS Vagrant Base Box
            2. Creating base box from scratch for Vagrant

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

                正如这里提到的 - http://sysadm.pp.ua/linux/sistemy-virtualizacii/vagrant-box-creation.html 导入和打包 box 需要三样东西:

                • 安装来宾添加
                • 无密码 sudo
                • SSH 访问 所以你只需要登录到你的 Ubuntu 12.10,安装 Vbox Guest 添加,添加用户“vagrant”并使用无密码 sudo 访问。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-01-29
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-17
                  • 2022-01-05
                  相关资源
                  最近更新 更多