source

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

manycodes 2023. 11. 7. 20:59
반응형

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

애플리케이션에서 다른 버전의 노드를 사용하고 있음을 확인했습니다.JS에서 실행할 때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. 나의 문제는 무엇입니까?

내 해결책은 다음 버전에서 심볼릭 링크를 생성하는 것입니다.node그리고.npm저는 지금./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모든 사용자가 사용할 수 있습니다.

아래 명령 목록(출처: digital ocean)은 문제를 해결한 것 같습니다.

경고!!!!어떤 상황에서는 이러한 명령이 시스템을 손상시킬 수 있습니다!이 명령이 무엇을 하는지 확실히 알아두십시오!!!관련된

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에 있어야 함) 및 모든 사용자가 액세스할 수 있도록 권한을 설정합니다.

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

대체 노드 버전 관리자는n: https://github.com/tj/n .그건 진짜 프로그램이니까요.sudo해킹 없이 $PATH를 통해 픽업합니다.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

당신의 문제는..nvm를 사용할 때 경로에 없습니다.sudo.

그래서타입

$ which nvm

결과는 다음과 같습니다.

/home/abc/mynvm/nvm

지금 다시 시도해 보십시오.sudo:

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

그러면 루트 사용자가 0.10.13 버전을 찾을 수 없다는 문제가 발생하지만 다음 오류 메시지가 표시됩니다.

README에 의하면.

nvm을 사용할 때는 필요 없습니다.sudo전 세계적으로 모듈을 설치합니다.npm -g, 하는 대신에sudo npm install -g grunt, 대신에 하다npm install -g grunt

선데이프 필요하신가요?

저 같은 경우에는.sudo npm run start루트 액세스가 필요한 파일에 대한 액세스가 필요합니다.이 문제에 의하면,

당신은 사용하지 않습니다.sudo. 대신 파일을 chmod/chown해야 nvm을 가진 사용자가 파일에 액세스할 수 있습니다.

총합하여

nvm의 관리자는 우리가 할 필요가 없다고 강하게 믿고 있습니다.sudo:P

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

  1. nvm 및 nodejs를 제거합니다.다음은 유용한 링크입니다.nvm을(를) 제거합니다.apt-get을 사용하여 nodejs를 설치한 경우 명령을 사용하여 제거할 수 있습니다.apt-get purge nodejs.
  2. 글로벌 nvm을 설치합니다.nvm 글로벌 페이지를 참조하십시오."표준 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

@SimpleJ 솔루션을 확장하여 실제 nvm bin dir에서 모든 바이너리를 연결하는 데 사용할 수 있는 유용한 bash 스크립트를 만들었습니다./usr/local/bin:

#!/bin/bash
. ~/.nvm/nvm.sh

DIR=$NVM_DIR/versions/node/$(nvm version)/bin/*
DEST=/usr/local/bin

for filename in $DIR; do
    filename=$(basename $filename)
    DEST_FILE=$DEST/$filename
    echo "Copying $filename to $DEST_FILE"
    sudo ln -sf "$NVM_DIR/versions/node/$(nvm version)/bin/$filename" "$DEST_FILE"
done

나는 내가 가지고 있는 기계에도 똑같이 시도해 보았습니다.nvm그리고 저는 조금 다른 답변을 드립니다.

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

nvm 외부에 노드 0.11을 설치한 것으로 추정됩니다. (package manager 경유 또는 심지어 소스에서)

따라서 sudo를 통해 노드를 실행하면 대신 이 독립 실행형 노드가 선택됩니다.

그게 말이 되나요 아니면 제가 잘못 알고 있는 건가요?

이에 대한 가장 쉬운 해결책은 nvm.sh 실행 파일이 어디에 있든 바로 실행 파일을 다운로드하는 것입니다.

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

이것은 저에게 잘 작동합니다(설치 경로라고 가정합니다).

전체 설치 절차는 다음과 같습니다.

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"

그런 다음 위의 명령을 실행하여 새로 설치된 nvm.sh 을 누를 수 있습니다.

NVM API의 최신 node-js를 추가 패키지 삭제 버전을 사용하지 않고 설치하고 싶었습니다.그래서 SUDONVM install-latest-npm을 찾고 있었습니다.Mb 이것은 당신에게 효과가 있을 것입니다 - 그것은 분명히 어떤 앱도 설치/제거하지 않고 저에게 효과가 있었습니다. (분명히 당신의 시스템에 적합한 것으로 당신의_USER_DIRECTORY를 변경하세요)

sudo /home/YOUR_USER_DIRECTORY/.nvm/nvm.sh | nvm install-latest-npm 

설치했습니다.nvm그리고.node비우호적인 사용자로서.

이 sudo를 사용하기 위해서, 저는 이것을 수퍼유저의 것에 추가했습니다..bashrc파일:

$ sudo bash -c 'echo $HOME/.bashrc'
/root/.bashrc

추가할내용/root/.bashrc(바꾸기<your-user>):

# Lazy load NVM/NPM/Node
lazynvm() {
  unset -f nvm node npm
  export NVM_DIR=/home/<your-user>/.nvm
  [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
}

nvm() {
  lazynvm
  nvm $@
}

node() {
  lazynvm
  node $@
}

npm() {
  lazynvm
  npm $@
}

가장 간단한 접근법은 다음과 같은 것을 만드는 것입니다.PATH당신의 것을 포함할 변수./bin당신의 위치NVM_DIR. 예는 다음과 같습니다.

export NVM_DIR="$HOME/.nvm"
  [ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

PATH 변수에 NVM의 노드 이진법이 포함되도록 하려면 이 행을 추가합니다.

export PATH="$NVM_DIR/versions/node/$(nvm version)/bin:$PATH"

도움이 되길 바랍니다.

nvm을 글로벌하게 설치합니다.
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash

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

반응형