Ale*_*lls 0 linux sudo root chown docker
我正在尝试在 CircleCI 上运行此命令:
sudo npm install -g --loglevel=warn @oresoftware/r2g
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
#!/bin/bash -eo pipefail
sudo npm install -g --loglevel=warn @oresoftware/r2g
/usr/local/bin/r2g -> /usr/local/lib/node_modules/@oresoftware/r2g/cli/r2g.sh
/usr/local/bin/r2g_run -> /usr/local/lib/node_modules/@oresoftware/r2g/cli/r2g_run.sh
/usr/local/bin/r2g_copy_smoke_tester -> /usr/local/lib/node_modules/@oresoftware/r2g/assets/copy_smoke_tester.sh
> @oresoftware/r2g@0.0.132 postinstall /usr/local/lib/node_modules/@oresoftware/r2g
> ./assets/postinstall.sh
mkdir: cannot create directory ‘/root’: Permission denied
could not create directory => '/root/.r2g/temp/project'...
mkdir: cannot create directory ‘/root’: Permission denied
could not create oresoftware/bash dir.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @oresoftware/r2g@0.0.132 postinstall: `./assets/postinstall.sh`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @oresoftware/r2g@0.0.132 postinstall 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/2018-06-17T04_41_24_461Z-debug.log
Exited with code 1
Run Code Online (Sandbox Code Playgroud)
这个问题不是 CircleCI 特有的 - 这发生在 Docker 或任何设置错误权限的地方。
我的问题是 - 如果我是 root 用户 - 我在哪里$HOME/root,为什么我会在运行时收到权限错误:
mkdir -p /root/.r2g/temp/project
Run Code Online (Sandbox Code Playgroud)
如您所见,它在第一个目录失败 - 我无法创建/root. 即使它已经存在,几乎可以肯定,我应该是 root 用户,其中 /root 是我的$HOME目录。
有谁知道在 Linux 系统上是否有解决方案?是否可以运行一些命令来以 root 身份获取对我自己的主目录的权限?
我试图找到一个通用而不是有力的解决方案。
我尝试在npm install命令之前运行它:
sudo chown -R $(whoami) $HOME
Run Code Online (Sandbox Code Playgroud)
那没有做任何事情,同样的错误。
一个简单的 2 行 Dockerfile 将产生同样的问题:
FROM node:10
RUN npm install -g @oresoftware/r2g
Run Code Online (Sandbox Code Playgroud)
对于这个 3 行 Dockerfile,它也失败并出现相同的错误:
FROM node:10
RUN apt-get update && apt-get install -y sudo
RUN sudo npm install -g @oresoftware/r2g
Run Code Online (Sandbox Code Playgroud)
我已将此问题交叉发布到 CircleCI 帮助论坛。
似乎 npm install对任何人都做了一个setuid和setgid。所以基本上在它运行 postinstall 脚本之前,它会将用户更改为 nobody - 当然没有权限写入 /root 的用户。
为了防止这种情况,您可以将--unsafe-perm标志设置为 true:
npm install --unsafe-perm=true -g @oresoftware/r2g
Run Code Online (Sandbox Code Playgroud)
之后,它与 docker-example 一起工作。
| 归档时间: |
|
| 查看次数: |
1127 次 |
| 最近记录: |