На EC2: команда узла sudo не найдена, но узел без sudo исправен - PullRequest
115 голосов
/ 12 февраля 2011

Я только что установил nodejs на новый микроэкземпляр EC2.

Я установил его нормально, ./configure -> make -> sudo make install.

Проблема: Когда я запускаю «узел» под ec2-пользователем, он работает отлично. Когда я запускаю «узел sudo», он выходит из строя.

Я обнаружил, что узел находится в:

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

и текущий путь

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

но путь sudo -

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

затем я попытался отредактировать корневой PATH, включив в него пути к узлу, поэтому «узел» запускается, когда я вошел в систему как root - но он все равно не будет работать, когда я войду в систему как пользователь ec2 и запустлю » узел sudo ".

Мне нужно это, чтобы установить npm Properfly. Любая идея о том, как включить путь к узлу при запуске "узла sudo"?

Ответы [ 11 ]

310 голосов
/ 21 февраля 2011

Да, это немного раздражает, но вы можете исправить это с помощью нескольких ссылок:

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

Могло бы быть и больше, но это все, с чем я столкнулся до сих пор. Отсутствие узла-waf приведет к сбою некоторых установок npm с довольно загадочным сообщением об ошибке.

30 голосов
/ 02 января 2014

Я добавил /usr/local/bin к secure_path в /etc/sudoers

$ sudo visudo

Затем измените эту строку:

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

Кому:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
12 голосов
/ 31 января 2018

это происходит потому, что исполняемый файл узла не найден в / usr / bin.Поэтому следуйте инструкциям:

  1. найти узел:

whereis node

в моем случае: node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node

сделать символическую ссылку для узла:

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

Готово!

7 голосов
/ 16 февраля 2011

Почему бы не использовать абсолютный путь к узлу? Если вы планируете использовать сценарий выскочки, ему в любом случае понадобится абсолютный путь.

sudo /usr/local/bin/node server.js
5 голосов
/ 12 февраля 2011

попробуйте следующее:

export PATH=$PATH:/usr/local/bin
sudo node --version
4 голосов
/ 09 февраля 2017

Вы можете передать полный путь к node исполняемому файлу из родительского (не-sudo shell), используя команду which.

sudo `which node`
4 голосов
/ 26 февраля 2013

Для меня это сработало, чтобы просто сменить владельца папки узла с root на ec2-пользователя (вошел как ec2-пользователь).

(Примечание: я создал папку моего узла в / var / lib /)

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

Тогда

npm install mongojs

должно работать нормально (конечно, если вы установили npm нормально!)

3 голосов
/ 21 февраля 2012

Вот подход, который не использует символические ссылки или не требует 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

Тогда я сделал:

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

Преимущества отсутствия запуска узла как root обсуждаются здесь:

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

Он встроен в:

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

1 голос
/ 26 октября 2017

В моем случае Node был установлен без префикса sudo .Таким образом, узел был недоступен для суперпользователя, поэтому он не работает sudo node server

0 голосов
/ 25 января 2019

Как насчет использования "sudo $ (который узел)" вместо "узла sudo"?

...