web-dev-qa-db-fra.com

Sur EC2: commande de noeud Sudo introuvable, mais le noeud sans Sudo est ok

Je viens d'installer nodejs sur une nouvelle instance micro EC2.

Je l'ai installé normalement, ./configure -> make -> Sudo make install.

Problème: Quand je lance "node" sous ec2-user, il fonctionne parfaitement. Lorsque je lance "noeud Sudo", cela échoue.

J'ai découvert ce noeud est dans:

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

et le chemin actuel est

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

mais le chemin de Sudo est

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

puis j'ai essayé d'éditer le chemin PATH racine pour inclure les chemins d'accès au nœud, donc "nœud" est exécuté lorsque je suis connecté en tant que root - mais cela ne fonctionne toujours pas lorsque je me connecte en tant qu'utilisateur ec2 et que je lance "nœud Sudo" .

J'ai besoin de cela pour installer npm properfly. Une idée sur la façon d'inclure le chemin du nœud lors de l'exécution de "nœud Sudo"?

111
foobar

Oui, c'est un peu gênant mais vous pouvez le réparer avec quelques liens:

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

Il y en a peut-être plus, mais c'est tout ce que j'ai rencontré jusqu'à présent. L'absence de noeud-waf entraînera l'échec de certaines installations npm avec un message d'erreur plutôt cryptique.

305
Michael Dillon

J'ai ajouté /usr/local/bin à secure_path dans /etc/sudoers

$ Sudo visudo

Puis changez cette ligne:

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

À:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
30
Jack Frost

cela arrive parce que l'exécutable du noeud n'est pas trouvé dans/usr/bin. Alors suivez les étapes:

  1. trouver un noeud: 

whereis node

dans mon cas: node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node

  1. faire un lien symbolique pour le noeud:

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

C'est fait!

Pourquoi ne pas utiliser le chemin absolu vers le noeud? Si vous envisagez d'utiliser un script de démarrage, il vous faudra de toute façon un chemin absolu.

Sudo /usr/local/bin/node server.js
6
Shripad Krishna

essayez ce qui suit:

export PATH=$PATH:/usr/local/bin
Sudo node --version
5
Amro

Vous pouvez passer le chemin complet à l'exécutable node à partir du parent (non-Sudo Shell) à l'aide de la commande which.

Sudo `which node`
4
Pavel Zubkou

Pour moi, cela n'a fonctionné que de changer la propriété du dossier du noeud de la racine à l'utilisateur ec2 (connecté en tant qu'utilisateur ec2).

(Remarque: j'ai créé mon dossier de nœuds dans/var/lib /)

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

Ensuite

npm install mongojs

devrait fonctionner correctement (à condition que vous ayez installé NPM, bien sûr!)

4
user1839216

Voici une approche qui n’utilise pas de liens symboliques ni de racine:

$ 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

Puis j'ai fait:

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

Les avantages de ne pas exécuter le noeud en tant que root sont discutés ici: 

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

Son en ligne avec: 

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

3
Jack Murphy

Dans mon cas, Node a été installé sans Sudo prefix. Donc, le noeud n'était pas disponible pour le super-utilisateur, c'est pourquoi Sudo node server

1
shubham

Pourquoi ne pas utiliser "Sudo $ (quel nœud)" au lieu de "nœud Sudo"?

0
Will Voelcker