Debian 替代系统:具有相同名称和优先级的程序

Debian 替代系统:具有相同名称和优先级的程序

我无法从update-alternatives文档中理解优先级系统是如何工作的。

假设我想/usr/bin/node指向nodejsNodejs 应用程序,并指向一个业余无线电节目,node在其他情况下称为 。我不得不说:

update-alternatives --install /usr/bin/node nodejs /usr/bin/nodejs 100 --slave /usr/share/man/...

假设我有两个程序希望/usr/bin/node是不同的东西,第一个 - Nodejs,第二个 - 业余无线电。他们如何确定使用哪一个?

优先级在这个过程中扮演什么角色?

添加:请注意npm,nodejs 包管理器需要调用nodejs 命令node,因此我必须将nodejs 安装为node.

答案1

我认为您在这里误解了替代系统的作用。它用于提供一种使用类似类型的替代程序的简单方法。通常的示例,手册页中使用的是编辑器:

例如,如果系统上同时安装了文本编辑器 ed(1) 和 nvi(1),则替代系统将导致通用名称 /usr/bin/editor 默认引用 /usr/bin/nvi。

在您的情况下,node指的是两个完全不同的应用程序。

如果两者都可以从主 Debian 存储库安装,那么很可能其中一个软件包维护者会命名其可执行文件,这样就不会与另一个软件包发生冲突。例如,无线电应用程序的二进制文件可以重命名为,/usr/bin/node_radio这样它就不会与 Node.js 发生冲突/usr/bin/node

另一方面,如果您node自己编译业余无线电,则必须确保更改编译,以便它不会创建相同名称的二进制文件,或者确保它安装到不同的路径中,例如/usr/local/bin/node.如果您选择后者,那么node当您在命令提示符下键入它时执行的命令取决于$PATH变量中的搜索顺序。如果错误的执行一个后,您必须输入完整路径才能运行它:/usr/local/bin/node

无论如何,update-alternatives这里对你没有帮助。

上述所有内容只是一个示例,作为快速检查,apt-get download node随后dpkg --contents node_0.3.2-7.4_all.deb显示业余无线电node已安装为可执行文件的/usr/sbin/ax25-node链接。 /usr/sbin/nodeNode.js 安装/usr/bin/nodejs因此两者永远不会发生冲突。

答案2

任何时候,/usr/bin/node都只能是其中一个方案。替代机制是一种选择的方式。

当两者都安装时,优先级控制哪一个是默认值。他们没有提供一种方法来以某种方式同时拥有这两者,并根据其他程序所称的这个程序在两者之间进行选择。

当程序通过名称相互调用时,搜索路径上只能有一个具有给定名称的程序。您应该消除node程序中命令的歧义。关注 Debian,用于nodejsNode.js 和ax25-nodeHAM 程序。如果有一个更改确实很烦人,请安装该node软件包(/usr/bin/node为 生成别名ax25-node)或该nodejs-legacy软件包(/usr/bin/node为 生成别名nodejs)。

如果您确实有很多调用node且无法轻松更改的程序,请使用不同的PATH变量运行它们,一个变量包含一个包含符号链接的目录ax25-node,另一个包含一个包含符号链接的目录nodejs

mkdir -p /usr/local/etc/nodejs/bin /usr/local/etc/ax25/bin
ln -s ../../../../bin/nodejs /usr/local/etc/nodejs/bin/node
ln -s ../../../../bin/ax25-node /usr/local/etc/ax25/bin/node

PATH=/usr/local/etc/ax25/bin:$PATH program-using-ax25
PATH=/usr/local/etc/node/bin:$PATH program-using-nodejs

相关内容