บน EC2: ไม่พบคำสั่ง sudo node แต่โหนดที่ไม่มี sudo ก็โอเค


120

ฉันเพิ่งติดตั้ง nodejs บนอินสแตนซ์ไมโคร EC2 ใหม่

ฉันติดตั้งตามปกติ, ./configure -> make -> sudo ทำการติดตั้ง

ปัญหา:เมื่อฉันเรียกใช้ "node" ภายใต้ ec2-user มันจะทำงานได้อย่างสมบูรณ์แบบ เมื่อฉันเรียกใช้ "sudo node" มันล้มเหลว

ฉันพบว่าโหนดอยู่ใน:

[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

จากนั้นฉันพยายามแก้ไขเส้นทางรูทเพื่อรวมพา ธ ไปยังโหนดดังนั้น "โหนด" จึงทำงานเมื่อฉันเข้าสู่ระบบในฐานะรูท - แต่ก็ยังใช้ไม่ได้เมื่อฉันเข้าสู่ระบบในฐานะผู้ใช้ ec2 และเรียกใช้ "sudo node" .

ฉันต้องการสิ่งนี้เพื่อติดตั้ง npm Properfly มีความคิดอย่างไรในการรวมเส้นทางโหนดในขณะที่เรียกใช้ "sudo node"


คุณแก้ไขเส้นทางรูทได้อย่างไร?
หยุดชั่วคราวจนกว่าจะมีประกาศอีกครั้ง

หลังจากพยายามมากฉันก็ทำสิ่งนี้และได้ผล: <pre> sudo su export PATH = $ PATH: usr / local / node / curl npmjs.org/install.sh | sh </pre>

คำตอบ:


320

ใช่มันค่อนข้างน่ารำคาญ แต่คุณสามารถแก้ไขได้ด้วยลิงค์:

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) หลังจากลบ/usrและsudoออกจากแต่ละบรรทัดของโค้ดเหล่านี้และเรียกใช้ผ่านคอนโซลของฉันก็ไม่มีอะไรเปลี่ยนแปลง
Wolfpack'08

1
นั่นเป็นประโยชน์ แต่ใครสามารถอธิบายว่าทำไมและวิธีการทำงาน?
Tarun Gupta

2
@Tarun: อ่านตัวแปร PATH ของเชลล์และวิธีใช้เพื่อค้นหาไบนารีที่จะดำเนินการสำหรับคำสั่งใด ๆ คำสั่ง ln เพียงแค่เชื่อมโยงชื่อที่สองกับไฟล์เดียวกัน
Michael Dillon

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 / 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

ทำไมไม่ใช้เส้นทางสัมบูรณ์ไปยังโหนด? หากคุณวางแผนที่จะใช้สคริปต์พุ่งพรวดมันจะต้องมีเส้นทางที่แน่นอน แต่อย่างใด

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

สำหรับฉันมันใช้งานได้เพียงแค่เปลี่ยนความเป็นเจ้าของโฟลเดอร์โหนดจากรูทเป็นผู้ใช้ ec2 (เข้าสู่ระบบในฐานะผู้ใช้ ec2)

(หมายเหตุ: ฉันสร้างโฟลเดอร์โหนดใน / var / lib /)

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

แล้วก็

npm install mongojs

ควรทำงานได้ดี (หากคุณติดตั้ง npm เรียบร้อยแล้ว!)


3

นี่คือแนวทางที่ไม่ใช้ symlinks หรือต้องใช้ root:

$ 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 ดังนั้นโหนดจึงไม่พร้อมใช้งานสำหรับ superuser ว่าเหตุใดจึงไม่ทำงาน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.