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


120

新しいEC2マイクロインスタンスに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を編集してノードへのパスを含めようとしたので、ルートとしてログインすると「ノード」が実行されますが、ec2-userとしてログインして「sudoノード」を実行しても機能しません。

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


ルート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

エラーがnode-waf発生npm rebuildする原因の欠如。これを解決するクリーンな方法はありますか?する必要がありますか?
user730569

1
これは私にはいくつかの理由でうまくいきませんでした。1)sudoアクセス権がありません。共有ホストを利用しています。2)/usr/local存在しない。ただし、ディレクトリ〜/ localを作成しました。3)を除去した後/usrsudoのコード行のそれぞれから、私のコンソールを介してそれらを実行し、何も変わっていませんでした。
Wolfpack'08

1
それは役に立ちました。しかし、だれがなぜ、どのように機能するかを説明できますか?
Tarun Gupta

2
@Tarun:シェルのPATH変数と、それを使用して、特定のコマンドで実行するバイナリを見つける方法を確認します。lnコマンドは、2番目の名前を同じファイルにリンクするだけです。
マイケルディロン

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

私にとっては、ノードフォルダーの所有権をrootから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

私の場合、Nodeは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.