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

15

Я пытаюсь установить .debпакет, однако он требует нескольких зависимостей, таких как nodejs, nodejs-underscore, но все они уже установлены nvmи доступны.

Могу ли я в любом случае apt-getраспознать пакеты, установленные через nvm, чтобы они не конфликтовали? Я знаю, что apt-get является общесистемным, тогда как nvm работает в локальном пользовательском пространстве, так что это может потребовать некоторого взлома.

Louisgv
источник

Ответы:

13

Самый простой подход, когда это возможно, это использовать только один nvm или несколько .deb пакетов. Это, вероятно, избавит вас от многих головных болей в долгосрочной перспективе, так что сначала посмотрите на это. Кажется, что почти все связанное с узлами, предоставляемое .debпакетом, может быть установлено через nvmнего.

Однако, если это действительно невозможно, вы можете создать «фиктивные» .debпакеты, используя equivs-controlи equivs-buildсообщить, aptчто у вас установлены зависимости. Обратите внимание, что это может сбить с толку apt, если вы ошибаетесь. Кроме того, даже если вы удалите nvmпакеты, apt все равно будет думать, что у вас есть заменители, которые вы определили в фиктивных пакетах, пока вы не удалите сами фиктивные пакеты.

Во-первых, установите «эквиваленты», чтобы мы могли создать пустые пакеты:

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, вам может потребоваться использовать именно тот номер версии, от которого он зависит. Однако я не уверен, какие проблемы могут возникнуть из-за этого, и вам, вероятно, придется пересматривать фиктивные пакеты всякий раз, когда пакеты ОС меняют версии.

hampercm
источник
1
Большое спасибо за ответ! Мой рейтинг низок, поэтому upvote не считается, но я проголосовал!
Louisgv
3
@Louisgv, если это ответило на ваш вопрос, подумайте о его принятии .
Борис Паук
Не знал об эквивалентах. Это отличный инструмент, спасибо!
brandizzi
5

Это проблема с тем, как nvm распространяет программное обеспечение. Они просто не делают какой-либо дистрибутив специфической упаковки. Чтобы быть точным, мы быстро прочитали nvm, и они просто получают двоичные файлы. Например, вот что он устанавливает для nodejs 6: https://nodejs.org/.../lates.../node-v6.3.1-linux-x64.tar.gz. Он не содержит никаких стандартных .deb или .rpm метаданных, поэтому до тех пор, пока они должным образом не выпустят реальные пакеты, не все, что могут сделать менеджеры пакетов на уровне дистрибутива, вероятно, будут конфликтовать друг с другом. Если я понимаю, смысл nvm в выпуске соответствующих пакетов - это не то, что их интересует именно потому, что это связывает их с поддержкой пакетов, специфичных для дистрибутива. Таким образом, вместо этого у нас есть взлом, который является NVM. Возможно подать проблему против их мерзавца. Это может быть исправлено только сообществом nodejs.

В частности, npm и nvm в настоящее время, похоже, не поддерживают какую-либо концепцию подписывания кода ( источника ), поэтому по сравнению с дистрибутивом, который хорошо поддерживается в большинстве менеджеров пакетов дистрибутива. Это довольно небезопасный подход к установке системных пакетов.

sevenbitbyte
источник
4

Нет, ты не можешь, как ты уже сказал. Apt работает на системном уровне, где обычные nvm устанавливают пакеты на уровне пользователя.

У вас есть два варианта -

  • Либо желаемый пакет через nvm и используйте другие уже установленные пакеты nvm, либо

  • установить пакет, используя apt-getи установить все зависимости с ним.

Анвар
источник