EC2 पर: sudo नोड कमांड नहीं मिला, लेकिन sudo के बिना नोड ठीक है


120

मैं सिर्फ एक नए EC2 माइक्रो उदाहरण पर नोडज स्थापित किया है।

मैंने इसे सामान्य रूप से स्थापित किया है ।/configure -> make -> sudo make install।

समस्या: जब मैं ec2-user के तहत "नोड" चलाता हूं, तो यह पूरी तरह से चलता है। जब मैं "सूडो नोड" चलाता हूं, तो यह विफल हो जाता है।

मुझे पता चला कि नोड में है:

[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

लेकिन, सूडो रास्ता है

[root@ip-10-112-222-32 ~]# echo $PATH
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin

तब मैंने रूट को नोड में शामिल करने के लिए रूट पथ को संपादित करने की कोशिश की, इसलिए "नोड" चलता है जब मैं रूट के रूप में लॉग इन करता हूं - लेकिन यह तब भी काम नहीं करेगा जब मैं ec2-user के रूप में लॉग इन करता हूं और "sudo नोड" चलाता हूं ।

मुझे npm उचित स्थापित करने के लिए इसकी आवश्यकता है। "सूडो नोड" को चलाने के दौरान नोड पथ को कैसे शामिल किया जाए, इस पर कोई विचार?


आपने रूट को कैसे संपादित किया?
अगली सूचना तक रोक दिया गया।

बहुत कोशिश करने के बाद, मैंने यह किया और यह काम करता है: <pre> sudo su export PATH = $ PATH: usr / स्थानीय / नोड / कर्ल 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

और भी बहुत कुछ हो सकता है, लेकिन यह सब मैंने अभी तक चलाया है। नोड-वफ़ की कमी के कारण कुछ npmइंस्टॉलेशन त्रुटि के बजाय असफल हो जाएंगे ।


मैं केवल उत्सुक हूं, क्या यह लिंकिंग केवल अमेज़ॅन एएमआई सिस्टम में किया जाना है? क्या अमेज़ॅन एएमआई सिस्टम उपयोगकर्ता पथ से रूट रूट को अलग करता है?
user482594

त्रुटियों के node-wafकारणों npm rebuildका अभाव । क्या इसका उपाय करने का एक साफ तरीका है? क्या मुझे यह करना ज़रूरी है?
user730569

1
यह मेरे लिए कुछ कारणों से काम नहीं आया। 1) मेरे पास सूडो एक्सेस नहीं है। मैं एक साझा होस्ट पर हूं। 2) /usr/localमौजूद नहीं है। मैंने एक निर्देशिका बनाई ~ / स्थानीय, यद्यपि। 3) कोड की इन पंक्तियों में से प्रत्येक को हटाने /usrऔर sudoमेरे कंसोल के माध्यम से चलाने के बाद, कुछ भी नहीं बदला था।
वोल्फपैक'08

1
वह सहायक था। लेकिन क्या कोई इस बात को उजागर कर सकता है कि यह काम क्यों और कैसे करता है
तरुण गुप्ता

2
@ तरुण: खोल के पेट चर पर पढ़ा जाता है और यह कैसे पता लगाया जाता है कि किसी भी दिए गए कमांड के लिए कौन सा बाइनरी निष्पादित करना है। Ln कमांड सिर्फ एक दूसरे नाम को उसी फाइल से लिंक करता है।
माइकल डिलन

33

मैं जोड़ा /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

19

ऐसा इसलिए होता है क्योंकि नोड निष्पादन योग्य / usr / बिन में नहीं पाया जाता है। तो चरणों का पालन करें:

  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जैसा कि मैं लिंक केnpm install बाद अपने aws ec2 उदाहरण पर sudo करने की कोशिश कर रहा था
NULL पॉइंटर

9

क्यों नहीं नोड के लिए पूर्ण पथ का उपयोग करें? यदि आप एक upstart स्क्रिप्ट का उपयोग करने की योजना बना रहे हैं तो उसे किसी भी मार्ग की आवश्यकता है।

sudo /usr/local/bin/node server.js

1
सबसे अच्छा समाधान, काम करता है और सिस्टम के साथ गड़बड़ नहीं करता है जैसे सभी lnसमाधान करते हैं।
सिडऑफ

5

निम्नलिखित प्रयास करें:

export PATH=$PATH:/usr/local/bin
sudo node --version

2
जो वितरण के लिए काम नहीं करेगा secure_pathsudoers फ़ाइल में सेट किए गए हैं।
केनोरब

5

आप कमांड nodeका उपयोग करके माता-पिता (गैर-सूडो शेल) से निष्पादन योग्य के लिए पूर्ण पथ पारित कर सकते हैं which

sudo `which node`

4

मेरे लिए, इसने नोड फ़ोल्डर के स्वामित्व को रूट से 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

मेरे मामले में, सूद उपसर्ग के बिना नोड स्थापित किया गया था । तो सुपरयुजर के लिए नोड अनुपलब्ध था कि यह काम क्यों नहीं कर रहा है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 स्थापित है, और मैं अब अपने इच्छित किसी भी पैकेज को स्थापित कर सकता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.