我刚刚在一个新的EC2微实例上安装了nodejs .
我正常安装它./configure - > make - > sudo make install .
Problem: 当我在ec2-user下运行"node"时,它运行完美 . 当我运行"sudo node"时,它失败了 .
我发现该节点在:
[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 node”时它仍然不起作用 .
我需要这个来安装npm properfly . 有关如何在运行“sudo节点”时包含节点路径的任何想法?
10 回答
是的,它有点烦人但你可以通过一些链接修复它:
可能会有更多,但到目前为止我已经遇到过这一切 . 缺少node-waf会导致某些
npm
安装失败并显示相当神秘的错误消息 .我在
/etc/sudoers
中将/usr/local/bin
添加到secure_path
然后改变这一行:
至:
发生这种情况是因为在/ 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
完成!
为什么不使用节点的绝对路径?如果您计划使用upstart脚本,则无论如何都需要绝对路径 .
尝试以下方法:
对我来说,它只是将节点文件夹的所有权从root更改为ec2-user(以ec2-user身份登录) .
(注意:我在/ var / lib /中创建了我的节点文件夹)
然后
应该工作正常(假设您已经安装了npm ok!)
这是一种不使用符号链接或需要root的方法:
然后我做了:
这里讨论不以root身份运行节点的好处:
http://increaseyourgeek.wordpress.com/2010/08/18/install-node-js-without-using-sudo/
它内联:
https://github.com/joyent/node/wiki/Installation
您可以使用
which
命令从父(非sudo shell)传递完整路径到node
可执行文件 .就我而言,Node安装时没有 sudo 前缀 . 因此,超级用户无法使用该节点,因为它无法正常工作
sudo node server
我不知道这是不是正确的方法,但这就是我所做的......
这个安装了npm,我现在可以安装我想要的任何软件包 .