web-dev-qa-db-ja.com

須藤はバイナリを見つけることができません

私は問題があります。

最近、ソースから/ opt/nodeにnodejsをインストールしました(それが何であるかわからない場合は、実際には問題ではなく、他の何かである可能性があります)。

$ ls -la /opt
...
lrwxrwxrwx  1 root root   11 2012-07-25 13:48 node -> node-0.6.3/
drwxr-xr-x  6 root root 4096 2012-07-25 13:48 node-0.6.3
...

したがって、バイナリは/opt/node/binにあります。

$ ls -la /opt/node/bin
...
lrwxrwxrwx 1 root root      38 2012-06-20 11:44 npm -> ../lib/node_modules/npm/bin/npm-cli.js
...

ご覧のとおり、npmがあります。コマンドラインから使いやすくするために、$PATHスクリプト内の.bashrcを修正しました。

HOME=$HOME:...:/opt/node/bin

ルートの.bashrcもそうだった:

# which npm
/opt/node/bin/npm

しかし、Sudoでnpmを実行すると、npmが見つかりません。

$ Sudo which npm
$ Sudo npm -g install uglify-js
Sudo: npm: command not found

それで、なぜそれが起こっているのですか?どうすれば欲しいものを手に入れることができますか?

ありがとう。

[〜#〜] update [〜#〜]:Paulのアドバイスに従って、追加しました

Defaults  env_keep = PATH

/etc/sudoers

しかし、とにかく問題は解決しません。

$ echo $PATH
... :/opt/node/bin
$ Sudo su -
#
# Sudo -V
...
Environment variables to preserve:
    XAUTHORIZATION
    XAUTHORITY
    TZ
    PS2
    PS1
    PATH
...

したがって、Defaultsディレクティブはそれでうまくいきましたが、同じSudo: npm: command not foundを取得しています。

3
Nemoden

Sudoは新しいシェルを呼び出し、新しいシェルに渡される環境変数は「/ etc/sudoers」ファイルによって管理されます。パスを通過させたい場合は、追加する必要があります

Defaults env_keep = "PATH"

'/ etc/sudoers'に移動すると、SudoシェルでPATH環境変数が保持されます

これが機能しない場合は、パスがsecure_pathディレクティブによって上書きされている可能性があります(secure_pathがバイナリにコンパイルされる場合があります)。その場合は、このコマンドを追加して、グループ名を自分がメンバーになっているグループに置き換えてみてください。

exempt_group = "groupname"

または、secure_pathを独自のものでオーバーライドします。例:

secure_path = "/bin:/usr/bin:/sbin:/usr/sbin:/opt/node/bin"
7
Paul

私はこの問題を抱えていました->私の原因はnpm/use/local/binにインストールされていることです。

そして、/etc/sudoersファイルに次の行がありました。

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

どのnpmが啓発的な部分であったかを入力する:)

4
gridrunner