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代替。
但是,如果这确实不可能,您可以使用创建“虚拟”.deb包equivs-control并equivs-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,则您可能需要使用它所依赖的确切版本号。但是,我不确定这样做可能会产生什么问题,并且每当操作系统包更改版本时,您可能需要不断重建您的虚拟包。
这是 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 目前似乎不支持任何代码签名(源代码)的概念,因此与大多数发行版的包管理器都支持的发行版打包相比。这是安装系统包的一种相当不安全的方法。
| 归档时间: |
|
| 查看次数: |
714 次 |
| 最近记录: |