我创建了一个 rpm 包,将 Node.js 项目提取到特定文件夹中,然后创建了一个安装后脚本,将 cd 插入该文件夹并执行“npm install --product”
#!/bin/bash
cd /opt/project
npm install --production
问题是,在 rpm 解压项目后,我收到以下错误:
/var/tmp/rpm-tmp.MbfpY5: line 3: npm: command not found
warning: %post(pack-0.0.0-1.noarch) scriptlet failed, exit status 127
当然,npm 已安装,如果我手动执行相同的脚本,它就可以工作。我读到退出状态 127 也与 selinux 策略中的错误有关,但我尝试完全禁用 selinux 并收到相同的错误。
我也有与 .deb 完全相同的代码,并且它在那里工作完美,但我无法使其在 CentOS 中工作。
知道问题可能出在哪里吗?
谢谢
答案1
首先你应该尝试关注错误
未找到 npm
你说当你执行脚本时,它会起作用 - 我想是这个:
#!/bin/bash
cd /opt/project
npm install --production
- 你是以普通用户还是 root 身份运行它?
- 当你安装 rpm 时,我猜它是以 root 身份安装的。
- 您是否尝试过将 npm 的绝对路径放入脚本中(其中 npm)
如果最后一种有效,则问题是 npm 不在 root 的 PATH 变量中。您应该尝试检查它(以 root 身份):
#echo $PATH
编辑:
因此 $PATH 变量设置为正确的路径,并且当您使用 npm 的绝对路径时它可以工作。这意味着 shell 不会读取 PATH 变量来查找可执行文件(在我找到的所有 scriptlet 示例中,它们始终使用完整路径。尝试查看是否可以使用命令扩展:
#!/bin/bash
cd /opt/project
$(which npm) install --production