web-dev-qa-db-ja.com

Vagrantベースイメージの上にchef-clientをインストールします

Chefを使用してgraphiteサーバーをインストールしようとしていますが、VMでchef-soloまたはchef-clientのいずれかが見つからないというエラーが発生しました。 Ubuntu 12.04.AMD64 LTSを使用しています。これはサーバーバージョンであるため、chef-clientはインストールされません。 13バージョンではchef-clientが自動的にインストールされることは知っていますが、13バージョンを使用することはできません。

私はグーグルで検索し、何人かの人々がボックスにsshしてapt-get installchef-clientを提案するのを見ました。

私の質問は、シェフがキックインする前にchef-clientをプレインストールできる方法はありますか?基本的に、シェフプログラムに生の画像をダウンロードして、ユーザーからの追加の手動手順なしですべてを実行してもらいたいと思います。出来ますか?

私のVagrantfile:

Vagrant.configure("2") do |config|
    config.vm.box = "ubuntu-12.04-AMD64"
    config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-AMD64-vagrant-disk1.box"
    config.vm.hostname = "graphite"
    config.vm.network :forwarded_port, guest: 8080, Host: 9090

    config.vm.provision :chef_solo do |chef|
      chef.cookbooks_path = "cookbooks"
      chef.roles_path = "roles"
      chef.data_bags_path = "data_bags"
      chef.add_role "Graphite-Server"
      chef.add_role "StatsD-Server"
    end
end

エラーログ:

[default] Running provisioner: chef_solo...
The chef binary (either `chef-solo` or `chef-client`) was not found on
the VM and is required for chef provisioning. Please verify that chef
is installed and that the binary is available on the PATH.

ありがとう

25
Nam Nguyen

私は2つの解決策を見つけましたが、どちらも期待どおりに機能します。

1)方法1:Vagrantfileに、

config.omnibus.chef_version = :latest

これにより、chef-soloまたはchef-clientのいずれかがインストールされていることを確認しますVMで、シェフのプロビジョニングに必要です。オムニバスプラグインを使用するには、最初にプラグインをインストールしてください:vagrant plugin install vagrant-omnibus

2)方法2:使用config.vm.provisionここで説明されているようにインラインシェル: https://github.com/mitchellh/vagrant-aws/issues/19#issuecomment-15487131 。 Vagrantfileに、次を追加します。

config.vm.provision "Shell", path: "utils/tools/install_chef.bash"

私が書いたスクリプトutils/tools/install_chef.bashは次のようになります。

#!/bin/bash

function error
{
    echo -e "\033[1;31m${1}\033[0m" 1>&2
}

function checkRequireRootUser
{
    if [[ "$(whoami)" != 'root' ]]
    then
        error "ERROR: please run this program as 'root'"
        exit 1
    fi
}

function installChef()
{
    if [[ "$(which chef-client)" = '' ]]
    then
        local chefProfilePath='/etc/profile.d/chef.sh'

        curl -s -L 'https://www.opscode.com/chef/install.sh' | bash && \
        echo 'export PATH="/opt/chef/embedded/bin:$PATH"' > "${chefProfilePath}" && \
        source "${chefProfilePath}"
    fi
}

function main()
{
    checkRequireRootUser
    installChef
}

main

更新:

次のエラーが発生した場合:Unknown configuration section 'omnibus'。オムニバスプラグインがないことを意味します。インストールするには、次のように入力します。vagrant plugin install vagrant-omnibus

40
Nam Nguyen

Chefがインストールされていない場合、基本的にinstall.shスクリプトを実行する vagrant-omnibus プラグインをお勧めします。

8
StephenKing