StriderCD 全局后安装在对 $HOME/.config $HOME/.cache 的访问失败

StriderCD global post install fails on bower access to $HOME/.config $HOME/.cache

提问人:notbrain 提问时间:6/2/2015 最后编辑:notbrain 更新时间:12/28/2016 访问量:669

问:

我正在尝试找出在全球范围内安装 StriderCD 的最佳方法。我通过启用全局的 nvm 分支安装了 node 和 npm,并且所有路径都适用于其他构建,但它们都不需要像这样的安装后。

我已经尝试了这两种方法,并且只是在没有 sudo 的情况下以 root 身份安装,但是在安装后步骤中,我总是在 bower 的 .config 和 .cache 文件夹上遇到错误:sudo npm install -g striderEACCESS

> [email protected] postinstall /usr/local/lib/node_modules/strider
> bower install --allow-root && npm run build

/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/mkdirp/index.js:89
                    throw err0;
                          ^
Error: EACCES, permission denied '/home/ubuntu/.config'

以 root 身份安装时,root 没有自己的 $HOME 目录的权限,这很奇怪,除非 bower 使用错误的权限创建目录和文件。谁能解释一下:

> [email protected] postinstall /usr/local/lib/node_modules/strider
> bower install --allow-root && npm run build

/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/configstore/index.js:56
        throw err;
              ^
Error: EACCES, permission denied '/root/.config/configstore/bower-github.yml'
You don't have access to this file.

    at Error (native)
    at Object.fs.openSync (evalmachine.<anonymous>:500:18)
    at Object.fs.readFileSync (evalmachine.<anonymous>:352:15)
    at Object.create.all.get (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/configstore/index.js:34:29)
    at Object.Configstore (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/configstore/index.js:27:44)
    at readCachedConfig (/usr/local/lib/node_modules/strider/node_modules/bower/lib/config.js:22:23)
    at defaultConfig (/usr/local/lib/node_modules/strider/node_modules/bower/lib/config.js:11:24)
    at Object.<anonymous> (/usr/local/lib/node_modules/strider/node_modules/bower/lib/index.js:40:32)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)

使用 sudo 作为 ubuntu 用户并尝试我得到了同样的东西!叹息。chmod -R 777 $HOME/.config$HOME/.cache

> [email protected] postinstall /usr/local/lib/node_modules/strider
> bower install --allow-root && npm run build

bower                           EACCES EACCES, permission denied '/home/ubuntu/.cache/bower/registry/bower.herokuapp.com/lookup'

Stack trace:
Error: EACCES, permission denied '/home/ubuntu/.cache/bower/registry/bower.herokuapp.com/lookup'
    at Error (native)
    at Object.fs.mkdirSync (fs.js:747:18)
    at Function.sync (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/node_modules/mkdirp/index.js:55:12)
    at new Cache (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/lib/util/Cache.js:21:16)
    at RegistryClient.<anonymous> (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/lib/lookup.js:163:35)
    at Array.forEach (native)
    at RegistryClient.initCache (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/lib/lookup.js:150:34)
    at RegistryClient._initCache (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/Client.js:62:27)
    at new RegistryClient (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/Client.js:16:10)
    at new PackageRepository (/usr/local/lib/node_modules/strider/node_modules/bower/lib/core/PackageRepository.js:17:28)

Console trace:
Error
    at StandardRenderer.error (/usr/local/lib/node_modules/strider/node_modules/bower/lib/renderers/StandardRenderer.js:82:37)
    at Logger.<anonymous> (/usr/local/lib/node_modules/strider/node_modules/bower/bin/bower:110:22)
    at Logger.emit (events.js:107:17)
    at Logger.emit (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-logger/lib/Logger.js:29:39)
    at /usr/local/lib/node_modules/strider/node_modules/bower/lib/commands/index.js:45:20
    at _rejected (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:844:24)
    at /usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:870:30
    at Promise.when (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:1122:31)
    at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:788:41)
    at /usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:556:49
System info:
Bower version: 1.4.1
Node version: 0.12.4
OS: Linux 3.13.0-48-generic x64

为什么 bower 在我使用和安装 sudo 时坚持使用?有没有办法将其映射到不同的路径并使权限正确?当我安装时,为什么root无权访问文件或在其自己的和/或内部创建目录?非常令人困惑。$HOME/.config--globalsu root -l$HOME$HOME/.config

这是在全新更新的 14.04 LTS AWS 实例上。此错误的根本原因是什么,是我的设置导致了问题或 bower 或 Strider 的配置错误?

node.js npm bower 安装后

评论


答:

0赞 Seth Holladay 12/28/2016 #1

文件系统的权限看起来很奇怪,应该进行调查和修复。

也就是说,第一个堆栈跟踪的重要部分是 configstore,这是一种用于将数据缓存或持久化到磁盘的机制。毋庸置疑,它将尝试写入这些位置。这是一个起点。

权限问题在较新的 conf 模块的 FAQ 中被指出,尽管它似乎不适用于 Linux。

在 configstore 中,配置存储在所有系统的 ~/.config(主要是 Linux 约定)中,而 conf 将 config 存储在系统默认用户 config 目录中。事实证明,~/.config 目录在 macOS 和 Windows 上经常有不正确的权限,这给用户带来了很多悲伤。

切换可以解决问题吗?也许,也许不是。提出问题也无妨。这是一个非常微不足道的替代品。你当然可以破解你的内部,以验证这是否能为你修复它。confnode_modules

configstoreconf 都遵循 envirionment 变量。然而,它们在略微不同的时间读取它,前者在模块时读取,后者在实例化其类时读取。XDG_CONFIG_HOMErequire()

我们还应该挑战进程以特定用户身份运行的假设 (),因为 Node 程序可以处理 setuid(),这在命令行工具中相对常见。root

我会修改正在运行的各种文件,并加入一些...node_modules

console.log('User:', process.getuid());
console.log('Group:', process.getgid());
console.log('Effective user:', process.geteuid());
console.log('Effective group:', process.getegid());

这很有用,因为要么可能在不方便的时候降级权限。或者,也许脚本中的某些内容正在这样做。bowernpmnpm run build

如果您看到用户或组在程序的整个生命周期中发生变化,则这是一个很有可能出现错误的领域。仔细检查打印的用户或组是否具有对失败路径的完全访问权限。根据正在进行的确切活动,可能需要对父目录具有 execute() 权限,一直到文件系统的根目录。x