我刚刚在新的EC2微型实例上安装了nodejs。
我正常安装,。/ configure - >制作 - > sudo make install。
问题:当我在ec2-user下运行“node”时,它运行得很好。当我运行“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身份登录时“node”运行 - 但是当我以ec2-user身份登录并运行时它仍然无效sudo节点“。
我需要这个来安装npm properfly。有关如何在运行“sudo node”时包含节点路径的想法吗?
答案 0 :(得分:310)
是的,这有点烦人,但你可以用一些链接修复它:
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
安装失败并显示相当神秘的错误消息。
答案 1 :(得分:30)
我在/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
答案 2 :(得分:11)
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
已经完成了!
答案 3 :(得分:7)
为什么不使用节点的绝对路径?如果你打算使用一个upstart脚本,那么无论如何都需要一个绝对路径。
sudo /usr/local/bin/node server.js
答案 4 :(得分:5)
尝试以下方法:
export PATH=$PATH:/usr/local/bin
sudo node --version
答案 5 :(得分:4)
对我来说,它只是将节点文件夹的所有权从root更改为ec2-user(以ec2-user身份登录)。
(注意:我在/ var / lib /中创建了我的节点文件夹)
sudo chown -R ec2-user /var/lib/node/
然后
npm install mongojs
应该可以正常工作(如果您已经安装了npm ok!)
答案 6 :(得分:4)
您可以使用node
命令从父(非sudo shell)传递完整路径which
可执行文件。
sudo `which node`
答案 7 :(得分:3)
这是一种不使用符号链接或需要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/
其内联:
答案 8 :(得分:1)
就我而言,Node安装时没有 sudo 前缀。因此,超级用户无法使用该节点,因为它无法正常工作sudo node server
答案 9 :(得分:0)
使用“ sudo $(哪个节点)”代替“ sudo节点”怎么样?
答案 10 :(得分:0)
以root身份输入
sudo su
然后执行standard steps
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
. ~/.nvm/nvm.sh
nvm install node
node -e "console.log('Running Node.js ' + process.version)"
答案 11 :(得分:0)
这是我为解决类似问题所做的工作。注意:我已经通过 snap 安装了 node。
第一步:通过snap安装节点
sudo snap install node --classic
第 2 步:查找节点已安装的位置
whereis node
就我而言
/snap/bin/node.npm
/snap/bin/node.npx
/snap/bin/node.yarn
/snap/bin/node
/snap/bin/node.yarnpkg
第 3 步:创建指向 node、npm、npx 和 yarn 的符号链接
sudo ln -s /snap/bin/yarn /usr/bin/yarn
sudo ln -s /snap/bin/node /usr/bin/node
sudo ln -s /snap/bin/npm /usr/bin/npm
最后所有用户都可以访问节点,即使是 sudo 组
sudo node
答案 12 :(得分:0)
我尝试了上述答案中提到的所有内容,但没有任何效果。可能是因为我对符号链接相关的概念缺乏了解。我通过不使用 nvm 解决了这个问题。 我刚刚创建了一个新的 ec2 实例,并没有安装 nvm。相反,我像这样安装了 node 和 npm:
%%sql
SELECT *
FROM 'dataset.mock-data'
LIMIT 10
这为我做到了。
答案 13 :(得分:-1)
我不知道这是否正确,但这就是我所做的......
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,我现在可以安装我想要的任何软件包。