Apt-get không nhận ra phần mềm nút được cài đặt qua nvm


15

Tôi đang cố gắng cài đặt một .debgói tuy nhiên nó yêu cầu một số phụ thuộc như nodejs, nodejs-underscore, nhưng tất cả các gói đó đã được cài đặt qua nvmvà có sẵn.

Có cách nào tôi có thể apt-getnhận ra các gói được cài đặt qua nvm để chúng không bị xung đột không? Tôi biết rằng apt-get là toàn hệ thống trong khi nvm hoạt động ở không gian người dùng cục bộ nên điều này có thể cần một số hack.

Câu trả lời:


13

Cách tiếp cận đơn giản nhất, bất cứ khi nào có thể là chỉ sử dụng một trong hai nvm hoặc .deb gói. Điều này có thể sẽ giúp bạn tiết kiệm rất nhiều đau đầu trong thời gian dài, vì vậy hãy nhìn vào đó trước. Có vẻ như gần như mọi thứ liên quan đến nút được cung cấp bởi một .debgói có thể được cài đặt thông qua nvm.

Tuy nhiên, nếu điều đó thực sự không thể, bạn có thể tạo các .debgói "giả" bằng cách sử dụng equivs-controlequivs-buildnói aptrằng bạn đã cài đặt các phụ thuộc. Lưu ý rằng điều này có khả năng gây nhầm lẫn apt nếu bạn gặp sự cố. Ngoài ra, ngay cả khi bạn gỡ cài đặt nvmcác gói, apt vẫn sẽ nghĩ rằng bạn có các sản phẩm thay thế mà bạn đã xác định trong các gói giả cho đến khi bạn tự gỡ cài đặt các gói giả.

Đầu tiên, cài đặt "Equivs" để chúng ta có thể xây dựng các gói giả:

sudo apt-get install equivs

Tạo một tệp điều khiển mô tả gói giả:

cd ~
equivs-control nodejs-dummy

Chỉnh sửa tập tin điều khiển này:

nano nodejs-dummy

Hủy nhận xét và thay đổi dòng trong tệp điều khiển như mong muốn. Cụ thể, đặt dòng "Cung cấp:" để liệt kê các gói bạn đã thay thế bằng cách sử dụng nvm. Ví dụ:

Package: nodejs-dummy
Version: (version slightly higher than what the apt package actually provides)
Maintainer: Your Name <yourname@example.com>
Provides: nodejs
Architecture: all
Description: Something that will remind you what this does ;)

Xây dựng gói:

equivs-build nodejs-dummy

Cuối cùng, cài đặt nó:

sudo dpkg -i nodejs-dummy_use_the_actual_filename.deb

Rửa sạch và lặp lại cho bất kỳ gói nào bạn đã thay thế bằng cách sử dụng nvm. Nếu một gói phụ thuộc vào một phiên bản cụ thể của gói khác mà bạn đã thay thế nvm, bạn có thể cần sử dụng số phiên bản chính xác mà nó phụ thuộc. Tuy nhiên, tôi không chắc vấn đề gì có thể phát sinh từ việc này và có thể bạn sẽ cần tiếp tục xây dựng lại các gói giả của mình bất cứ khi nào các gói hệ điều hành thay đổi phiên bản.


1
Cám ơn đã trả lời! Thứ hạng của tôi thấp nên upvote không được tính nhưng tôi đã bỏ phiếu!
Louisgv

3
@Louisgv nếu điều này trả lời câu hỏi của bạn, hãy xem xét chấp nhận nó .
nhện của

Không biết về đẳng thức. Đây là một công cụ tuyệt vời, cảm ơn!
brandizzi

5

Đây là một vấn đề với cách nvm phân phối phần mềm. Họ chỉ đơn giản là không làm bất kỳ bao bì cụ thể distro. Để được cụ thể đã đọc nhanh nvm và họ chỉ là những nhị phân. Chẳng hạn, đây là những gì nó cài đặt cho nodejs 6: https://nodejs.org/.../lates.../node-v6.3.1-linux-x64.tar.gz Điều này không chứa bất kỳ .deb tiêu chuẩn nào hoặc .rpm siêu dữ liệu vì vậy cho đến khi chúng phát hành đúng các gói thực, không có bất kỳ trình quản lý gói phân phối cấp nào có thể làm được và chúng có thể sẽ xung đột với nhau. Nếu tôi hiểu quan điểm của việc phát hành các gói phù hợp không phải là điều họ quan tâm chính xác bởi vì nó liên kết với họ để hỗ trợ các gói cụ thể phân phối. Vì vậy, thay vì chúng tôi có hack đó là nvm. Có thể nộp một vấn đề chống lại git của họ. Điều này chỉ có thể được sửa chữa bởi cộng đồng nodejs.

Đáng chú ý là npm và nvm hiện dường như không hỗ trợ bất kỳ khái niệm nào về ký mã ( nguồn ) vì vậy khi so sánh với bao bì phân phối được hỗ trợ tốt trong hầu hết các trình quản lý gói của distro. Đây là một cách tiếp cận khá không an toàn để cài đặt các gói hệ thống.


4

Không, bạn không thể như bạn đã nói. Apt hoạt động ở cấp hệ thống, nơi các gói cài đặt nvm thông thường ở cấp độ người dùng.

Bạn có hai lựa chọn -

  • Hoặc là gói mong muốn của bạn thông qua nvm và sử dụng các gói nvm khác đã được đặt sẵn, hoặc

  • cài đặt gói bằng cách sử dụng apt-getvà cài đặt tất cả các phụ thuộc với nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.