EC2 : sudo node 명령을 찾을 수 없지만 sudo가없는 노드는 정상입니다.


120

새 EC2 마이크로 인스턴스에 nodejs를 설치했습니다.

나는 정상적으로 설치했다. ./configure-> make-> sudo make install.

문제점 : 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를 편집하려고했기 때문에 루트로 로그인하면 "node"가 실행되지만 ec2-user로 로그인하고 "sudo node"를 실행하면 여전히 작동하지 않습니다. .

npm properfly를 설치하려면 이것이 필요합니다. "sudo node"를 실행하는 동안 노드 경로를 포함하는 방법에 대한 아이디어가 있습니까?


루트 PATH를 어떻게 편집 했습니까?
— 추후 공지가있을 때까지 일시 중지되었습니다.

많은 노력 끝에 나는 이것을했고 작동한다 : <pre> sudo su export PATH = $ PATH : usr / local / node / curl npmjs.org/install.sh | sh </ pre>

답변:


319

예, 약간 성가 시지만 일부 링크로 해결할 수 있습니다.

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설치가 다소 알 수없는 오류 메시지와 함께 실패 할 수 있습니다 .


궁금합니다.이 연결은 Amazon AMI 시스템에서만 수행해야합니까? Amazon AMI 시스템은 사용자 경로와 루트 경로를 구분합니까?
— user482594 2012

오류 가 node-waf발생 npm rebuild하는 원인 이 없습니다. 이 문제를 해결할 수있는 깨끗한 방법이 있습니까? 내가해야합니까?
— user730569

1
이것은 몇 가지 이유로 나를 위해 작동하지 않았습니다. 1) sudo 액세스 권한이 없습니다. 나는 공유 호스트에 있습니다. 2) /usr/local존재하지 않습니다. 그래도 ~ / local 디렉토리를 만들었습니다. 3) 이러한 각 코드 줄을 제거 /usr하고 sudo콘솔을 통해 실행 한 후 아무것도 변경되지 않았습니다.
— Wolfpack'08

1
도움이되었습니다. 그러나 아무도 그것이 왜 그리고 어떻게 작동하는지 설명 할 수 있습니까?
— Tarun Gupta

2
@Tarun : 셸의 PATH 변수를 읽고 주어진 명령에 대해 실행할 바이너리를 찾는 데 사용되는 방법을 읽습니다. ln 명령은 두 번째 이름을 동일한 파일에 연결합니다.
— Michael Dillon

33

나는 추가 /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

19

노드 실행 파일이 / 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

끝났다!


좋은 팁 - 나는 또한 한 sudo ln -s /home/ec2-user/.nvm/versions/node/v8.11.3/bin/npm /usr/bin/npm내가 sudo를하려고 노력했다으로 npm install수행 한 후에도 내 AWS EC2 인스턴스를 링크
— NULL 포인터

9

노드에 대한 절대 경로를 사용하지 않는 이유는 무엇입니까? upstart 스크립트를 사용하려는 경우 어쨌든 절대 경로가 필요합니다.

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

1
최상의 솔루션은 모든 ln솔루션이하는 것처럼 시스템을 엉망으로 만들지 않습니다 .
— SidOfc

5

다음을 시도하십시오.

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

2
파일에 secure_path설정된 배포판에서는 작동하지 않습니다 sudoers.
— kenorb

5

명령을 node사용하여 상위 (비 -sudo 셸)에서 실행 파일의 전체 경로를 전달할 수 which있습니다.

sudo `which node`

4

저에게는 노드 폴더의 소유권을 루트에서 ec2-user (ec2-user로 로그인)로 변경하는 작업 만했습니다.

(참고 : / var / lib /에 노드 폴더를 만들었습니다.)

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

그때

npm install mongojs

잘 작동합니다 (물론 npm을 설치했다면 괜찮습니다!)


3

다음은 심볼릭 링크를 사용하지 않거나 루트가 필요한 접근 방식입니다.

$ 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

노드를 루트로 실행하지 않는 이점은 여기에서 설명합니다.

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

인라인 :

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



1

제 경우에는 노드가 sudo 접두사 없이 설치되었습니다 . 그래서 노드가 작동하지 않는 이유는 수퍼 유저가 사용할 수 없습니다.sudo node server


-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을 설치했으며 이제 원하는 패키지를 설치할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.