新しい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ノード」の実行中にノードパスを含める方法に関するアイデアはありますか?
はい、少し面倒ですが、いくつかのリンクで修正できます:
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
のインストールが失敗し、やや不可解なエラーメッセージが表示されます。
/usr/local/bin
のsecure_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
ノードの実行可能ファイルが/ usr/binに見つからないために発生します。したがって、次の手順を実行します。
whereis node
私の場合:node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node
ノードのシンボリックリンクを作成します。
Sudo ln -s /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node /usr/bin/node
終わった!
ノードへの絶対パスを使用しないのはなぜですか? upstartスクリプトの使用を計画している場合は、とにかく絶対パスが必要になります。
Sudo /usr/local/bin/node server.js
以下を試してください:
export PATH=$PATH:/usr/local/bin
Sudo node --version
node
コマンドを使用して、親(非Sudoシェル)からwhich
実行可能ファイルにフルパスを渡すことができます。
Sudo `which node`
私にとっては、ノードフォルダーの所有権をルートからec2-user(ec2-userとしてログイン)に変更するだけでした。
(注:ノードフォルダーを/ var/lib /に作成しました)
Sudo chown -R ec2-user /var/lib/node/
それから
npm install mongojs
正常に動作するはずです(もちろん、npmをインストールしていればOKです!)
以下は、シンボリックリンクを使用しない、またはルートを必要としないアプローチです。
$ 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/
そのインライン:
「Sudo node」の代わりに「Sudo $(which node)」を使用してはどうですか?
私の場合、NodeはSudoプレフィックスなしでインストールされました。そのため、スーパーユーザーがノードを使用できなかったため、なぜそれが機能していないのかSudo node server