apt-get 无法识别通过 nvm 安装的节点软件

Lou*_*sgv 15 package-management apt nodejs

我正在尝试安装一个.deb包,但是它需要几个依赖项,例如 nodejs、nodejs-underscore,但所有这些都已经通过安装nvm并且可用。

无论如何我可以apt-get识别通过 nvm 安装的软件包,以便它们不会发生冲突?我知道 apt-get 是系统范围的,而 nvm 在本地用户空间工作,所以这可能需要一些黑客攻击。

ham*_*rcm 13

最简单的方法,只要有可能就是使用nvm .deb包。从长远来看,这可能会为您省去很多麻烦,因此请先研究一下。似乎.deb包提供的几乎任何与节点相关的东西都可以通过安装来nvm代替。

但是,如果这确实不可能,您可以使用创建“虚拟”.debequivs-controlequivs-build告诉apt您已安装依赖项。请注意,如果您弄错了,这可能会混淆 apt。此外,即使您卸载nvm软件包,apt 仍会认为您拥有您在虚拟软件包中定义的替代品,直到您卸载虚拟软件包本身。

首先,安装“equivs”,以便我们可以构建虚拟包:

sudo apt-get install equivs
Run Code Online (Sandbox Code Playgroud)

创建一个描述虚拟包的控制文件:

cd ~
equivs-control nodejs-dummy
Run Code Online (Sandbox Code Playgroud)

编辑此控制文件:

nano nodejs-dummy
Run Code Online (Sandbox Code Playgroud)

根据需要取消注释并更改控制文件中的行。特别是设置“提供:”行以列出您使用nvm. 例如:

Package: nodejs-dummy
Version: (version slightly higher than what the apt package actually provides)
Maintainer: Your Name <yourname@example.com>
Provides: nodejs
Architecture: all
Description: Something that will remind you what this does ;)
Run Code Online (Sandbox Code Playgroud)

构建包:

equivs-build nodejs-dummy
Run Code Online (Sandbox Code Playgroud)

最后,安装它:

sudo dpkg -i nodejs-dummy_use_the_actual_filename.deb
Run Code Online (Sandbox Code Playgroud)

冲洗并重复使用nvm. 如果某个包依赖于您已替换为 的另一个包的特定版本nvm,则您可能需要使用它所依赖的确切版本号。但是,我不确定这样做可能会产生什么问题,并且每当操作系统包更改版本时,您可能需要不断重建您的虚拟包。

  • @Louisgv 如果这回答了您的问题,请考虑 [接受](https://askubuntu.com/help/someone-answers)。 (3认同)

sev*_*yte 5

这是 nvm 如何分发软件的问题。他们只是没有做任何发行版特定的包装。具体来说,快速阅读了 nvm,它们只是 wget'ing 二进制文件。例如,这是它为 nodejs 6 安装的内容:https ://nodejs.org/.../lates.../node-v6.3.1-linux-x64.tar.gz这不包含任何标准的 .deb 或.rpm 元数据,因此在他们正确发布真正的软件包之前,发行版级别的软件包管理器无能为力,并且它们可能会相互冲突。如果我理解 nvm 发布适当软件包的意义并不是他们感兴趣的,正是因为它将它们与支持发行版特定的软件包联系起来。所以相反,我们有 nvm 的黑客。也许对他们的 git 提出问题。这只能由 nodejs 社区纠正。

值得注意的是,npm 和 nvm 目前似乎不支持任何代码签名(源代码)的概念,因此与大多数发行版的包管理器都支持的发行版打包相比。这是安装系统包的一种相当不安全的方法。