En EC2: el comando del nodo sudo no se encuentra, pero el nodo sin sudo está bien


120

Acabo de instalar nodejs en una nueva micro instancia 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 el camino actual es

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

pero, la ruta 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 intenté editar la RUTA raíz para incluir las rutas al nodo, por lo que "nodo" se ejecuta cuando inicio sesión como raíz, pero aún no funciona cuando inicio sesión como ec2-user y ejecuto "sudo nodo" .

Necesito esto para instalar npm correctfly. ¿Alguna idea de cómo incluir la ruta del nodo mientras se ejecuta "sudo node"?


¿Cómo editaste la ruta raíz?
Pausado hasta nuevo aviso.

Después de mucho intentarlo, hice esto y funciona: <pre> sudo su export PATH = $ PATH: usr / local / node / curl npmjs.org/install.sh | sh </pre>

Respuestas:


320

Sí, es un poco molesto pero puedes solucionarlo 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 que haya más, pero eso es todo lo que he encontrado hasta ahora. La falta de node-waf hará que algunas npminstalaciones fallen con un mensaje de error bastante críptico.


Solo tengo curiosidad, ¿este enlace debe realizarse solo en el sistema Amazon AMI? ¿El sistema Amazon AMI separa la ruta raíz de la ruta del usuario?
user482594

Falta de node-wafcausas npm rebuildde error. ¿Existe una forma clara de remediar esto? ¿Realmente necesito?
user730569

1
Esto no funcionó para mí por un par de razones. 1) No tengo acceso a sudo. Estoy en un host compartido. 2) /usr/localno existe. Aunque hice un directorio ~ / local. 3) Después de eliminar /usry sudode cada una de estas líneas de código y ejecutarlas en mi consola, nada había cambiado.
Wolfpack'08

1
Eso fue útil. Pero, ¿alguien puede explicar por qué y cómo funciona?
Tarun Gupta

2
@Tarun: lea la variable PATH del shell y cómo se usa para encontrar qué binario ejecutar para cualquier comando dado. El comando ln simplemente vincula un segundo nombre al mismo archivo.
Michael Dillon

33

He añadido /usr/local/bina secure_pathen/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

19

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

  1. buscar nodo:

whereis node

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

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

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

¡Está hecho!


gran consejo: también hice sudo ln -s /home/ec2-user/.nvm/versions/node/v8.11.3/bin/npm /usr/bin/npmlo que estaba tratando de hacer sudo npm installen mi instancia de aws ec2 después de seguir el enlace
puntero NULL

9

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

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

1
la mejor solución, funciona y no se mete con el sistema como lo hacen todas las lnsoluciones.
SidOfc

5

prueba lo siguiente:

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

2
No funcionará para distribuciones que se hayan secure_pathestablecido en el sudoersarchivo.
kenorb

5

Puede pasar la ruta completa al nodeejecutable desde el padre (shell no sudo) usando el whichcomando.

sudo `which node`

4

Para mí, funcionó simplemente para cambiar la propiedad de la carpeta del nodo de root a ec2-user (iniciado sesión como ec2-user).

(Nota: creé mi carpeta de nodo en / var / lib /)

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

Luego

npm install mongojs

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


3

Aquí hay un enfoque que no usa enlaces simbólicos ni 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

Los beneficios de no ejecutar el nodo como root se discuten aquí:

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



1

En mi caso, Node se instaló sin el prefijo sudo . Entonces el nodo no estaba disponible para el superusuario, por eso no funcionasudo node server


-1

No sé si esta es la forma correcta, 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

Esto instaló npm, y ahora puedo instalar cualquier paquete que desee.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.