错误: EACCES:权限被拒绝,打开“/root/.config/truffle/config.json”文件。

8
无法通过尝试安装Truffle来解决EACCESS问题。
是的,我最初通过sudo而不是nvm安装了npm,但根据网页上的说明已经更正了——除非谁知道。
这个路径实际上并不存在,所以我按照一个git问题创建了它:
/root/.config/truffle/

[root@home config]# ls -la |grep truffle
drwxrwxr-x. 2 root root   6 Jul 14 17:08 truffle

[user@home ~]$ nvm --version
0.34.0

$ npm -v
6.9.0

已分配完整权限给node_modules

ll|grep node
drwxrwxrwx. 31 user user 4096 Jul 14 16:58 node_modules

我尝试了这个链接中的建议:在安装npm模块时出现权限被拒绝的错误
在Ethereum SE,使用Ubuntu的用户遇到了此问题
查看以下链接并针对package-lock文件赋予完整权限以解决可能存在的问题:npm notice created a lockfile as package-lock.json. You should commit this file
尝试清除npm缓存。
这位Github用户似乎通过使用sudo解决了问题:truffle compile error (EACCES: permission denied) on V5 w/ Linux #1212
也尝试以root身份安装。
$ sudo npm install -g truffle
/usr/local/lib/nodejs/node-v10.16.0-linux-x64/bin/truffle ->/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/cli.bundled.js

> truffle@5.0.27 postinstall /usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle
> node ./scripts/postinstall.js

Error: EACCES: permission denied, open '/root/.config/truffle/config.json'
You don't have access to this file.

at Object.openSync (fs.js:443:3)
at Object.readFileSync (fs.js:343:35)
at Configstore.get all [as all] (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/~/configstore/index.js:31:1)
at new Configstore (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/~/configstore/index.js:25:31)
at Function.Config.getUserConfig (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-config/index.js:395:1)
at Object.<anonymous> (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-core/lib/mnemonics/mnemonic.js:11:1)
at __webpack_require__ (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:19:1)
at Object.command.command (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-core/lib/commands/develop.js:2:22)
at __webpack_require__ (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:19:1)
at Object.module.exports.$schema (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-core/lib/commands/index.js:9:12)
at __webpack_require__ (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:19:1)
at Object.<anonymous> (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-core/cli.js:33:29)
at __webpack_require__ (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:19:1)
at /usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:65:1
at Object.<anonymous> (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/cli.bundled.js:71:10)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)
Error: Error while attempting to download and cache solc 0.5.8: Command failed: node ./build/cli.bundled.js obtain --solc=0.5.8
Error: EACCES: permission denied, open '/root/.config/truffle/config.json'
You don't have access to this file.

at Object.openSync (fs.js:443:3)
at Object.readFileSync (fs.js:343:35)
at Configstore.get all [as all] (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/~/configstore/index.js:31:1)
at new Configstore (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/~/configstore/index.js:25:31)
at Function.Config.getUserConfig (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-config/index.js:395:1)
at Object.<anonymous> (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-core/lib/mnemonics/mnemonic.js:11:1)
at __webpack_require__ (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:19:1)
at Object.command.command (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-core/lib/commands/develop.js:2:22)
at __webpack_require__ (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:19:1)
at Object.module.exports.$schema (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-core/lib/commands/index.js:9:12)
at __webpack_require__ (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:19:1)
at Object.<anonymous> (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/packages/truffle-core/cli.js:33:29)
at __webpack_require__ (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:19:1)
at /usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/webpack:/webpack/bootstrap fa1fcd3fc6c4fef3eaf9:65:1
at Object.<anonymous> (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/build/cli.bundled.js:71:10)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)

at postinstallObtain (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/scripts/postinstall.js:13:11)
at Object.<anonymous> (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/truffle/scripts/postinstall.js:20:3)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
+ truffle@5.0.27
updated 1 package in 5.873s

基于Cypress问题的不同尝试。

$ sudo npm install --unsafe-perm=true --allow-root truffle
path.js:1077
    path = process.cwd();
                   ^

Error: ENOENT: no such file or directory, uv_cwd
at Object.resolve (path.js:1077:24)
at Function.Module._resolveLookupPaths (internal/modules/cjs/loader.js:534:17)
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:629:20)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
at /usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/npm/bin/npm-cli.js:19:21
at Object.<anonymous> (/usr/local/lib/nodejs/node-v10.16.0-linux-x64/lib/node_modules/npm/bin/npm-cli.js:152:3)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)

1
我把nodejs、npm、nvm和git搞混了,把它们弄成了一团糟... - DRP
5个回答

5
我不仅在truffle模块上遇到了这个问题,还在其他模块上遇到了类似的问题。 对我来说,至少此帖中列出的其他解决方案可行,但它们会有一个副作用,即我只能以超级用户身份运行truffle。我知道这可能有点鲁莽,但我的解决方法是将.config目录中所有文件的所有权更改为我的用户。为了实现这一点,我做了以下操作:
sudo chown myUsername:myUsername -R ~/.config
如果你想更加谨慎,你可以选择运行以下命令:
sudo chown myUsername:myUsername ~/.config
sudo chown myUsername:myUsername ~/.config/truffle sudo chown myUsername:myUsername ~/.config/truffle/config.json
完成这些操作之后,我就可以运行sudo npm i -g truffle了。这是我先前所有问题的快速解决方案,希望它也适用于你!

1
哎呀,你救了我的早晨!谢谢! - Carnaru Valentin

4

当在Alpine上安装truffle时,构建容器时也会出现这种情况。我能够通过以下方式解决此问题:

npm i -g --unsafe-perm=true --allow-root truffle

Dockerfile

FROM node:10.17.0-alpine

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN apk add -t .gyp --no-cache git python g++ make \
    && npm i -g --unsafe-perm=true --allow-root truffle \
    && apk del .gyp

ENTRYPOINT ["truffle"]

在我最初的尝试中,通过 npm i -g truffle 进行全局安装也导致了相同的 EACCES 错误。

希望对你有帮助。


解释你的答案。 - mentallurg

1

通过使用nvm升级了节点到版本v12.6.0,今天早上关闭并重新打开后成功安装了truffle:

[user@home ~]$ npm install truffle

> truffle@5.0.27 postinstall /home/user/node_modules/truffle
> node ./scripts/postinstall.js

- Fetching solc version list from solc-bin. Attempt #1
- Downloading compiler. Attempt #1
npm WARN saveError ENOENT: no such file or directory, open '/home/user/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/home/delta/package.json'
npm WARN delta No description
npm WARN delta No repository field.
npm WARN delta No README data
npm WARN delta No license field.

+ truffle@5.0.27
added 27 packages from 439 contributors and audited 34 packages in 125.024s
found 0 vulnerabilities

全局尝试了一遍,没有警告信息:

[user@home node_modules]$ npm install -g truffle
/home/user/.nvm/versions/node/v12.6.0/bin/truffle -> /home/user/.nvm/versions/node/v12.6.0/lib/node_modules/truffle/build/cli.bundled.js

> truffle@5.0.27 postinstall /home/user/.nvm/versions/node/v12.6.0/lib/node_modules/truffle
> node ./scripts/postinstall.js

- Fetching solc version list from solc-bin. Attempt #1
+ truffle@5.0.27
added 27 packages from 439 contributors in 5.28s

当我使用npm install truffle时,在Mac上仍然会遇到相同的错误Error: EACCES: permission denied, open '/Users/macbookpro/.config/truffle/config.json' - Ender

0
这对我很有帮助:

sudo npm install --unsafe-perm -g truffle


0

我的解决方案

@ramene的答案稍作修改:

sudo su -c "sudo npm i -g --unsafe-perm=true --allow-root truffle"

对我来说有效,输出如下:

npm WARN deprecated mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the AP
I surface has changed to use Promises in 1.x.)
/usr/bin/truffle -> /usr/lib/node_modules/truffle/build/cli.bundled.js
> truffle@5.1.22 postinstall /usr/lib/node_modules/truffle
> node ./scripts/postinstall.js
- Fetching solc version list from solc-bin. Attempt #1
✔ Downloading compiler. Attempt #1.
+ truffle@5.1.22
updated 1 package in 21.127s

硬件笔记

我正在使用带有berryboot的Raspberry Pi 4上的raspbian buster

uname -a的输出:

Linux raspberrypi 4.19.75v64 #1 SMP PREEMPT Sat Oct 5 03:06:01 CEST 2019 aarch64 GNU/Linux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接