Apt-get no reconoce el software de nodo instalado a través de nvm

15

Estoy tratando de instalar un .debpaquete, sin embargo, requiere varias dependencias, como nodejs, nodejs-underscore, pero todas ellas ya están instaladas a través de nvmy están disponibles.

¿Hay alguna forma de que pueda tener apt-getpaquetes de reconocimiento instalados a través de nvm para que no choquen? Sé que apt-get es para todo el sistema, mientras que nvm funciona en el espacio de usuario local, por lo que esto podría necesitar algún pirateo.

Louisgv
fuente

Respuestas:

13

El enfoque más simple, siempre que sea posible, es usar solo uno nvm o los .deb paquetes. Esto probablemente le ahorrará muchos dolores de cabeza a largo plazo, así que investigue primero. Parece que casi todo lo relacionado con los nodos que proporciona un .debpaquete podría instalarse en su nvmlugar.

Sin embargo, si eso realmente no es posible, puede crear .debpaquetes "ficticios" utilizando equivs-controly equivs-builddecir aptque tiene instaladas las dependencias. Tenga en cuenta que esto podría confundir a apt si se equivoca. Además, incluso si desinstala nvmpaquetes, apt seguirá pensando que tiene los sustitutos que ha definido en los paquetes ficticios hasta que desinstale los paquetes ficticios.

Primero, instale "equivs" para que podamos construir los paquetes ficticios:

sudo apt-get install equivs

Cree un archivo de control que describa el paquete ficticio:

cd ~
equivs-control nodejs-dummy

Edite este archivo de control:

nano nodejs-dummy

Descomente y cambie las líneas en el archivo de control como desee. En particular, configure la línea "Proporciona:" para enumerar los paquetes que ha sustituido utilizando nvm. Por ejemplo:

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

Construye el paquete:

equivs-build nodejs-dummy

Finalmente, instálalo:

sudo dpkg -i nodejs-dummy_use_the_actual_filename.deb

Enjuague y repita los paquetes que haya sustituido usando nvm. Si un paquete depende de una versión específica de otro paquete con el que ha reemplazado nvm, es posible que deba usar el número de versión exacto del que depende. Sin embargo, no estoy seguro de qué problemas pueden surgir, y es probable que deba seguir reconstruyendo sus paquetes ficticios cada vez que los paquetes del sistema operativo cambien de versión.

Hampercm
fuente
1
Muchas gracias por la respuesta! Mi clasificación es baja, ¡así que el voto a favor no cuenta, pero voté!
Louisgv
3
@Louisgv si esto respondió su pregunta, considere aceptarla .
Boris the Spider
No sabía sobre equivs. Esta es una gran herramienta, gracias!
brandizzi
5

Este es un problema con la forma en que nvm distribuye el software. Simplemente no están haciendo ningún empaque específico de la distribución. Para ser específicos, hice una lectura rápida de nvm y son solo binarios. Por ejemplo, esto es lo que instala para nodejs 6: https://nodejs.org/.../lates.../node-v6.3.1-linux-x64.tar.gz Esto no contiene ningún estándar .deb o .rpm metadatos, por lo que hasta que liberen correctamente los paquetes reales, no hay mucho que los administradores de paquetes de nivel de distribución puedan hacer y probablemente entren en conflicto entre sí. Si entiendo el punto de que nvm publique paquetes adecuados no es algo en lo que estén interesados ​​exactamente porque los vincula a admitir paquetes específicos de distribución. Entonces, en cambio, tenemos el truco que es nvm. Tal vez presentar un problema contra su git. Esto solo puede ser corregido por la comunidad de nodejs.

En particular, npm y nvm actualmente no parecen admitir ningún concepto de firma de código ( fuente ), por lo que, en comparación con el paquete de distribución, que es bien compatible con la mayoría de los administradores de paquetes de la distribución. Este es un enfoque bastante inseguro para instalar paquetes de sistema.

sevenbitbyte
fuente
4

No, no puedes como ya dijiste. Apt funciona a nivel de sistema, donde los paquetes de instalación de nvm regulares a nivel de usuario.

Tienes dos opciones:

  • O su paquete deseado a través de nvm y use los otros paquetes nvm ya instalados, o

  • instale el paquete usando apt-gete instale todas las dependencias con él.

Anwar
fuente