113

Tôi vừa cài đặt nodejs trên một cá thể vi EC2 mới.

Tôi đã cài đặt nó một cách bình thường, ./mình -> make -> sudo make install.

Vấn đề: Khi tôi chạy "nút" dưới người dùng ec2, nó chạy hoàn hảo. Khi tôi chạy "nút sudo", nó không thành công.

Tôi phát hiện ra rằng nút nằm trong:

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

và đường dẫn hiện tại là

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

nhưng, đường dẫn sudo là

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

sau đó tôi đã cố gắng chỉnh sửa PATH gốc để bao gồm các đường dẫn đến nút, vì vậy "nút" chạy khi tôi đăng nhập bằng root - nhưng nó vẫn không hoạt động khi tôi đăng nhập với tư cách người dùng ec2 và chạy "nút sudo" .

Tôi cần điều này để cài đặt npm thích hợp. Bất kỳ ý tưởng về làm thế nào để bao gồm đường dẫn nút trong khi chạy "nút sudo"?

|
309

Vâng, nó hơi khó chịu nhưng bạn có thể sửa nó bằng một số liên kết:

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

Có thể có nhiều hơn nhưng đó là tất cả những gì tôi đã chạy qua cho đến nay. Thiếu nút-waf sẽ khiến một số npmcài đặt không thành công với thông báo lỗi khá khó hiểu.

|
  • 1

    Cảm ơn bạn!!! - tại chỗ trên. nâng cao.

    – Trịnh Đức Tùng 11:52:19 02/11/2011
  • 1

    Tôi chỉ tò mò, liên kết này có phải được thực hiện chỉ trong hệ thống Amazon AMI không? Hệ thống Amazon AMI có tách đường dẫn gốc khỏi đường dẫn người dùng không?

    – Tạ Bá Thành 20:45:38 22/02/2012
  • 1

    Điều này đã không làm việc cho tôi vì một vài lý do. 1) Tôi không có quyền truy cập sudo. Tôi đang ở trên một máy chủ được chia sẻ. 2) /usr/localkhông tồn tại. Tôi đã tạo một thư mục ~ / local, mặc dù. 3) Sau khi loại bỏ /usrsudotừ mỗi dòng mã này và chạy chúng qua bảng điều khiển của tôi, không có gì thay đổi.

    – Bùi Bích Trang 22:15:38 05/07/2013
  • 1

    Đó là hữu ích. Nhưng bất cứ ai cũng có thể expalin tại sao và làm thế nào nó làm cho mọi thứ hoạt động?

    – Lý Đông Khánh 07:02:51 27/12/2013
  • 1

    @Tarun: đọc lên biến PATH của shell và cách nó được sử dụng để tìm nhị phân nào sẽ thực thi cho bất kỳ lệnh đã cho nào. Lệnh ln chỉ liên kết một tên thứ hai với cùng một tệp.

    – Tạ Hoàng An 08:01:23 27/12/2013
30

Tôi đã thêm /usr/local/binvào secure_pathtrong/etc/sudoers

$ sudo visudo

Sau đó thay đổi dòng này:

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

Đến:

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

nó xảy ra bởi vì nút thực thi không được tìm thấy trong / usr / bin. Vì vậy, hãy làm theo các bước:

  1. tìm nút:

whereis node

trong trường hợp của tôi: node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node

  1. tạo một liên kết tượng trưng cho nút:

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

Xong rôi!

|
  • 1

    mẹo hay - Tôi cũng đã làm sudo ln -s /home/ec2-user/.nvm/versions/node/v8.11.3/bin/npm /usr/bin/npmnhư tôi đang cố gắng thực hiện sudo npm installtrên ví dụ aws ec2 của mình sau khi theo liên kết

    – Pham Minh Cuong 06:10:11 14/08/2018
7

Tại sao không sử dụng đường dẫn tuyệt đối đến nút? Nếu bạn có kế hoạch sử dụng một kịch bản mới, nó sẽ cần một đường dẫn tuyệt đối.

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

hãy thử như sau:

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

Bạn có thể chuyển đường dẫn đầy đủ để nodethực thi từ cha (shell không sudo) bằng cách sử dụng whichlệnh.

sudo `which node`
|
4

Đối với tôi, nó chỉ hoạt động để thay đổi quyền sở hữu thư mục nút từ root sang người dùng ec2 (đăng nhập với tên người dùng ec2).

(Lưu ý: Tôi đã tạo thư mục nút của mình trong / var / lib /)

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

Sau đó

npm install mongojs

nên hoạt động tốt (tất nhiên là bạn đã cài đặt npm ok rồi!)

|
3

Đây là một cách tiếp cận không sử dụng symlink hoặc yêu cầu 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

Sau đó, tôi đã làm:

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

Những lợi ích của việc không chạy nút như root được thảo luận ở đây:

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

Nội tuyến của nó với:

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

|
1

Tôi không biết đây có phải là cách đúng đắn không, nhưng đây là những gì tôi đã làm ...

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

Cái này được cài đặt npm, và bây giờ tôi có thể cài đặt bất kỳ gói nào tôi muốn.

|
1

Trong trường hợp của tôi, Node đã được cài đặt mà không có tiền tố sudo . Vì vậy, nút không có sẵn cho siêu người dùng mà tại sao nó không hoạt độngsudo node server

|
0

Làm thế nào về việc sử dụng "sudo $ (nút nào)" thay vì "nút sudo"?

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.