web-dev-qa-db-fra.com

Impossible de départ à partir de la racine (ou de Sudo)

J'ai mentionné que mon application utilise une version différente de NodeJS lors de l'exécution de Sudo.

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

Ceci v0.11.8-pre m'a causé quelques problèmes, donc je ne veux certainement pas l'utiliser, mais je ne peux pas le changer pour root.

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

J'ai essayé d'installer NVM à partir de l'utilisateur root, mais le message d'erreur "NVM est déjà installé", mais NVM n'est toujours pas trouvé lors de l'exécution de Sudo. Quel est mon problème?

71
Vitalii Korsakov

La liste de commandes ci-dessous (source: digitalocean ) semble résoudre le problème

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

La commande ci-dessus est un peu compliquée, mais elle ne fait que copier quelle que soit la version du noeud active via nvm dans le répertoire /usr/local/ (où les fichiers globaux installés par l'utilisateur doivent vivre sur un VPS linux) et définir les autorisations pour que tous leur.

J'espère que cela t'aides!

151
Venkat Selvan

Ma solution consiste à créer des liens symboliques à partir des versions de node et npm que j'utilise pour /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"

Cela rend npm et node disponibles pour tous les utilisateurs.

76
SimpleJ

Votre problème est que nvm n'est pas dans le chemin lorsque vous utilisez Sudo.

Alors tapez 

$ which nvm

et le résultat sera quelque chose comme

/home/abc/mynvm/nvm

Réessayez maintenant avec Sudo:

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

Je suppose que vous rencontrez alors le problème suivant: l'utilisateur root ne peut pas trouver la version 0.10.13, mais laisse voir le message d'erreur suivant ...

13
CFrei

J'ai eu ton problème aussi. Enfin j'ai travaillé autour de ça. Voici ma solution:

  1. Désinstallez nvm et nodejs. Voici quelques liens utiles: Désinstallation de nvm . Si vous avez installé nodejs avec apt-get, vous pouvez le désinstaller avec la commande apt-get purge nodejs.
  2. Installez un NVM global. Voir cette page: nvm global . Comme il est dit, "Standard NVM a rencontré des difficultés pour travailler dans des environnements multi-utilisateurs ou enracinés"

Après avoir redémarré votre terminal, vous pouvez exécuter la commande Sudo nvm ls.

5
Qianyue

La raison fondamentale est que nvm n'est pas un vrai programme. C'est une fonction bash qui est chargée dans les .profile, .bashrc ou ... de l'utilisateur. Ainsi, Sudo ne la récupère pas automatiquement dans $ PATH comme la plupart des autres programmes.

Un autre gestionnaire de version de noeud est n: https://github.com/tj/n . C'est un vrai programme, donc Sudo le récupèrera via le $ PATH sans aucun piratage (tant que Sudo a /usr/local/bin dans son $ 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
4
wisbucky

J'ai essayé la même chose sur ma machine où j'ai nvm également et j'ai une réponse légèrement différente:

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

Mon hypothèse est que vous avez installé le noeud 0.11 en dehors de NVM. ( Via le gestionnaire de paquets ou même à partir de la source )

Par conséquent, si vous exécutez un nœud via Sudo, ce nœud autonome sera utilisé.

Est-ce que cela a du sens ou est-ce que je me trompe?

4
Aurélien Thieriot
$ Sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3
2
pmontrasio

Selon README

Lorsque vous utilisez nvm, vous n'avez pas besoin de Sudo pour installer globalement un module avec npm -g. Ainsi, au lieu de faire Sudo npm install -g grunt, faites plutôt npm install -g grunt

Besoin de Sudo npm?

Dans mon cas, j'ai besoin de Sudo npm run start qui nécessite l'accès à certains fichiers nécessitant un accès root. Selon ce numéro

Vous n'utilisez pas Sudo. Vous devriez plutôt chmod/chown le fichier pour que l'utilisateur qui a nvm ait accès au fichier ;.

En somme

Le responsable de nvm croit fermement que nous n'avons pas besoin de Sudo: P

1
lzl124631x

La solution la plus simple consiste probablement à cliquer sur l'exécutable nvm.sh où qu'il se trouve. 

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

Cela fonctionne très bien pour moi (en supposant que ce soit le chemin d'installation).

La procédure d'installation complète ressemblerait à 

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"

Et ensuite, vous pouvez exécuter la commande ci-dessus pour accéder au fichier nvm.sh récemment installé.

0
itchyspacesuit

Installez nvm globalement avec
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | Sudo bash

0
Ricky