【问题标题】:RHEL RPM spec post installation %post not sourcing shell scriptRHEL RPM 规范安装后 %post 未获取 shell 脚本
【发布时间】:2019-01-10 13:58:12
【问题描述】:

在 RHEL7.4 框中成功安装 rpm 后,我正在尝试在 root 环境中 source 一个 shell 脚本(因为我正在以 root 身份进行安装)

rpm 规范 %post 部分如下:

%post
source /etc/profile.d/env.sh

脚本 env.sh 在上述路径中安装后可用,它用于设置 PYTHONPATH 环境变量,如下所示:

pypath="/opt/lib"
if [ "$(echo $PYTHONPATH | grep $pypath)" == "" ]; then
        export PYTHONPATH="$PYTHONPATH:$pypath"
fi

但是,即使我将“source”命令更改为“.”脚本,在成功安装 rpm 后也不会发生这种情况

当我手动获取脚本 env.sh 时,会设置变量

【问题讨论】:

  • 什么都没发生吗?还是您遇到错误?你完整的%post 部分是什么样的? /etc/profile.d/env.sh 长什么样子?
  • %post 看起来和我在这里给出的一样
  • 您如何确定PYTHONPATH 设置不正确?如果%post 看起来与您在此处发布的内容相同,那么您实际上并没有在您的%post 脚本中使用Python,因此在该环境中设置PYTHONPATH 不会完成任何事情。

标签: shell rhel rpm-spec


【解决方案1】:

可能该命令运行正确,但您希望 PYTHONPATH 为每个人更改;事实并非如此:PYTHONPATH 仅针对 %post 部分的 shell 会话进行更改。

每次您启动一个新的 shell(或 bash)会话时,您的环境变量都会被重置。您可以查看相关问题以获取有关如何永久更改环境变量的信息;然后你可以选择你的 rpm 包使用哪种策略,例如:

https://unix.stackexchange.com/questions/117467/how-to-permanently-set-environmental-variables

【讨论】:

  • 这就是问题所在。您的 RPM 应该在 /etc/profile.d 中删除一个文件,然后用户需要重新登录才能获得它。 不要让你的%post编辑/etc/bash_profile或类似的东西;如果您发现建议告诉您这样做,那是古老的错误的
  • 所以每个 %section 的 spec 文件都在自己的 shell 会话中运行
  • 是的,但即使它们在您当前的会话中运行也无济于事,因为打开新会话仍会重置您的环境变量。
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 2016-10-03
  • 2020-03-28
  • 1970-01-01
  • 2015-06-27
  • 2023-03-11
相关资源
最近更新 更多