IT story

루트 (또는 sudo)에서 NVM을 사용할 수 없습니다.

hot-time 2020. 9. 12. 11:33
반응형

루트 (또는 sudo)에서 NVM을 사용할 수 없습니다.


.NET에서 실행할 때 내 애플리케이션이 다른 버전의 NodeJS를 사용한다고 언급했습니다 sudo.

$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre

v0.11.8-pre로 인해 몇 가지 문제가 발생했기 때문에 사용하고 싶지는 않지만 루트로 변경할 수는 없습니다.

$ sudo nvm use v0.10.23
sudo: nvm: command not found

루트 사용자로부터 nvm을 설치하려고했지만 "NVM이 이미 설치되었습니다"라는 오류가 발생했지만에서 실행할 때 여전히 nvm을 찾을 수 없습니다 sudo. 내 문제는 무엇입니까?


아래 명령 목록 (출처 : digitalocean )이 문제를 해결하는 것 같습니다.

n=$(which node); \
n=${n%/bin/node}; \
chmod -R 755 $n/bin/*; \
sudo cp -r $n/{bin,lib,share} /usr/local

위의 명령은 약간 복잡하지만 nvm을 통해 활성화 된 노드의 버전을 /usr/local/디렉토리 (사용자가 설치 한 전역 파일이 Linux VPS에 있어야 함 )에 복사 하고 모든 사용자가 액세스 할 수 있도록 권한을 설정하는 것 뿐입니다. .

도움이 되었기를 바랍니다!


내 솔루션의 버전 심볼릭 링크 만드는 것입니다 nodenpmI가 사용하고 있습니다를 /usr/local/bin:

sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"

이는하게 npm하고 node모든 사용자가 사용할.


문제는 nvm사용할 때 경로에 없다는 것 sudo입니다.

그래서 입력

$ which nvm

결과는 다음과 같습니다.

/home/abc/mynvm/nvm

지금 다시 시도하십시오 sudo:

sudo /home/abc/mynvm/nvm use v0.10.23

그런 다음 루트 사용자가 0.10.13 버전을 찾을 수 없다는 문제가 발생했다고 가정하지만 다음 오류 메시지를 볼 수 있습니다.


근본적인 이유는 nvm실제 프로그램 이 아니기 때문 입니다. 그것은 사용자에로드되는 bash는 기능이다 .profile, .bashrc또는 ... 그래서이 sudo자동으로 대부분의 다른 프로그램처럼은 $ PATH에서 그것을 선택하지 않습니다.

또 다른 노드 버전 관리자입니다 n: https://github.com/tj/n . 실제 프로그램이 즉, 그래서 sudo(만큼 어떠한 해킹없이 $ 경로를 통해 그것을 선택할 것 sudo가지고 /usr/local/bin는 $ PATH에).

sudo npm install -g n  # install 'n' globally
which n                # should be /usr/local/bin/n

sudo n lts             # need sudo to switch node versions
node --version         # v6.10.0
sudo node --version    # v6.10.0

나도 너의 문제가 있었다. 마침내 나는 그것을 해결했습니다. 내 해결책은 다음과 같습니다.

  1. nvm 및 nodejs를 제거하십시오. 다음은 몇 가지 유용한 링크입니다. Uninstallation of nvm . apt-get을 사용하여 nodejs를 설치 한 경우 명령을 사용하여 제거 할 수 있습니다 apt-get purge nodejs.
  2. 글로벌 nvm을 설치합니다. 이 페이지를 참조하십시오 : nvm global . "Standard nvm은 다중 사용자 또는 루팅 된 환경에서 작업하는 데 어려움이있는 것으로 알려져 있습니다."

터미널을 다시 시작한 후 명령을 실행할 수 있습니다 sudo nvm ls.


$ sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3

README 에 따르면

nvm을 사용할 때를 사용하여 sudo모듈을 전역 적으로 설치할 필요 npm -g없으므로 대신 수행하십시오 sudo npm install -g grunt.npm install -g grunt

sudo npm이 필요하십니까?

제 경우에는 sudo npm run start루트 액세스가 필요한 일부 파일에 대한 액세스가 필요합니다. 이 문제 에 따르면 ,

당신은 사용하지 마십시오 sudo. 대신 nvm이있는 사용자가 파일에 액세스 할 수 있도록 파일을 chmod / chown해야합니다.

요약해서 말하면

nvm의 관리자는 우리가 다음을 할 필요가 없다고 강력하게 믿습니다 sudo.


I have tried the same on my machine where I have nvm as well and I have a slighlty different response:

$ sudo node --version                                                                                                                                                                    
sudo: node: command not found

My guess is that you have installed node 0.11 outside of nvm. (Via package manager or even from source)

Therefore, running node via sudo would pick up this standalone node instead.

Does that make sense or am I mistaken?


Install nvm globally with
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash


The easiest solution to this will likely be to just hit the nvm.sh executable wherever it is.

sudo /home/ubuntu/.nvm/nvm.sh install node

This works fine for me (assuming that's the install path).

The full install procedure would look like

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
export NVM_DIR="/home/ubuntu/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

And then you can run the command above to hit the newly installed nvm.sh

참고URL : https://stackoverflow.com/questions/21215059/cant-use-nvm-from-root-or-sudo

반응형