QA@IT

couldn't find HOME environment -- expanding `~'と表示されてChef-Soloが動かない

3703 PV

環境はCentOS6.4,Rails3.2です。

現在Chefを使って、サーバの起動時に自動的にResqueというGemの内部で使われている、Redisというサーバを起動するためのrakeファイルを実行したいのですが、実行中に「couldn't find HOME environment -- expanding `~'」というエラーがでて起動しません(詳細のログは後述します)。

このChefはSudoやRootにログインして実行した場合には、正常に動く事は確認しています。

以下にこのエラーの再現手順を書かせていただきます。

  • サーバ起動時に動かすため「/etc/rc.d/local」にChef-Soloの起動をするためのスクリプト(自作でファイル名はchef-start.sh)を、実行する様に書く。
/bin/bash /home/lain/chef-start.sh 1>/var/log/chef/sucess.log 2>/var/log/chef/error.log
  • 上記のスクリプト(chef-start.sh)では、rvmでChefを入れてるため、rootでも動かせる様に特定のシェルを実行させる
#!/bin/bash
source /home/lain/.rvm/environments/ruby-1.9.3-p392
chef-solo -c /home/lain/.chef/solo.rb -j /home/lain/.chef/chef.json
  • このchef.jsonの中では、自作のrakeファイルを動かしています

自分でも何が原因か切り分ける事が出来なかったので、少し長々と書かせていただきました。
何かきづいた点があればご指摘いただけると幸いです。

/var/log/chef/sucess.log内のエラー内容(sucessなのにエラーとはこれいかに・・・)

[2013-05-14T17:21:09+09:00] INFO: Processing script[Start Redis] action run (start_redis::default line 1)
^[[0m
================================================================================^[[0m
^[[31mError executing action `run` on resource 'script[Start Redis]'^[[0m
================================================================================^[[0m

^[[0m
Mixlib::ShellOut::ShellCommandFailed^[[0m
------------------------------------^[[0m
Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20130514-1497-1889ruf" ----
STDOUT:
STDERR: rake aborted!
couldn't find HOME environment -- expanding `~'
/home/lain/.rvm/gems/ruby-1.9.3-p392/gems/yard-0.8.5.2/lib/yard.rb:11:in `expand_path'
/home/lain/.rvm/gems/ruby-1.9.3-p392/gems/yard-0.8.5.2/lib/yard.rb:11:in `<module:YARD>'
/home/lain/.rvm/gems/ruby-1.9.3-p392/gems/yard-0.8.5.2/lib/yard.rb:3:in `<top (required)>'
・
・
・
・
/home/lain/rails/hogeserver/config/application.rb:7:in `<top (required)>'
/home/lain/rails/hogeserver/Rakefile:5:in `require'

回答

サーバー起動時とありますんで、おそらくinit.dから起動されるからなんでしょうがその場合HOMEはないのでchef-start.sh で適当な環境変数HOMEをexportしてあげればいいんじゃないでしょうか。

編集 履歴 (0)
  • $HOMEをexportすると動く様になりました。ありがとうございます。
    それにしてもinit.dから起動すると、 $HOMEが定義されないんですね、意外です。もしご存知であれば、なぜ$HOMEが定義されないか教えていただけますか?
    -
  • initデーモンはカーネル読み込み後最初に起動するプログラムです。ユーザーが起動するものではありません、この段階ではまだ誰もログインしてません。HOME環境変数はユーザーに紐づくものですので誰もログインしていないこの状態では設定されていません。といったところですかね。 -
  • WindowsだとMy Documentsってログインユーザーによって変わるので、誰かのMy DocumentsにWindows起動に必要なファイルあったら変ですよね?感覚としてはそういう感じです。・・・これは蛇足かな。 -
  • なるほどです。ありがとうございます。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。