node-serialport在高山linux上失败

我正在使用node-serialport https://github.com/voodootikigod/node-serialport的小型nodejs(nodejs v4.3)项目上工作。 我把它包装在docker图像中。 首先,我成功地使用了debian作为基础镜像,但是它的总大小约为600MB。 然后我切换到高山linux https://hub.docker.com/_/alpine/,并达到100MB的图像大小。 但是,nodejs项目停止使用阿尔卑斯山作为基础图像。 这里是一些日志:

安装node-serialport日志:

> 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为基础的形象,它的工作。 我认为这可能与高山linux缺lessnode-serialport依赖的事实有关。 我在https://github.com/voodootikigod/node-serialport/issues/682上创build了一个问题,但我不确定这是否是node-serialport或者alpine linux的问题。 我读了关于节点pre-gyp在高山/ busybox越野车。

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 

我testing了它。 它解决了这个问题。

这对我来说,在Docker容器中运行Alpine Linux:

 npm install serialport --unsafe-perm --build-from-source=serialport 
Interesting Posts