O Apt-get não reconhece o software do nó instalado via nvm

14

Estou tentando instalar um pacote .deb , mas ele requer várias dependências, como nodejs, nodejs-underscore, mas todas elas já estão instaladas via nvm e estão disponíveis.

Existe alguma maneira que eu possa ter apt-get reconhecer pacotes instalados via nvm para que eles não colidam? Eu sei que o apt-get é todo o sistema, enquanto o nvm trabalha no espaço do usuário local, então isso pode precisar de algum hacking.

    
por Louisgv 08.08.2016 / 23:20

3 respostas

13

A abordagem mais simples, sempre que possível, é usar somente nvm ou .deb packages. Isso provavelmente vai lhe poupar muitas dores de cabeça a longo prazo, então olhe para isso primeiro. Parece que quase tudo relacionado a nós que é fornecido por um pacote .deb pode ser instalado via nvm .

Se isso não for possível, no entanto, você poderá criar "fictícios" .deb packages usando equivs-control e equivs-build para informar apt de que você tem as dependências instaladas. Note que isso poderia confundir apt se você errar. Além disso, mesmo que você desinstale nvm packages, o apt ainda achará que você possui os substitutos que você definiu nos pacotes fictícios até desinstalar os próprios pacotes fictícios.

Primeiro, instale "equivs" para que possamos criar os pacotes fictícios:

sudo apt-get install equivs

Crie um arquivo de controle que descreva o pacote fictício:

cd ~
equivs-control nodejs-dummy

Edite este arquivo de controle:

nano nodejs-dummy

Descomente e altere as linhas no arquivo de controle conforme desejado. Em particular, defina a linha "Fornece:" para listar os pacotes que você substituiu usando nvm . Por exemplo:

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

Crie o pacote:

equivs-build nodejs-dummy

Por fim, instale-o:

sudo dpkg -i nodejs-dummy_use_the_actual_filename.deb

Enxágüe e repita para os pacotes que você substituiu usando nvm . Se um pacote depender de uma versão específica de outro pacote que você substituiu por nvm , talvez seja necessário usar o número de versão exato do qual ele depende. No entanto, não tenho certeza de quais problemas podem surgir, e você provavelmente precisará continuar a reconstruir seus pacotes fictícios sempre que os pacotes do SO mudarem de versão.

    
por hampercm 09.08.2016 / 03:36
5

Este é um problema de como o nvm distribui software. Eles simplesmente não estão fazendo nenhuma embalagem específica de distro. Para ser específico, fiz uma rápida leitura do nvm e eles são apenas binários wget'ing. Por exemplo, aqui está o que ele instala para o nodejs 6: link Isso não contém metadados padrão .deb ou .rpm, então até que eles liberam pacotes reais corretamente, não há muito do que os gerentes de pacotes podem fazer e provavelmente entrarão em conflito uns com os outros. Se eu estou entendendo o ponto de nvm liberar pacotes apropriados não é algo que eles estão interessados exatamente porque os vincula ao suporte a pacotes específicos de distro. Então, ao invés disso, nós temos o hack que é nvm. Talvez arquivar um problema contra o seu git. Isso só pode ser corrigido pela comunidade do nodejs.

Notavelmente, npm e nvm atualmente parecem não suportar nenhum conceito de assinatura de código ( source ) por isso, quando comparado a embalagem de distribuição que é bem suportada na maioria dos gerenciadores de pacotes da distro. Essa é uma abordagem bastante insegura para instalar pacotes do sistema.

    
por sevenbitbyte 09.08.2016 / 03:14
4

Não, você não pode como você já disse. O Apt funciona no nível do sistema, onde pacotes regulares de instalação do nvm estão no nível do usuário.

Você tem duas opções -

  • Ou o seu pacote desejado via nvm e use os outros pacotes nvm já instalados, ou

  • instale o pacote usando apt-get e instale todas as dependências com ele.

por Anwar 09.08.2016 / 09:28