it-swarm.com.de

Bei EC2: Sudo-Knotenbefehl nicht gefunden, Knoten ohne Sudo ist jedoch in Ordnung

Ich habe gerade nodejs auf einer neuen EC2-Mikroinstanz installiert.

Ich habe es normalerweise installiert. ./Configure -> make -> Sudo make install.

Problem: Wenn ich "node" unter ec2-user starte, läuft es einwandfrei. Wenn ich "Sudo node" starte, schlägt das fehl.

Ich habe herausgefunden, dass der Knoten in ist:

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

und der aktuelle Pfad ist

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

aber der Sudo-Pfad ist

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

dann habe ich versucht, den root-Pfad so zu bearbeiten, dass er die Pfade zum Knoten enthält, so dass "node" ausgeführt wird, wenn ich als root angemeldet bin - aber es funktioniert nicht, wenn ich mich als ec2-user anmelde und "Sudo node" starte .

Ich brauche das, um npm properfly zu installieren. Haben Sie eine Idee, wie Sie den Knotenpfad beim Ausführen von "Sudo node" einbeziehen können?

111
foobar

Ja, es ist etwas nervig, aber Sie können es mit ein paar Links beheben:

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

Es könnte mehr sein, aber das ist alles, was mir bis jetzt begegnet ist. Ein Mangel an node-waf führt dazu, dass einige npm-Installationen mit einer ziemlich kryptischen Fehlermeldung fehlschlagen.

305
Michael Dillon

Ich habe /usr/local/bin zu secure_path in /etc/sudoers hinzugefügt.

$ Sudo visudo

Dann ändern Sie diese Zeile:

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

Zu:

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

dies ist darauf zurückzuführen, dass die ausführbare Knotendatei nicht in/usr/bin gefunden wird. Folgen Sie also den Schritten:

  1. knoten finden: 

whereis node

in meinem Fall: node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node

  1. mache einen symbolischen Link für den Knoten:

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

Es ist fertig!

Warum nicht den absoluten Pfad zum Knoten verwenden? Wenn Sie vorhaben, ein Upstart-Skript zu verwenden, ist auf jeden Fall ein absoluter Pfad erforderlich.

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

versuche Folgendes:

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

Sie können den vollständigen Pfad an node ausführbare Datei von übergeordneter (Nicht-Sudo-Shell) mit dem Befehl which übergeben.

Sudo `which node`
4
Pavel Zubkou

Für mich funktionierte es einfach, den Besitzer des Knotenordners von root zu ec2-user zu wechseln (als ec2-user angemeldet).

(Hinweis: Ich habe meinen Knotenordner in/var/lib/erstellt.)

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

Dann

npm install mongojs

sollte gut funktionieren (vorausgesetzt du hast npm natürlich ok installiert!)

4
user1839216

Hier ist ein Ansatz, der keine Symlinks verwendet oder root erfordert:

$ 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

Dann tat ich:

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

Die Vorteile eines nicht ausgeführten Knotens als root werden hier erläutert: 

http://increaseyourgeek.wordpress.com/2010/08/18/install-node-js-ohne--mit-sudo/

Es ist inline mit: 

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

3
Jack Murphy

In meinem Fall wurde Node ohne Sudo installiert. Der Knoten war also für den Superuser nicht verfügbar, weshalb er nicht funktioniert Sudo node server

1
shubham

Wie wäre es mit "Sudo $ (welcher Knoten)" anstelle von "Sudo-Knoten"?

0
Will Voelcker