首页 文章

运行在netns中的Node-Red和node.js版本的问题

提问于
浏览
1

我需要 run node-red in a netns 我创建了 . 我在这个命名空间中有一个专用的调制解调器接口,只有node-red才能访问 .

我正在使用Ubuntu 16.04并安装npm - >然后nvm版本管理器为node.js安装8.11.3然后安装node-red本身 .

我只安装了nvm版本8.11.3并将其设置为默认值 . 我希望这是唯一一个在任何地方运行的版本 .

Picture showing the output of nvm ls

当我从常规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 回答

  • 0

    通过安装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命令 .

    例如

    #!/bin/bash
    . ~/.nvm/nvm.sh
    nvm exec 8.11.3 node-red
    

    然后调用此脚本

    ip netns exec sensor su - iotdemo -c /path/to/script
    

    有关让nvm在脚本中工作的详细信息,请参阅this .

相关问题