it-swarm-es.com

En EC2: No se encontró el comando del nodo Sudo, pero el nodo sin Sudo está bien

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

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

Problema: Cuando ejecuto "nodo" en ec2-user, funciona perfectamente. Cuando ejecuto "nodo Sudo", falla.

Descubrí que el nodo está en:

[[email protected] ~]$ whereis node
node: /usr/local/bin/node /usr/local/lib/node

y el camino actual es

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

pero, el camino del sudo es

[[email protected] ~]# echo $PATH
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin

luego traté de editar el PATH raíz para incluir las rutas al nodo, por lo que "nodo" se ejecuta cuando inicio sesión como raíz, pero aún así no funcionará cuando inicie sesión como usuario de 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"?

115
foobar

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 node-waf hará que algunas instalaciones de npm falle con un mensaje de error bastante críptico.

310
Michael Dillon

Agregué /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
30
Jack Frost

sucede porque el nodo ejecutable no se encuentra en/usr/bin. Así que sigue los pasos:

  1. encontrar 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!

11
Jeff Pal

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

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

intente lo siguiente:

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

Puede pasar la ruta completa al ejecutable node desde el padre (sin el shell de Sudo) usando el comando which.

Sudo `which node`
4
Pavel Zubkou

Para mí, funcionó simplemente para cambiar la propiedad de la carpeta del nodo de la raíz al usuario ec2 (iniciado sesión como usuario ec2).

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

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

Entonces

npm install mongojs

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

4
user1839216

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

3
Jack Murphy

En mi caso, Node se instaló sin Sudo prefix. Así que el nodo no estaba disponible para el superusuario, por eso no funciona Sudo node server

1
shubham

¿Qué hay de usar "Sudo $ (qué nodo)" en lugar de "Sudo nodo"?

0
Will Voelcker