В 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. Так что следуйте инструкциям:
- найти узел:
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
Это было сделано!
Ответ 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, и теперь я могу установить любые пакеты, которые я хочу.