我正在 ClearOS7(基于 Centos7)中为 Sia 制作 rpm,但遇到了困难。我正在尝试设置SIA_DATA_DIR=/var/lib/siad-data
安装 rpm 的会话。 sia 守护程序和 siac 应用程序(命令行应用程序)都需要它。对于守护进程来说,它很简单,我可以在 systemd 单元文件中设置它。
为了尝试全局设置它,我创建了一个文件 /etc/profile.d/siad.sh 并在其中放置了
[ -x /usr/bin/siad ] && export SIA_DATA_DIR=/var/lib/siad-data
在规范文件的 %post 部分中,我有source /etc/profile.d/siad.sh
.我可以看到 profile.d 文件适用于新 shell,但在当前 shell 中不起作用。猜测,这是因为 yum 打开了一个子进程,并且该变量没有返回到父进程。直接放入export SIA_DATA_DIR=/var/lib/siad-data
%post 脚本中也不起作用。
如何在 rpm 中设置用于安装 rpm 的会话的环境变量?
答案1
你做不到。进程无法修改正在运行的进程的环境。
当涉及到环境变量时,甚至不存在“当前会话”这样的东西。每个进程都有自己的环境变量。并且可以有多个“当前会话”。
无论如何,程序需要环境变量都是不好的做法。您应该仅在需要时定义环境变量其他软件,即使如此,这在系统级别上也不是必需的:软件应该被编译或配置为默认在系统目录中查找。
如果软件确实需要环境变量才能运行,请通过设置该变量的包装器脚本来运行它。例如,如果需要设置/usr/bin/siad
环境变量,则安装可执行文件并制作一个包含以下内容的脚本SIA_DATA_DIR
/usr/bin/siad.real
/usr/bin/siad
#!/bin/sh
if [ -z "${SIA_DATA_DIR+set}" ]; then
export SIA_DATA_DIR="/var/lib/siad-data"
fi
exec /usr/bin/siad.real "$@"