En EC2: no se ha encontrado el comando sudo node, pero el nodo sin sudo está bien

Acabo de instalar nodejs en una nueva instancia de micro EC2.

Lo instalé normalmente, ./configure -> make -> sudo make install.

Problema: cuando ejecuto “node” en ec2-user, funciona perfectamente. Cuando ejecuto “sudo node”, falla.

Descubrí que el nodo está en:

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

y la ruta actual es

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

pero, el camino de sudo es

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

luego traté de editar la ruta de acceso raíz para incluir las rutas al nodo, por lo que “nodo” se ejecuta cuando estoy conectado como root, pero todavía no funciona cuando inicio sesión como usuario ec2 y ejecuto “nodo sudo” .

Necesito esto para instalar npm properfly. ¿Alguna idea sobre cómo incluir la ruta del nodo mientras se ejecuta “sudo node”?

Sí, es un poco molesto pero puedes arreglarlo con algunos enlaces:

 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 

Puede haber más, pero eso es todo lo que he encontrado hasta ahora. La falta de nodo-waf hará que algunas instalaciones npm fallen con un mensaje de error bastante críptico.

secure_path /usr/local/bin a secure_path en /etc/sudoers

 $ sudo visudo 

Luego cambia esta línea:

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

A:

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

sucede porque el ejecutable del nodo no se encuentra en / usr / bin. Entonces sigue los pasos:

  1. encontrar nodo:

whereis node

en mi caso: node: /home//.nvm/versions/node/v8.9.4/bin/node

  1. hacer un enlace simbólico para el nodo:

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

¡Está hecho!

intente lo siguiente:

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

¿Por qué no usar la ruta absoluta al nodo? Si planea usar un script upstart, necesitará una ruta absoluta de todos modos.

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

Para mí, funcionó para simplemente cambiar la propiedad de la carpeta de nodos de root a ec2-user (iniciada como ec2-user).

(Nota: Creé mi carpeta de nodos en / var / lib /)

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

Entonces

 npm install mongojs 

debería funcionar bien (siempre que haya instalado npm ok por supuesto!)

Aquí hay un enfoque que no usa enlaces simbólicos, o requiere root:

 $ 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 

Entonces lo hice:

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

Aquí se tratan los beneficios de no ejecutar el nodo como raíz:

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

Está en línea con:

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

Puede pasar la ruta completa al ejecutable del node desde el elemento primario (shell no sudo) utilizando which comando.

 sudo `which node` 

En mi caso, Node se instaló sin el prefijo sudo . Así que el nodo no estaba disponible para el superusuario por lo que no está funcionando el sudo node server

No sé si este es el camino correcto, pero esto es lo que hice …

 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 

Este npm instalado, y ahora puedo instalar cualquier paquete que desee.