web-dev-qa-db-ja.com

EC2:Sudo nodeコマンドが見つかりませんが、Sudoのないノードは問題ありません

新しいEC2 microインスタンスにnodejsをインストールしました。

./configure-> make-> Sudo make installで正常にインストールしました。

問題: ec2-userで「node」を実行すると、完全に実行されます。 「Sudoノード」を実行すると、失敗します。

ノードが次の場所にあることがわかりました。

[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を編集してノードへのパスを含めようとしたため、rootとしてログインしているときに「node」が実行されますが、ec2-userとしてログインして「Sudo node」を実行しても動作しません。

Npmを適切にインストールするためにこれが必要です。 「Sudoノード」の実行中にノードパスを含める方法に関するアイデアはありますか?

115
foobar

はい、少し面倒ですが、いくつかのリンクで修正できます:

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のインストールが失敗し、やや不可解なエラーメッセージが表示されます。

313
Michael Dillon

/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
30
Jack Frost

ノードの実行可能ファイルが/ 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

終わった!

12
Jeff Pal

ノードへの絶対パスを使用しないのはなぜですか? upstartスクリプトの使用を計画している場合は、とにかく絶対パスが必要になります。

Sudo /usr/local/bin/node server.js
7
Shripad Krishna

以下を試してください:

export PATH=$PATH:/usr/local/bin
Sudo node --version
5
Amro

nodeコマンドを使用して、親(非Sudoシェル)からwhich実行可能ファイルにフルパスを渡すことができます。

Sudo `which node`
4
Pavel Zubkou

私にとっては、ノードフォルダーの所有権をルートからec2-user(ec2-userとしてログイン)に変更するだけでした。

(注:ノードフォルダーを/ var/lib /に作成しました)

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

それから

npm install mongojs

正常に動作するはずです(もちろん、npmをインストールしていればOKです!)

4
user1839216

以下は、シンボリックリンクを使用しない、またはルートを必要としないアプローチです。

$ 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

3
Jack Murphy

「Sudo node」の代わりに「Sudo $(which node)」を使用してはどうですか?

1
Will Voelcker

私の場合、NodeはSudoプレフィックスなしでインストールされました。そのため、スーパーユーザーがノードを使用できなかったため、なぜそれが機能していないのかSudo node server

1
shubham