私はあることを理解しようとしており、これについて他の人の意見を聞きたいと思っています。私はUbuntuサーバー(11.10)に素晴らしいオムニバスインストール完璧に動作しました。chef-client を実行できましたが、問題なく動作しました。
その後、RVM と 2 つの Ruby をインストールしましたが、そこから問題が発生し始めました。RVM をシステム全体にインストールした直後、つまり次のコマンドを実行しました。
curl -L https://get.rvm.io | sudo bash -s stable
そして、2 つの Ruby をインストールしました (Ruby の 1 つをシステムのデフォルトの Ruby として設定)。chef-client を実行できなくなりました。通常の一般ユーザーとして実行すると、「コマンドが見つかりません」というメッセージが表示されました。RVM がいくつかの PATH を混乱させているのが原因だと思いました。root として実行してみようと思いました。つまり、次のようになります。
sudo su -
chef-client
結果は同じでした。その後、何人かの人が提案していたrvmsudoを試してみましたが、これも役に立ちませんでした。そこで最後の試みとして、次のように実行しました。
sudo chef-client
これでうまくいきました!なぜ上記が機能し、chef -client を root として実行 (つまり sudo su -; chef-client) しても機能しないのか、本当に困惑しています。何か見落としているのでしょうか? 少し混乱しているので、ヒントや説明をいただければ幸いです。chef-client をデーモンとして root として実行したいのですが、上記の sudo コマンドではそれができません。ユーザーに nopasswd を設定すればおそらく機能することはわかっていますが、ここで何が起こっているのか本当に理解したいです ;)
答え1
パスの読み込みに問題があるようです。
オムニバスインストーラーはChefをインストールし/opt/chef/bin/chef-client
、シンボリックリンクを作成します。/usr/bin/chef-client
参照1のすべてのユーザーが利用できるようになります$PATH
。
rvmをインストールすると、$PATHが混乱します。具体的には、Chefがどのrubyを使用するかです。現在実行中のenvのrubyをロードする実行時。
で を実行すると、の環境sudo su -
に変更され、ユーザーの環境を設定する関連する profile/bashrc/bash_profile ローダーがすべて実行されます。root
で実行する場合sudo
、環境全体をロードしないため、RVM はパスを変更しません。
シェルの違いによる影響を確認するために実行できる別のテストは、次のとおりです。
sudo which ruby
sudo su - which ruby
そして違いを比較してみましょう。
ぜひご覧になってみてくださいシェフクライアントcookbook を実行すると、chef-client サービスを制御/構成するためのサービス デーモンをセットアップするのに役立ちます (すべてのサーバーでこれを使用します)。
rvm はシステム全体でデフォルトでインストールされているため、root (または Chef を実行するユーザー、ただし root をお勧めします) に対して無効にする必要がある場合があります。