root权限NPM全局安装(-g)仍会权限不够,认识下参数 --unsafe-perm
环境说明
ganiks@ganiks-ubuntu-trusty-64:/ganiks/parse-server$ npm -v 6.5.0 ganiks@ganiks-ubuntu-trusty-64:/ganiks/parse-server$ node -v v10.15.0
问题描述
安装部署 ParseServer服务
root@ganiks-ubuntu-trusty-64:/ganiks/parse-server# npm install -g parse-server mongodb-runner
遇到了第一个异常
> bcrypt@3.0.3 install /usr/local/lib/node_modules/bcrypt > node-pre-gyp install --fallback-to-build node-pre-gyp WARN Using needle for node-pre-gyp https download node-pre-gyp WARN Pre-built binaries not installable for bcrypt@3.0.3 and node@10.15.0 (node-v64 ABI, glibc) (falling back to source compile with node-gyp) node-pre-gyp WARN Hit error EACCES: permission denied, mkdir '/usr/local/lib/node_modules/bcrypt/lib' gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/10.15.0" gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/lib/node_modules/bcrypt/.node-gyp" gyp WARN install got an error, rolling back install
完整的Error信息:
> bcrypt@3.0.3 install /usr/local/lib/node_modules/bcrypt > node-pre-gyp install --fallback-to-build node-pre-gyp WARN Using needle for node-pre-gyp https download node-pre-gyp WARN Pre-built binaries not installable for bcrypt@3.0.3 and node@10.15.0 (node-v64 ABI, glibc) (falling back to source compile with node-gyp) node-pre-gyp WARN Hit error EACCES: permission denied, mkdir '/usr/local/lib/node_modules/bcrypt/lib' gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/10.15.0" gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/lib/node_modules/bcrypt/.node-gyp" gyp WARN install got an error, rolling back install gyp WARN install got an error, rolling back install gyp ERR! configure error gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/bcrypt/.node-gyp' gyp ERR! System Linux 3.13.0-164-generic gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--module=/usr/local/lib/node_modules/bcrypt/lib/binding/bcrypt_lib.node" "--module_name=bcrypt_lib" "--module_path=/usr/local/lib/node_modules/bcrypt/lib/binding" "--napi_version=3" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v64" gyp ERR! cwd /usr/local/lib/node_modules/bcrypt gyp ERR! node -v v10.15.0 gyp ERR! node-gyp -v v3.8.0 gyp ERR! not ok node-pre-gyp ERR! build error node-pre-gyp ERR! stack Error: Failed to execute '/usr/local/bin/node /usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/usr/local/lib/node_modules/bcrypt/lib/binding/bcrypt_lib.node --module_name=bcrypt_lib --module_path=/usr/local/lib/node_modules/bcrypt/lib/binding --napi_version=3 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v64' (1) node-pre-gyp ERR! stack at ChildProcess.<anonymous> (/usr/local/lib/node_modules/bcrypt/node_modules/node-pre-gyp/lib/util/compile.js:83:29) node-pre-gyp ERR! stack at ChildProcess.emit (events.js:182:13) node-pre-gyp ERR! stack at maybeClose (internal/child_process.js:962:16) node-pre-gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:251:5) node-pre-gyp ERR! System Linux 3.13.0-164-generic node-pre-gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/bcrypt/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build" node-pre-gyp ERR! cwd /usr/local/lib/node_modules/bcrypt node-pre-gyp ERR! node -v v10.15.0 node-pre-gyp ERR! node-pre-gyp -v v0.12.0 node-pre-gyp ERR! not ok Failed to execute '/usr/local/bin/node /usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/usr/local/lib/node_modules/bcrypt/lib/binding/bcrypt_lib.node --module_name=bcrypt_lib --module_path=/usr/local/lib/node_modules/bcrypt/lib/binding --napi_version=3 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v64' (1) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! bcrypt@3.0.3 install: `node-pre-gyp install --fallback-to-build` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the bcrypt@3.0.3 install script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2019-01-17T08_54_06_070Z-debug.log
解决方案
npm install 添加参数 --unsafe-perm
root@ganiks-ubuntu-trusty-64:/ganiks/parse-server# sudo npm install -g parse-server mongodb-runner --unsafe-perm
参考资料
https://github.com/nodejs/node-gyp/issues/454
https://github.com/nfarina/homebridge/issues/405#issuecomment-164803485
If npm detects it is running as root it drops to a non-privileged user which then doesn't have permissions to write to
/root/.node-gyp
.The --unsafe-perm option stops it from changing user.
nvm doesn't have this problem when not using sudo because it stores everything under the current users' home directory.
https://docs.npmjs.com/misc/config#unsafe-perm--unsafe-perm
看官方文档的解释
unsafe-perm
Default: false if running as root, true otherwise
Type: Boolean
Set to true to suppress the UID/GID switching when running package scripts.If set explicitly to false, then installing as a non-root user will fail.
补充
parse-server没必要全局的安装(-g),安装到本地目录,就不会遇到本文的问题。
更新于2019.01.19 14:15
vagrant@ganiks-ubuntu-trusty-64:~/parse-server-advanced$ npm install parse-server npm WARN deprecated uws@10.148.1: stop using this version > bcrypt@3.0.3 install /home/vagrant/parse-server-advanced/node_modules/bcrypt > node-pre-gyp install --fallback-to-build node-pre-gyp WARN Using request for node-pre-gyp https download [bcrypt] Success: "/home/vagrant/parse-server-advanced/node_modules/bcrypt/lib/binding/bcrypt_lib.node" is installed via remote > parse-server@3.1.3 postinstall /home/vagrant/parse-server-advanced/node_modules/parse-server > node -p 'require("./postinstall.js")()' 1111111111 1111111111111111 1111111111111111111111 11111111111111111111111111 111111111111111 11111111 1111111111111 111111 1111111111111 111111111 111111 111111111111 11111111111 111111 1111111111111 11111111111 111111 1111111111111 1111111111 111111 1111111111111111111111111 1111111 11111111 11111111 111111 1111111111111111111 11111 11111 111111111111111111 11111 11111111111111111 111111 111111111111111111 11111111111111111111111111 1111111111111111111111 111111111111111111 11111111111 Thanks for installing parse 🙏 Please consider donating to our open collective to help us maintain this package. 👉 https://opencollective.com/parse-server added 356 packages from 381 contributors in 51.675s
出处:http://www.cnblogs.com/ganiks/
本作品由 Ganiks 创作, 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问,请给我留言。