В EC2: команда sudo node не найдена, но node без sudo в порядке

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

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

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

Я узнал, что node находится в:

[[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

но путь sudo

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

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

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

Ответ 1

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

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 с установкой с довольно загадочным сообщением об ошибке.

Ответ 2

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

$ sudo visudo

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

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

To:

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

Ответ 3

это происходит потому, что исполняемый файл узла не найден в /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

Это было сделано!

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

Для меня это просто изменило принадлежность папки node от root до ec2-user (зарегистрировалось как ec2-пользователь).

(Примечание. Я создал мою папку node в /var/lib/ )

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

Тогда

npm install mongojs

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

Ответ 7

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

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

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

Его строка с:

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

Ответ 8

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

sudo `which node`

Ответ 9

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

Ответ 10

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

Ответ 11

Я не знаю, правильно ли это, но это то, что я сделал...

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

Это установило npm, и теперь я могу установить любые пакеты, которые я хочу.