netns 中的 Node-Red 和 node.js 版本 运行 出现问题
Trouble with Node-Red and node.js version running in a netns
我需要在我创建的 netns 中 运行 node-red。我在这个命名空间中有一个专用的调制解调器接口,只有 node-red 应该可以访问它。
我正在使用 Ubuntu 16.04 并安装了 npm -> 然后是 node.js 的 nvm 版本管理器来安装 8.11.3,然后是 node-red 本身。
我只安装了 nvm 版本 8.11.3 并将其设置为默认值。我希望这是唯一的版本 运行ning 任何地方。
当我从常规 shell 启动 node-red 时,它会以 node.js 版本 8.11.3
启动
当我在 netns 中启动 node-red 时,它也会使用 node.js 版本 8.11.3 [我使用 -u /directory 选项 运行 与普通用户相同的流程]
问题:
当我从自动 shell 脚本在 netns 中启动 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 身份执行。
感谢您考虑这个问题。
通过安装 npm,您必须同时安装 NodeJS 作为先决条件(因为 npm 只是另一个 NodeJS 应用程序)。
这意味着您在系统级安装了版本为 v4.2.6 的 NodeJS
nvm 只是混淆用户路径,在系统 bin 目录之前插入搜索路径(例如 /bin /usr/bin /usr/local/bin),然后维护一组指向不同版本的符号链接节点JS。由于您将所有设置设置为用户 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。
我需要在我创建的 netns 中 运行 node-red。我在这个命名空间中有一个专用的调制解调器接口,只有 node-red 应该可以访问它。
我正在使用 Ubuntu 16.04 并安装了 npm -> 然后是 node.js 的 nvm 版本管理器来安装 8.11.3,然后是 node-red 本身。
我只安装了 nvm 版本 8.11.3 并将其设置为默认值。我希望这是唯一的版本 运行ning 任何地方。
当我从常规 shell 启动 node-red 时,它会以 node.js 版本 8.11.3
启动当我在 netns 中启动 node-red 时,它也会使用 node.js 版本 8.11.3 [我使用 -u /directory 选项 运行 与普通用户相同的流程]
问题: 当我从自动 shell 脚本在 netns 中启动 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 身份执行。
感谢您考虑这个问题。
通过安装 npm,您必须同时安装 NodeJS 作为先决条件(因为 npm 只是另一个 NodeJS 应用程序)。
这意味着您在系统级安装了版本为 v4.2.6 的 NodeJS
nvm 只是混淆用户路径,在系统 bin 目录之前插入搜索路径(例如 /bin /usr/bin /usr/local/bin),然后维护一组指向不同版本的符号链接节点JS。由于您将所有设置设置为用户 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。