我需要 run node-red in a netns 我创建了 . 我在这个命名空间中有一个专用的调制解调器接口,只有node-red才能访问 .
我正在使用Ubuntu 16.04并安装npm - >然后nvm版本管理器为node.js安装8.11.3然后安装node-red本身 .
我只安装了nvm版本8.11.3并将其设置为默认值 . 我希望这是唯一一个在任何地方运行的版本 .
当我从常规shell启动node-red时,它将以node.js版本8.11.3启动
当我在netns中启动node-red时,它也会启动node.js版本8.11.3 [我使用-u / directory选项运行与普通用户相同的流]
Problem: 当我从自动shell脚本中启动netn中的node-red时,它将以node.js版本4.9.1启动[我使用-u / directory选项运行与普通用户相同的流]
Welcome to Node-RED
===================
21 Jun 11:42:15 - [info] Node-RED version: v0.18.7
21 Jun 11:42:15 - [info] **Node.js version: v4.2.6**
21 Jun 11:42:15 - [info] Linux 4.13.0-45-generic x64 LE
脚本中的启动线是:
ip netns exec sensor node-red -u /home/iotdemo/.node-red
“sensor”是netns名称,-u选项指向与普通用户相同的流目录 .
为什么它使用我甚至没有安装的node.js版本启动,以及如何使用所需的v8.11.3启动它?
我怀疑它与root与用户(iotdemo)有关,但它似乎在命名空间中启动一个进程,你必须以root身份执行它 .
谢谢你考虑这个问题 .
1 回答
通过安装npm,你必须同时安装NodeJS作为先决条件(因为npm只是另一个NodeJS应用程序) .
这意味着您在版本v4.2.6上安装了NodeJS的系统级别
nvm只是在用户路径中混淆,在系统bin目录之前插入搜索路径(例如/ bin / usr / bin / usr / local / bin),然后维护一组指向不同版本的NodeJS的符号链接 . 由于您将所有内容设置为用户iotdemo,因此只有此用户将启用nvm路径,这就是root用户仍然看到NodeJS的系统安装版本的原因 .
最简单的选择是编写一个脚本,使用
su
来运行node-red作为iotdemo用户,并将其传递给ip netns exec命令 .例如
然后调用此脚本
有关让nvm在脚本中工作的详细信息,请参阅this .