Prev / Next

2013-06-13 / serverspec で command not found

最近 serverspec の更新に追いつくため作業していてぶつかったのが
PATH が通っていなくて command not found になるという症状。

0.4.12 の以下の変更で、絶対 PATH で書かれていたコマンドが相対 PATH に変更されている。

- Change command path to relative by mizzy · Pull Request #129 · mizzy/serverspec h
  https://github.com/mizzy/serverspec/pull/129

さらに、0.4.13 の以下の変更で、spec_helper.rb で PATH を設定できるようになっている。

- Add custom path to the command by mizzy · Pull Request #133 · mizzy/serverspec h
  ttps://github.com/mizzy/serverspec/pull/133

ということで、spec_helpler.rb に

c.path = '/usr/sbin:/sbin'


と書いてみたけど、command not found のまま。

この時、

sudo PATH=/usr/sbin:/sbin:$PATH command


のように展開されるが、どうも PATH=/usr/sbin:/sbin:$PATH が効いていない。

sudo と path でググると、

Defaults env_keep += "PATH"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin


を sudoers に書けばよいというのが見つかり、これで PATH が通るようになった。

この設定についてはあとで調べる。

また、上の書き方だと、全てのユーザに対して有効になるので、
以下のようにして特定のユーザに対しての設定にした方がよい
(以下の例ではユーザ fumi に対する設定)。

Defaults:fumi env_keep += "PATH"
Defaults:fumi secure_path = /sbin:/bin:/usr/sbin:/usr/bin


また、この問題に対して 0.5.8 で
"sudo PATH=/usr/sbin:/sbin:$PATH command" の
sudo と PATH の間に env を入れる対策がとられている。

- use 'env' to set PATH by hayato1980 · Pull Request #147 · mizzy/serverspec h
  https://github.com/mizzy/serverspec/pull/147

comments powered by Disqus