使用 sudo 安装全局包会在安装后例程中产生权限错误
Installing global package with sudo yields permissions error during postinstall routine
我正在尝试 运行 CircleCI 上的这个命令:
sudo npm install -g --loglevel=warn @oresoftware/r2g
我收到这个错误:
#!/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
这个问题不是 CircleCI 特有的 - 这种情况发生在 Docker 或任何设置错误权限的地方。
我的问题是 - 如果我是 root 用户 - 我的 $HOME
是 /root,当我 运行:
时为什么会出现权限错误
mkdir -p /root/.r2g/temp/project
如您所见,它在第一个目录失败了 - 我无法创建 /root
。即使它已经存在,几乎可以肯定,我应该是 root 用户,其中 /root 是我的 $HOME
目录。
有谁知道 Linux 系统上是否有此问题的修复程序?有什么命令可以让我 运行 以 root 身份获得对我自己的主目录的权限吗?
我正在尝试找到一个通用且不强制的解决方案。
我在 npm install
命令之前尝试 运行 宁此:
sudo chown -R $(whoami) $HOME
那没有做任何事情,同样的错误。
一个简单的两行 Docker 文件会产生同样的问题:
FROM node:10
RUN npm install -g @oresoftware/r2g
并且对于这个 3 行 Docker 文件也同样的错误失败:
FROM node:10
RUN apt-get update && apt-get install -y sudo
RUN sudo npm install -g @oresoftware/r2g
我已经 cross-posted this question 到 CircleCI 帮助论坛了。
似乎 npm install 对任何人都做了 setuid
和 setgid
。所以基本上在它运行 postinstall 脚本之前,它将用户更改为 nobody - 一个当然没有权限写入 /root 的用户。
要防止这种情况,您可以设置 --unsafe-perm
flag to true:
npm install --unsafe-perm=true -g @oresoftware/r2g
之后它与 docker-示例一起工作。
我正在尝试 运行 CircleCI 上的这个命令:
sudo npm install -g --loglevel=warn @oresoftware/r2g
我收到这个错误:
#!/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
这个问题不是 CircleCI 特有的 - 这种情况发生在 Docker 或任何设置错误权限的地方。
我的问题是 - 如果我是 root 用户 - 我的 $HOME
是 /root,当我 运行:
mkdir -p /root/.r2g/temp/project
如您所见,它在第一个目录失败了 - 我无法创建 /root
。即使它已经存在,几乎可以肯定,我应该是 root 用户,其中 /root 是我的 $HOME
目录。
有谁知道 Linux 系统上是否有此问题的修复程序?有什么命令可以让我 运行 以 root 身份获得对我自己的主目录的权限吗?
我正在尝试找到一个通用且不强制的解决方案。
我在 npm install
命令之前尝试 运行 宁此:
sudo chown -R $(whoami) $HOME
那没有做任何事情,同样的错误。
一个简单的两行 Docker 文件会产生同样的问题:
FROM node:10
RUN npm install -g @oresoftware/r2g
并且对于这个 3 行 Docker 文件也同样的错误失败:
FROM node:10
RUN apt-get update && apt-get install -y sudo
RUN sudo npm install -g @oresoftware/r2g
我已经 cross-posted this question 到 CircleCI 帮助论坛了。
似乎 npm install 对任何人都做了 setuid
和 setgid
。所以基本上在它运行 postinstall 脚本之前,它将用户更改为 nobody - 一个当然没有权限写入 /root 的用户。
要防止这种情况,您可以设置 --unsafe-perm
flag to true:
npm install --unsafe-perm=true -g @oresoftware/r2g
之后它与 docker-示例一起工作。