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

15

Estou tentando instalar um .debpacote, no entanto, ele requer várias dependências, como nodejs, nodejs-underscore, mas todas já estão instaladas nvme estão disponíveis.

Existe alguma maneira de ter apt-getpacotes de reconhecimento instalados via nvm para que não colidam? Eu sei que o apt-get abrange todo o sistema, enquanto o nvm trabalha no espaço do usuário local, portanto, isso pode precisar de hackers.

Louisgv
fonte

Respostas:

13

A abordagem mais simples, sempre que possível, é usar apenas um nvm ou .deb pacotes. Provavelmente, isso poupará muitas dores de cabeça a longo prazo, então verifique isso primeiro. Parece que quase tudo relacionado ao nó que é fornecido por um .debpacote pode ser instalado via nvm.

Se isso realmente não for possível, no entanto, você poderá criar .debpacotes "fictícios" usando equivs-controle equivs-buildinformando aptque possui as dependências instaladas. Observe que isso pode confundir o apt se você errar. Além disso, mesmo se você desinstalar nvmpacotes, o apt ainda pensará que você tem os substitutos que você definiu nos pacotes fictícios até desinstalar os pacotes fictícios.

Primeiro, instale "equivs" para que possamos construir 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

Remova o comentário 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águe e repita os pacotes que você substituiu usando nvm. Se um pacote depende de uma versão específica de outro pacote que você substituiu nvm, pode ser necessário usar o número exato da versão em que ele depende. Entretanto, não tenho certeza de quais problemas podem surgir e você provavelmente precisará continuar reconstruindo seus pacotes fictícios sempre que os pacotes do sistema operacional mudarem de versão.

hampercm
fonte
11
Muito obrigado pela resposta! Minha classificação é baixa, portanto, o voto positivo não conta, mas eu votei!
Louisgv
3
@Louisgv, se isso respondeu à sua pergunta, considere aceitá-la .
Boris the Spider
Não sabia sobre equivs. Esta é uma ótima ferramenta, obrigado!
Brandizzi
5

Este é um problema com a forma como a nvm distribui software. Eles simplesmente não estão fazendo nenhuma embalagem específica da distribuição. Para ser específico, fiz uma rápida leitura da nvm e elas são apenas binários. Por exemplo, aqui está o que ele instala para o nodejs 6: https://nodejs.org/.../lates.../node-v6.3.1-linux-x64.tar.gz Isso não contém nenhum padrão .deb ou .rpm, portanto, até que eles liberem adequadamente os pacotes reais, não há muito o que os gerentes de pacotes no nível da distribuição possam fazer e provavelmente entrarão em conflito um com o outro. Se estou entendendo que o nvm liberar pacotes adequados não é algo em que eles estejam interessados ​​exatamente porque os vincula ao suporte a pacotes específicos de distribuição. Então, em vez disso, temos o hack que é nvm. Talvez arquive um problema contra o git deles. Isso só pode ser corrigido pela comunidade nodejs.

Notavelmente, atualmente, o npm e o nvm parecem não suportar nenhum conceito de assinatura de código ( fonte ); portanto, quando comparado ao pacote de distribuição, que é bem suportado na maioria dos gerenciadores de pacotes da distribuição. Essa é uma abordagem bastante insegura para instalar pacotes de sistema.

sevenbitbyte
fonte
4

Não, você não pode como você já disse. O Apt trabalha no nível do sistema, onde a nvm regular instala pacotes no nível do usuário.

Você tem duas opções -

  • O pacote desejado via nvm e use os outros pacotes nvm já instalados ou

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

Anwar
fonte