node-serialport 在高山 linux 上失败
node-serialport failing on alpine linux
我正在开发一个小型 nodejs (nodejs v4.3) 项目,该项目使用 node-serialport https://github.com/voodootikigod/node-serialport. I wrapped it in a docker image. First I successfully used debian as a base image but it had a total size of about 600MB. Then I switched to alpine linux https://hub.docker.com/_/alpine/ 并实现了 100MB 的图像大小。然而,nodejs 项目停止使用 alpine 作为基础图像。以下是一些日志:
安装节点串口日志:
> serialport@2.0.6 install /app/node_modules/serialport
> node-pre-gyp install --fallback-to-build
[serialport] Success: "/app/node_modules/serialport/build/Release/node-v46-linux-x64/serialport.node" is installed via remote
serialport@2.0.6 node_modules/serialport
├── bindings@1.2.1
├── async@0.9.0
├── sf@0.1.7
├── debug@2.2.0 (ms@0.7.1)
├── nan@2.0.9
└── optimist@0.6.1 (wordwrap@0.0.3, minimist@0.0.10)
当我尝试打开串行端口时出现错误:
npm ERR! Linux 3.19.0-30-generic
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "start"
npm ERR! node v4.3.0
npm ERR! npm v2.14.12
npm ERR! code ELIFECYCLE
npm ERR! app@1.2.0 start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the app@1.2.0 start script 'node ./bin/www'.
npm ERR! This is most likely a problem with the app package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node ./bin/www
npm ERR! You can get their info via:
npm ERR! npm owner ls app
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /app/app/npm-debug.log
module.js:435
return process.dlopen(module, path._makeLong(filename));
^
Error: Error relocating /app/app/node_modules/serialport/build/Release/node-v46-linux-x64/serialport.node: __strcpy_chk: symbol not found
at Error (native)
at Object.Module._extensions..node (module.js:435:18)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/app/app/node_modules/serialport/serialport.js:14:25)
at Module._compile (module.js:410:26)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
正如我所说,以 debian 作为基础映像它工作正常。我认为这可能与 alpine linux 缺少 node-serialport 所依赖的东西有关。我在 https://github.com/voodootikigod/node-serialport/issues/682 上创建了一个问题,但我不确定这是节点串口问题还是 alpine linux 问题。我在 alpine/busybox 上了解到 node-pre-gyp 有问题。
https://github.com/voodootikigod/node-serialport/pull/710
Alpine 是一个(非常)小的发行版,但它使用 musl 标准库而不是 glibc(大多数其他 Linux 发行版使用),因此它需要编译。
# If you don't have node/npm already, add that first
sudo apk add --no-cache nodejs
# Add the necessary build and runtime dependencies
sudo apk add --no-cache make gcc g++ python linux-headers udev
# Then we can install serialport, forcing it to compile
npm install serialport --build-from-source=serialport
我测试过了。它解决了这个问题。
这对我有用,运行 Alpine Linux 在 Docker 容器中:
npm install serialport --unsafe-perm --build-from-source=serialport
我正在开发一个小型 nodejs (nodejs v4.3) 项目,该项目使用 node-serialport https://github.com/voodootikigod/node-serialport. I wrapped it in a docker image. First I successfully used debian as a base image but it had a total size of about 600MB. Then I switched to alpine linux https://hub.docker.com/_/alpine/ 并实现了 100MB 的图像大小。然而,nodejs 项目停止使用 alpine 作为基础图像。以下是一些日志:
安装节点串口日志:
> serialport@2.0.6 install /app/node_modules/serialport
> node-pre-gyp install --fallback-to-build
[serialport] Success: "/app/node_modules/serialport/build/Release/node-v46-linux-x64/serialport.node" is installed via remote
serialport@2.0.6 node_modules/serialport
├── bindings@1.2.1
├── async@0.9.0
├── sf@0.1.7
├── debug@2.2.0 (ms@0.7.1)
├── nan@2.0.9
└── optimist@0.6.1 (wordwrap@0.0.3, minimist@0.0.10)
当我尝试打开串行端口时出现错误:
npm ERR! Linux 3.19.0-30-generic
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "start"
npm ERR! node v4.3.0
npm ERR! npm v2.14.12
npm ERR! code ELIFECYCLE
npm ERR! app@1.2.0 start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the app@1.2.0 start script 'node ./bin/www'.
npm ERR! This is most likely a problem with the app package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node ./bin/www
npm ERR! You can get their info via:
npm ERR! npm owner ls app
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /app/app/npm-debug.log
module.js:435
return process.dlopen(module, path._makeLong(filename));
^
Error: Error relocating /app/app/node_modules/serialport/build/Release/node-v46-linux-x64/serialport.node: __strcpy_chk: symbol not found
at Error (native)
at Object.Module._extensions..node (module.js:435:18)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/app/app/node_modules/serialport/serialport.js:14:25)
at Module._compile (module.js:410:26)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
正如我所说,以 debian 作为基础映像它工作正常。我认为这可能与 alpine linux 缺少 node-serialport 所依赖的东西有关。我在 https://github.com/voodootikigod/node-serialport/issues/682 上创建了一个问题,但我不确定这是节点串口问题还是 alpine linux 问题。我在 alpine/busybox 上了解到 node-pre-gyp 有问题。
https://github.com/voodootikigod/node-serialport/pull/710
Alpine 是一个(非常)小的发行版,但它使用 musl 标准库而不是 glibc(大多数其他 Linux 发行版使用),因此它需要编译。
# If you don't have node/npm already, add that first
sudo apk add --no-cache nodejs
# Add the necessary build and runtime dependencies
sudo apk add --no-cache make gcc g++ python linux-headers udev
# Then we can install serialport, forcing it to compile
npm install serialport --build-from-source=serialport
我测试过了。它解决了这个问题。
这对我有用,运行 Alpine Linux 在 Docker 容器中:
npm install serialport --unsafe-perm --build-from-source=serialport