2

У меня проблема.

В последнее время я установил nodejs (если вы не знаете, что это такое, это не имеет значения, может быть что-то еще) из исходников в /opt /node:

$ 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

Но если я запускаю npm с помощью sudo, npm не будет найден:

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

Итак, почему это происходит? Как получить то, что я хочу?

Благодарю.

ОБНОВЛЕНИЕ: Следуя совету Пола, я добавил

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

2 ответа2

6

sudo вызывает новую оболочку, а переменные окружения, которые передаются в новую оболочку, регулируются файлом /etc /sudoers. Если вы хотите, чтобы ваш путь был пройден, то вам нужно добавить

Defaults env_keep = "PATH"

в '/etc/sudoers', и она будет содержать переменную окружения PATH в оболочке sudo

Если это не работает, возможно, что либо путь перезаписывается директивой secure_path (иногда secure_path компилируется в двоичный файл). Если это так, попробуйте добавить эту команду, заменив имя группы на группу, членом которой вы являетесь:

exempt_group = "groupname"

Или переопределите secure_path своим собственным, например:

secure_path = "/bin:/usr/bin:/sbin:/usr/sbin:/opt/node/bin"
4

У меня была эта проблема -> моя была вызвана установкой npm в /use/local/bin .

И у меня была эта строка в моем /etc/sudoers :

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

Печатание, которое npm было просветляющей частью :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .