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


15

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

无论如何,我是否可以apt-get识别通过nvm安装的软件包,以免它们冲突?我知道apt-get是系统范围的,而nvm是在本地用户空间工作的,因此这可能需要一些技巧。

Answers:


13

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

但是,如果确实不可能,则可以.deb使用equivs-controlequivs-build告诉apt您已安装依赖项来创建“虚拟” 程序包。请注意,如果您弄错了,这可能会容易混淆。同样,即使您卸载nvm软件包,apt仍然会认为您拥有在虚拟软件包中定义的替代项,直到您自己卸载虚拟软件包。

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

sudo apt-get install equivs

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

cd ~
equivs-control nodejs-dummy

编辑此控制文件:

nano nodejs-dummy

根据需要取消注释并更改控制文件中的行。特别是,设置“ Provides:”行以列出已使用替换的软件包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 ;)

构建包:

equivs-build nodejs-dummy

最后,安装它:

sudo dpkg -i nodejs-dummy_use_the_actual_filename.deb

冲洗并重复使用替换的软件包nvm。如果某个软件包取决于您替换为的另一个软件包的特定版本nvm,则可能需要使用该软件包所依赖的确切版本号。我不确定这样做会引起什么问题,并且每当OS软件包更改版本时,您可能都需要继续重建虚拟软件包。


1
非常感谢您的回复!我的排名很低,因此upvote不算数,但我投了赞成票!
路易丝

3
@Louisgv如果这回答了您的问题,请考虑接受它
蜘蛛鲍里斯(Boris the Spider)

不知道对等。这是一个很棒的工具,谢谢!
brandizzi '16

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当前似乎不支持任何代码签名(source)的概念,因此与大多数发行版的软件包管理器中都很好支持的发行版打包相比。这是安装系统软件包的相当不安全的方法。


4

不,你不能像你所说的那样。Apt在系统级别工作,常规的nvm在用户级别安装软件包。

您有两种选择-

  • 通过nvm所需的软件包并使用已经安装的其他nvm软件包,或者

  • 使用安装软件包apt-get并安装所有依赖项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.