it-swarm-ru.tech

На EC2: команда узла Sudo не найдена, но узел без Sudo исправен

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

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

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

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

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

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

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

но путь Судо

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

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

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

111
foobar

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

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

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

305
Michael Dillon

Я добавил /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
30
Jack Frost

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

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

whereis node

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

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

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

Это сделано!

10
jefferson ferreira palheta

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

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

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

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

Вы можете передать полный путь к исполняемому файлу node из родительского (не оболочка Sudo) с помощью команды which.

Sudo `which node`
4
Pavel Zubkou

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

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

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

Затем

npm install mongojs

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

4
user1839216

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

3
Jack Murphy

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

1
shubham

Как насчет использования «Sudo $ (который узел)» вместо «Судо узел»?

0
Will Voelcker