EC2'de: sudo node komutu bulunamadı, ancak sudo içermeyen düğüm tamam


120

Yeni bir EC2 mikro bulut sunucusuna nodej'leri yükledim.

Normal olarak kurdum, ./configure -> make -> sudo make install.

Sorun: ec2-user altında "node" çalıştırdığımda mükemmel çalışıyor. "Sudo node" çalıştırdığımda başarısız oluyor.

Düğümün içinde olduğunu öğrendim:

[ec2-user@XXXX ~]$ whereis node
node: /usr/local/bin/node /usr/local/lib/node

ve mevcut yol

[ec2-user@XXXX ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/opt/aws/bin:/home/ec2-user/bin

ancak sudo yolu

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

daha sonra, kök PATH'i düğüme giden yolları içerecek şekilde düzenlemeye çalıştım, bu nedenle "düğüm", kök olarak oturum açtığımda çalışır - ancak ec2 kullanıcısı olarak oturum açıp "sudo düğümü" çalıştırdığımda yine de çalışmaz .

Buna npm düzgünce yüklemek için ihtiyacım var. "Sudo node" çalıştırılırken düğüm yolunu nasıl dahil edeceğiniz hakkında bir fikriniz var mı?


PATH kökünü nasıl düzenlediniz?
sonraki duyuruya kadar duraklatıldı.

Çok denedikten sonra bunu yaptım ve işe yarıyor: <pre> sudo su export PATH = $ PATH: usr / local / node / curl npmjs.org/install.sh | sh </pre>

Yanıtlar:


320

Evet, biraz can sıkıcı ama bazı bağlantılarla düzeltebilirsiniz:

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

Daha fazlası olabilir ama şimdiye kadar karşılaştığım tek şey bu. Node-waf eksikliği, bazı npmkurulumların oldukça şifreli bir hata mesajıyla başarısız olmasına neden olur.


Merak ediyorum, bu bağlantının sadece Amazon AMI sisteminde mi yapılması gerekiyor? Amazon AMI sistemi, kök yolunu kullanıcı yolundan ayırır mı?
user482594

Hata yapacak node-wafnedenlerin olmaması npm rebuild. Bunu düzeltmenin temiz bir yolu var mı? İhtiyacım var mı?
user730569

1
Bu benim için birkaç nedenden dolayı işe yaramadı. 1) sudo erişimim yok. Paylaşılan bir ev sahibiyim. 2) /usr/localmevcut değil. Yine de ~ / local dizini yaptım. 3) çıkardıktan sonra /usrve sudokod bu satırların her birinden ve benim konsol üzerinden bunları çalıştıran, hiçbir şey değişmişti.
Wolfpack'08

1
Bu yardımcı oldu. Ama kimse işlerin neden ve nasıl yürüdüğünü açıklayabilir mi?
Tarun Gupta

2
@Tarun: Kabuğun PATH değişkenini ve herhangi bir komut için hangi ikilinin çalıştırılacağını bulmak için nasıl kullanıldığını okuyun. Ln komutu sadece aynı dosyaya ikinci bir isim bağlar.
Michael Dillon

33

Ben ekledi /usr/local/biniçin secure_pathde/etc/sudoers

$ sudo visudo

Ardından bu satırı değiştirin:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Kime:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

19

bu, çalıştırılabilir düğümün / usr / bin içinde bulunmaması nedeniyle olur. Bu yüzden aşağıdaki adımları izleyin:

  1. düğüm bul:

whereis node

benim durumumda: node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node

  1. düğüm için sembolik bir bağlantı yapın:

    sudo ln -s /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node /usr/bin/node

Bitti!


harika ipucu - ben de ws ec2 örneğimde sudo ln -s /home/ec2-user/.nvm/versions/node/v8.11.3/bin/npm /usr/bin/npmsudo yapmaya çalıştığım gibi, bağlantıyınpm install izledikten sonra yaptım
NULL pointer

9

Düğüme giden mutlak yolu neden kullanmıyorsunuz? Bir upstart komut dosyası kullanmayı planlıyorsanız, yine de mutlak bir yola ihtiyaç duyacaktır.

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

1
en iyi çözüm, tüm lnçözümlerde olduğu gibi çalışır ve sistemle uğraşmaz .
SidOfc

5

takip etmeyi dene:

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

2
Dosyada secure_pathayarlanmış dağıtımlar için çalışmaz sudoers.
kenorb

5

Komutu nodekullanarak üst öğeden (sudo olmayan kabuk) yürütülebilir dosyaya tam yolu iletebilirsiniz which.

sudo `which node`

4

Benim için, düğüm klasörünün sahipliğini kökten ec2-kullanıcısına (ec2-user olarak oturum açmış) değiştirmek için çalıştı.

(Not: Düğüm klasörümü / var / lib / içinde oluşturdum)

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

Sonra

npm install mongojs

iyi çalışmalı (tabii ki npm'yi yüklemiş olmanız koşuluyla!)


3

İşte sembolik bağlantı kullanmayan veya kök gerektirmeyen bir yaklaşım:

$ 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

Sonra yaptım:

$ git clone https://github.com/isaacs/npm.git
$ cd npm
$ make install

Düğümü kök olarak çalıştırmamanın faydaları burada tartışılmaktadır:

http://increaseyourgeek.wordpress.com/2010/08/18/install-node-js-without-using-sudo/

Onunla aynı hizada:

https://github.com/joyent/node/wiki/Installation



1

Benim durumumda, Node sudo öneki olmadan kuruldu . Yani düğüm süper kullanıcı için uygun değildi, bu yüzden çalışmıyorsudo node server


-1

Doğru yol mu bilmiyorum ama yaptığım bu ...

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

Bu npm yüklendi ve şimdi istediğim herhangi bir paketi kurabilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.