【问题标题】:Chef/Vagrant - how to point omnibus installer to an already downloaded file?Chef/Vagrant - 如何将综合安装程序指向已下载的文件?
【发布时间】:2014-09-12 02:32:05
【问题描述】:

每次我 vagrant destroy 然后 vagrant up 时,Vagrantfile 处理都会退出并获取与上次相同的旧 Chef。

config.omnibus.chef_version = :latest

如何避免每次下载 34MB?有时我确实想从头开始,而不是使用 vagrant provision

我看过它从哪里获取 Chef,我自己下载到

/Users/jluc/kds2/chef/vagrant/chef_11.14.6-1_amd64.deb

通过注释掉 chef_version 指令,我有点希望使用 install_url,但它似乎对我的文件不满意。

#config.omnibus.chef_version = :latest
config.omnibus.install_url = '/Users/jluc/kds2/chef/vagrant/chef_11.14.6-1_amd64.deb'

跳过 install_url 并将 chef_version 指向我下载的文件也没有帮助。

文档 (https://github.com/schisamo/vagrant-omnibus) 说 install_url 应该是一个安装脚本。如何使用正常的安装脚本,但使用我下载的文件?

@彼得

太好了。听起来它会工作,但很难做到。我在安装脚本中有这个,我在 Vagrantfile 中引用它它适用于 vagrant ssh

#!/usr/bin/env bash
dpkg --install /vagrant/chef_11.14.6-1_amd64.deb

但不是来自 Vagrantfile:

config.omnibus.install_url = '/vagrant/utilities/chefinstall.sh'

【问题讨论】:

  • 安装 url 在您的主机上是相对的,或者是远程 URL。
  • 如果您将上面的内容更改为我在回答中更改的内容,应该可以! :)

标签: vagrant chef-infra


【解决方案1】:

vagrant-omnibus 插件允许您提供任何脚本来安装 chef。因此,如果您将 chef install 放入 Vagrantfile 所在的文件夹中,您可以指向一个如下所示的安装脚本:

#!/usr/bin/env bash
dpkg --install /vagrant/chef_11.14.6-1_amd64.deb

把它和你的 Vagrantfile 放在同一个文件夹中。然后在你的 Vagranfile 中:

config.omnibus.chef_version = '11.14.6'
config.omnibus.install_url = './chefinstall.sh'

应该可以。它很聪明,它会检查盒子上安装了哪个版本的 Chef,并且只有在缺少时才运行脚本。

你也可以使用vagrant cachier插件,这样就不用每次都下载了,最新版的omnibus插件会挂在缓存中:

config.omnibus.cache_packages = true

因此,如果您主要担心必须重复下载,请查看vagrant-cachier

【讨论】:

  • 我现在正在使用手机,但是当我下次使用我的机器时,我会做一个要点示例来说明我的意思是编辑
  • 也可能是您在 Vagrantfile 中的订购意味着在安装综合包之前进行厨师供应。您能否将您的整个 Vagrantfile 发布在一个要点中,如果您愿意,我会看看我是否可以让它工作? :)
【解决方案2】:

Peter 关于添加 chef_version 的建议使它工作得很好。

这是正确的答案,我只是把这篇文章留下,因为它提供了更多关于目录结构的上下文,这是我在使用 Chef 文档时经常遇到的问题。

config.omnibus.chef_version = '11.14.6'
config.omnibus.install_url = install_url

详情:

(注意:不看 vagrant-cachier,因为我试图限制我对非核心(Opscode)食谱/插件的依赖。让 Berkshelf 稳定让我在 OSX Mavericks 上花了一周的大部分时间。

安装脚本 chefinstall.sh:

#!/usr/bin/env bash
dpkg --install /vagrant/chef_11.14.6-1_amd64.deb

这是我的目录设置

|-- Vagrantfile
|-- chef_11.14.6-1_amd64.deb
|-- utilities
|   |-- chefinstall.sh

从主机看,权限是这样的:

audrey:utilities jluc$ ls -l chefinstall.sh 
-rwxr-xr-x  1 jluc  staff  68 10 Sep 12:19 chefinstall.sh

还有来自客人的,以防万一:

vagrant@vagrant:~$ ls -l /vagrant/utilities/chefinstall.sh 
-rwxr-xr-x 1 vagrant vagrant 68 Sep 10 12:19 /vagrant/utilities/chefinstall.sh

这是我放入 Vagrantfile 的内容,直到我按照 Peter 的建议添加了 chef_version 才成功。

#relative (to Vagrantfile) on host 
install_url = './utilities/chefinstall.sh'

puts "jlp:install_url:#{install_url}:"

这是 Pete 发现的使它起作用的原因,添加了 chef_version:

config.omnibus.chef_version = '11.14.6'
config.omnibus.install_url = install_url

在 chef_version 之前,我发现这个 hack 也很有效。

config.vm.provision :shell, :inline => "sudo  /vagrant/utilities/chefinstall.sh"

【讨论】:

    猜你喜欢
    • 2013-10-02
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2012-02-12
    • 2015-06-05
    相关资源
    最近更新 更多