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/binsecure_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.