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"?
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.
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
cela arrive parce que l'exécutable du noeud n'est pas trouvé dans/usr/bin. Alors suivez les étapes:
whereis node
dans mon cas: node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node
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
essayez ce qui suit:
export PATH=$PATH:/usr/local/bin
Sudo node --version
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`
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!)
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:
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
Pourquoi ne pas utiliser "Sudo $ (quel nœud)" au lieu de "nœud Sudo"?