node.js と Grunt で Bootstrap less ファイルをコンパイルする(自動化)
と、npm を使って node.js のモジュールを入れようとしてた時に、-g 付でグローバルに入れようとすると当然 /user/local/bin に書き込み権限がないと叱られるわけですが、ああそうかと sudo しても今度は「sudo: npm: コマンドが見つかりません」と受け付けてくれませんでした。
面倒だなあととりあえず su -(su でもダメ)で済ましてきたのですが、そういえば以前からそうだなとこの際調べることにしました。
$ npm -v
1.4.28
$ sudo npm -v
パスワード:
sudo: npm: コマンドが見つかりません
こうなってしまうので、パスを調べてみると、
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/games/bin:/usr/games:/usr/heimdal/bin:/usr/java/jre/bin:/opt/mysql/bin$ su
# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
と、リセットされてしまっています。
いろいろググってみますと、sudoers に Defaults env_keep += “PATH” を追記すればパスが引き継がれるとあり、試してみたのですが変わりません。で、こちらのサイトにたどり着き解決です。
sudoers に Defaults exempt_group=”GROUP1 GROUP2 …” を追記すればいいとのことです。指示通りにやってみました。
# groupadd developer
# gpasswd –add ユーザ名 developer
# visudo
…
Defaults exempt_group=”developer”$ sudo npm -v
1.4.28
パスが引き継がれたようです。