Sudo não consegue encontrar binário [duplicado]

2

Eu tenho um problema.

Ultimamente eu instalei nodejs (se você não sabe o que é, isso não importa, pode ser qualquer outra coisa) de fontes para / 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
...

então, os binários estão em /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
...

Como você pode ver, npm está lá. Para facilitar o uso de uma linha de comando, fixei $PATH dentro de .bashrc script:

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

e o mesmo aconteceu com o .bashrc :

da raiz
# which npm
/opt/node/bin/npm

Mas se eu executar o npm com o sudo, npm não será encontrado:

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

Então, por que isso está acontecendo? Como ganho o que quero?

Obrigado.

UPDATE : Seguindo o conselho de Paul, adicionei

Defaults  env_keep = PATH

para o /etc/sudoers

mas o problema persiste de qualquer maneira:

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

Então, a diretiva Defaults fez o trabalho, mas estou recebendo o mesmo sudo: npm: command not found

    
por Nemoden 25.07.2012 / 05:32

2 respostas

6

sudo chama um novo shell, e as variáveis ambientais que são passadas para o novo shell são governadas pelo arquivo '/ etc / sudoers'. Se você quer que seu caminho seja passado, então você precisa adicionar

Defaults env_keep = "PATH"

para '/ etc / sudoers' e manterá a variável de ambiente PATH no shell sudo

Se isso não funcionar, é possível que o caminho esteja sendo sobrescrito por uma diretiva secure_path (em algum momento, um secure_path é compilado no binário). Nesse caso, tente adicionar este comando, substituindo o nome do grupo por um grupo do qual você é membro:

exempt_group = "groupname"

Ou anule o secure_path com o seu próprio, por exemplo:

secure_path = "/bin:/usr/bin:/sbin:/usr/sbin:/opt/node/bin"
    
por 25.07.2012 / 05:55
4

Eu tive esse problema - > o meu foi causado por npm sendo instalado em /use/local/bin .

E eu tive essa linha no meu arquivo /etc/sudoers :

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

Digitando qual npm foi a parte esclarecedora:)

    
por 11.11.2013 / 19:17