次のchefコマンドを実行しようとしています。
# install zombiejs, q (promises), should, coffee-script & mocha
execute "install q and zombiejs" do
cwd "/home/vagrant"
user "vagrant"
action :run
command "npm install -g q zombie should mocha coffee-script"
end
しかし、それが見つからないために失敗し続けますnpm
:
execute [install q and zombiejs](chef-redtail :: default line 205)エラーが発生しました:Errno :: ENOENT:そのようなファイルまたはディレクトリはありません-npm install -gq zombie should mocha coffee-script
vagrant ssh
コマンドを使用してvagrantにログインし、コマンドを手動で実行すると、完全に正常に機能します。rootとしてログインしsudo -i
、コマンドを実行してコマンドを実行すると、chefレシピが失敗するのと同じ理由で失敗します(npmはvagrantユーザーに対してのみローカルにインストールされ、rootではなくインストールされます。これが私が望んでいることです)。
では、どうすればこのchef execute
ブロックをrootではなくvagrant userとして実行するように指定できますか?
更新:これは私の問題を要約すると思います:
(ssh) /vagrant git:backbone ❯ whoami
vagrant
(ssh) /vagrant git:backbone ❯ which npm
/home/vagrant/.local/bin/npm
(ssh) /vagrant git:backbone ❯ echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i which npm
npm not found
http://tickets.opscode.com/browse/CHEF-2517経由
別の更新:それで私はこの矛盾に気づきました:
(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i export
HOME=/home/vagrant
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LOGNAME=vagrant
MAIL=/var/mail/vagrant
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
SHELL=/bin/zsh
SSH_AUTH_SOCK=/tmp/ssh-uJUopA4146/agent.4146
SUDO_COMMAND='/bin/zsh -c export'
SUDO_GID=1001
SUDO_UID=1000
SUDO_USER=vagrant
TERM=xterm
USER=vagrant
の違いに注意してくださいPATH
。エクスポートには/home/vagrant/.local/bin
ディレクトリがリストされていません...なぜ最初のエコーPATH
はそれで戻り、2番目のエクスポートはPATH
それなしで戻るのですか?これは問題ですか?