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

14

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

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

    
задан Louisgv 08.08.2016 в 23:20
источник

3 ответа

13

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

Если это действительно невозможно, вы можете создать пакеты «фиктивный» .deb , используя equivs-control и equivs-build , чтобы сообщить apt , что у вас установлены зависимости. Обратите внимание, что это может потенциально запутать 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 <[email protected]>
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 09.08.2016 в 03:36
5

Это проблема с распространением программного обеспечения nvm. Они просто не делают никакой специфической упаковки для дистрибутива. Чтобы быть конкретным, было быстрое чтение nvm, и они просто исполняли двоичные файлы. Например, вот что он устанавливает для nodejs 6: Ссылка Это не содержит стандартных метаданных .deb или .rpm, поэтому до тех пор, пока они должным образом не выпустят реальные пакеты, мало что может сделать менеджер пакетов уровня дистрибутива, и они, вероятно, будут конфликтовать друг с другом. Если я понимаю, что точка nvm выпускает правильные пакеты, это не то, что их интересует именно потому, что связывает их с поддержкой дистрибутивных пакетов. Поэтому вместо этого у нас есть хак, который является nvm. Может быть, проблема с их git. Это может быть исправлено сообществом nodejs.

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

    
ответ дан sevenbitbyte 09.08.2016 в 03:14
4

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

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

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

  • установите пакет с помощью apt-get и установите с ним все зависимости.

ответ дан Anwar 09.08.2016 в 09:28