No EC2: comando sudo node não encontrado, mas o nó sem sudo está ok


120

Acabei de instalar o nodejs em uma nova micro instância do EC2.

Eu o instalei normalmente ./configure -> make -> sudo make install.

Problema: Quando executo o "nó" no usuário ec2, ele funciona perfeitamente. Quando executo o "nó do sudo", ele falha.

Eu descobri que o nó está em:

[ec2-user@XXXX ~]$ whereis node
node: /usr/local/bin/node /usr/local/lib/node

e o caminho atual é

[ec2-user@XXXX ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/opt/aws/bin:/home/ec2-user/bin

mas, o caminho do sudo é

[root@ip-10-112-222-32 ~]# echo $PATH
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin

tentei editar o PATH raiz para incluir os caminhos para o nó, para que o "nó" seja executado quando eu estiver logado como raiz - mas ainda não funcionará quando eu fizer logon como usuário ec2 e executar "sudo node" .

Eu preciso disso para instalar o npm Properfly. Alguma idéia de como incluir o caminho do nó durante a execução do "nó sudo"?


Como você editou o PATH raiz?
Pausado até novo aviso.

Depois de muito tentar, fiz isso e funciona: <pre> sudo su export PATH = $ PATH: usr / local / node / curl npmjs.org/install.sh | sh </pre>

Respostas:


319

Sim, é um pouco chato, mas você pode corrigi-lo com alguns links:

sudo ln -s /usr/local/bin/node /usr/bin/node
sudo ln -s /usr/local/lib/node /usr/lib/node
sudo ln -s /usr/local/bin/npm /usr/bin/npm
sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf

Pode haver mais, mas isso é tudo o que encontrei até agora. A falta de node-waf fará com que algumas npminstalações falhem com uma mensagem de erro um tanto enigmática.


Só estou curioso, essa ligação deve ser feita apenas no sistema Amazon AMI? O sistema Amazon AMI separa o caminho raiz do caminho do usuário?
user482594

Falta de node-wafcausas npm rebuildpara erro. Existe uma maneira limpa de remediar isso? Eu preciso?
user730569

1
Isso não funcionou para mim por alguns motivos. 1) Não tenho acesso ao sudo. Estou em um host compartilhado. 2) /usr/localnão existe. Eu criei um diretório ~ / local, no entanto. 3) Depois de remover /usre sudode cada uma dessas linhas de código e executá-las no meu console, nada havia mudado.
Wolfpack'08

1
Isso foi útil. Mas alguém pode expulsar por que e como isso faz as coisas funcionarem?
Tarun Gupta

2
@ Tarun: leia a variável PATH do shell e como ela é usada para encontrar qual binário executar para qualquer comando. O comando ln apenas vincula um segundo nome ao mesmo arquivo.
Michael Dillon

33

Eu adicionei /usr/local/bina secure_pathem/etc/sudoers

$ sudo visudo

Então mude esta linha:

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

Para:

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

19

isso acontece porque o nó executável não foi encontrado em / usr / bin. Então siga as etapas:

  1. encontrar o nó:

whereis node

No meu caso: node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node

  1. faça um link simbólico para o nó:

    sudo ln -s /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node /usr/bin/node

Está feito!


grande dica - Eu também fiz sudo ln -s /home/ec2-user/.nvm/versions/node/v8.11.3/bin/npm /usr/bin/npmcomo eu estava tentando fazer sudo npm installna instância meu AWS EC2 depois de seguir ligação
ponteiro NULL

9

Por que não usar o caminho absoluto para o nó? Se você planeja usar um script inicial, ele precisará de um caminho absoluto.

sudo /usr/local/bin/node server.js

1
melhor solução, funciona e não mexe com o sistema, como todas as lnsoluções.
SidOfc

5

tente o seguinte:

export PATH=$PATH:/usr/local/bin
sudo node --version

2
Não funcionará para distribuições secure_pathdefinidas em sudoersarquivo.
kenorb

5

Você pode passar o caminho completo para o nodeexecutável do pai (shell não sudo) usando o whichcomando

sudo `which node`

4

Para mim, funcionou apenas para alterar a propriedade da pasta do nó da raiz para o usuário ec2 (conectado como usuário ec2).

(Nota: criei a pasta do nó em / var / lib /)

sudo chown -R ec2-user /var/lib/node/

Então

npm install mongojs

deve funcionar bem (desde que você tenha instalado o npm ok, é claro!)


3

Aqui está uma abordagem que não usa links simbólicos ou requer raiz:

$ git clone https://github.com/joyent/node.git
$ cd node
$ mkdir ~/opt
$ export PREFIX=~/opt; ./configure
$ make
$ make install
$ echo 'export PATH=~/opt/bin:${PATH}' >> ~/.bashrc

Então eu fiz:

$ git clone https://github.com/isaacs/npm.git
$ cd npm
$ make install

Os benefícios de não executar o nó como raiz são discutidos aqui:

http://increaseyourgeek.wordpress.com/2010/08/18/install-node-js-without-using-sudo/

Está alinhado com:

https://github.com/joyent/node/wiki/Installation



1

No meu caso, o Node foi instalado sem o prefixo sudo . Portanto, o nó não estava disponível para o superusuário, por isso não está funcionandosudo node server


-1

Não sei se é o caminho certo, mas foi o que fiz ...

sudo su
export PATH=$PATH:/home/ec2-user/local/node/bin
curl http://npmjs.org/install.sh | sh
chown -R ec2-user /home/ec2-user/local/node
exit

Isso instalou o npm e agora posso instalar os pacotes que eu desejar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.