Apt-get не розпізнає програмне забезпечення вузла, встановлене через nvm


15

Я намагаюся встановити .debпакет, однак він вимагає декількох залежностей, таких як nodejs, nodejs-підкреслення, але всі вони вже встановлені через nvmі є доступними.

Чи все-таки я можу встановити apt-getпакунки, встановлені через nvm, щоб вони не зіткнулися? Я знаю, що apt-get є загальносистемним, тоді як nvm працює в локальному просторі користувача, тому для цього може знадобитися деякий злом.

Відповіді:


13

Найпростіший підхід, коли це можливо, щоб тільки використовувати або nvm чи .deb пакети. Це, ймовірно, позбавить вас від багатьох головних болів у довгостроковій перспективі, тому погляньте на це в першу чергу. Схоже, майже все, що пов'язано з вузлом, що надається .debпакетом, може бути встановлено через nvm.

Якщо це насправді неможливо, можливо, ви зможете створити "фіктивні" .debпакети, використовуючи equivs-controlта equivs-buildсказати, aptщо у вас встановлені залежності. Зауважте, що це може заплутати сприятливий, якщо ви помилитесь. Крім того, навіть якщо ви будете видаляти nvmпакунки, apt все одно буде вважати, що у вас є замінники, визначені вами фіктивних пакетів, поки ви не видалите самі пакети фіктивних пакетів.

По-перше, встановіть "equivs", щоб ми могли скласти пакети фіктивних пакетів:

sudo apt-get install equivs

Створіть контрольний файл, який описує макетний пакет:

cd ~
equivs-control nodejs-dummy

Редагуйте цей контрольний файл:

nano nodejs-dummy

Відкиньте коментарі та змініть рядки в контрольному файлі за бажанням. Зокрема, встановіть рядок "Надає:", щоб перелічити пакунки, які ви замінили nvm. Наприклад:

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 ;)

Складіть пакет:

equivs-build nodejs-dummy

Нарешті, встановіть його:

sudo dpkg -i nodejs-dummy_use_the_actual_filename.deb

Промийте та повторіть будь-які пакунки, які ви замінили nvm. Якщо пакет залежить від конкретної версії іншого пакета, який ви замінили nvm, можливо, вам буде потрібно використовувати саме той номер версії, від якого залежить. Я не впевнений, які проблеми можуть виникнути з цього приводу, і вам, ймовірно, доведеться продовжувати перебудову ваших пакетів, коли пакети ОС змінюють версії.


1
Дякую за відповідь! Мій рейтинг низький, тому підрахунок не рахується, але я проголосував!
Луїгв

3
@Louisgv, якщо це відповіло на ваше запитання, подумайте про його прийняття .
Борис Павук

Не знав про еквіваленти. Це чудовий інструмент, дякую!
брендізі

5

Це проблема з тим, як nvm поширює програмне забезпечення. Вони просто не роблять жодної специфічної упаковки. Щоб бути конкретним, я швидко прочитав nvm, і вони просто wget'ing бінарні файли. Наприклад, ось що він встановлюється для nodejs 6: https://nodejs.org/…/lates.../node-v6.3.1-linux-x64.tar.gz Це не містить стандартного .deb або .rpm метадані, тому доки вони належним чином не випустять реальні пакети, мало хто з менеджерів пакетів дистрибутива може зробити це, і вони, ймовірно, конфліктують між собою. Якщо я розумію, що nvm випускати належні пакунки - це не те, що саме їх цікавить, оскільки це пов'язує їх з підтримкою конкретних пакетів. Отже, замість цього у нас є хак, який є nvm. Можливо, подайте питання проти їх git. Це може виправити лише спільнота nodejs.

Помітно npm та nvm, схоже, не підтримують жодної концепції підписання коду ( джерело ), тому в порівнянні з distro упаковкою, яка добре підтримується у більшості дистрибуторів диспетчерів пакетів. Це досить небезпечний підхід до встановлення системних пакетів.


4

Ні, ви не можете, як ви вже говорили. Apt працює на системному рівні, де регулярно nvm встановлюють пакети на рівні користувача.

У вас є два варіанти -

  • Або потрібний вам пакет через nvm та використовуйте інші пакети nvm, які вже є вбудованими, або

  • встановіть пакет за допомогою apt-getта встановіть усі залежності із ним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.