web-dev-qa-db-fra.com

Apt-get ne reconnaît pas le logiciel de noeud installé via nvm

J'essaie d'installer un paquetage .deb, mais il nécessite plusieurs dépendances telles que nodejs, nodejs-underscore, mais toutes celles-ci sont déjà installées via nvm et sont disponibles.

Est-ce que je peux quand même faire en sorte que apt-get reconnaisse les paquets installés via NVM afin qu'ils ne se contredisent pas? Je sais qu'apt-get concerne l'ensemble du système, alors que nvm fonctionne sur un espace utilisateur local, ce qui pourrait nécessiter un piratage.

15
Louisgv

L’approche la plus simple, chaque fois que possible, consiste à niquement utiliser soit les packages nvmo.deb. Cela vous évitera probablement beaucoup de maux de tête à long terme, alors examinez-vous en premier. Il semble que presque tout ce qui concerne les nœuds fourni par un paquetage .deb pourrait être installé via nvm à la place.

Si cela n’est vraiment pas possible, vous pourrez peut-être créer des packages "factices" .deb utilisant equivs-control et equivs-build pour indiquer à apt que les dépendances sont installées. . Notez que cela pourrait potentiellement confondre apt si vous vous trompez. De même, même si vous désinstallez nvm paquets, apt pensera toujours que vous avez les substituts que vous avez définis dans les paquets factices jusqu'à ce que vous désinstalliez eux-mêmes les paquets factices.

Tout d’abord, installez "equivs" pour pouvoir construire les paquets factices:

Sudo apt-get install equivs

Créez un fichier de contrôle décrivant le package factice:

cd ~
equivs-control nodejs-dummy

Editez ce fichier de contrôle:

nano nodejs-dummy

Décommentez et changez les lignes dans le fichier de contrôle comme vous le souhaitez. En particulier, définissez la ligne "Fournit:" pour répertorier les packages que vous avez substitués à l'aide de nvm. Par exemple:

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

Construisez le paquet:

equivs-build nodejs-dummy

Enfin, installez-le:

Sudo dpkg -i nodejs-dummy_use_the_actual_filename.deb

Rincez et répétez l'opération que vous avez remplacée avec nvm. Si un package dépend d'une version spécifique d'un autre package que vous avez remplacé par nvm, vous devrez peut-être utiliser le numéro de version exact dont il dépend. Cependant, je ne sais pas quels problèmes pourraient en résulter et vous devrez probablement reconstruire vos packages factices chaque fois que les packages du système d'exploitation changent de version.

13
hampercm

Ceci est un problème avec la façon dont nvm distribue les logiciels. Ils ne font tout simplement pas d'emballage spécifique à la distribution. Pour être précis, faites une lecture rapide de NVM et ils ne font que lire des binaires. Par exemple, voici ce qu’il installe pour nodejs 6: https://nodejs.org/.../lates.../node-v6.3.1-linux-x64.tar.gz Ceci ne ne contient pas de métadonnées .deb ou .rpm standard. Par conséquent, les gestionnaires de paquets au niveau de la distribution n’auront pas grand chose à faire jusqu’à ce que les vrais paquets soient correctement distribués et ils seront probablement en conflit les uns avec les autres. Si je comprends bien, l’intérêt de la publication des paquets appropriés par nvm ne les intéresse pas tout à fait, car cela les lie au support des paquets spécifiques à la distribution. Donc, au lieu de cela, nous avons le hack qui est nvm. Peut-être déposer un problème contre leur git. Cela ne peut être corrigé que par la communauté nodejs.

Notamment, npm et nvm ne semblent actuellement prendre en charge aucun concept de signature de code ( source ), alors comparé à l’emballage de la distribution qui est bien pris en charge par la plupart des gestionnaires de paquets de la distribution. C'est une approche assez peu sécurisée pour l'installation de packages système.

5
sevenbitbyte

Non, vous ne pouvez pas comme vous l'avez déjà dit. Apt fonctionne au niveau système, où nvm normal installe les packages au niveau utilisateur.

Vous avez deux options -

  • Soit le paquet souhaité via NVM et utilisez les autres paquets NVM déjà installés, soit

  • installez le paquet en utilisant apt-get et installez toutes les dépendances avec.

4
Anwar