如何在RPM安装期间访问安装后脚本中指定的用户指定的--prefix值?

时间:2011-08-11 07:07:27

标签: rpm

我使用前缀值/ usr / local创建了一个带有安装后脚本的rpm包。当我使用--prefix = / tmp / mylocation安装rpm时,脚本执行无法在新位置下查找文件。

%交 mv / usr / local / PACKAGE / file / etc

在脚本中使用%{prefix}也不起作用(mv%{prefix} / PACKAGE / file / etc)。

2 个答案:

答案 0 :(得分:3)

万一其他人想知道,使用$ RPM_INSTALL_PREFIX有效。

答案 1 :(得分:3)

是的,您可以使用$ RPM_INSTALL_PREFIX访问scriptlet中的实际前缀,但如果正确创建RPM,通常没有理由使用它。

如果你真的知道你在做什么,那么使用scriptlet(%post /%postun code)就可以了。但请注意,在构建期间会扩展所有RPM宏。如下所示:

%post
echo %{_prefix}

将始终扩展为echo /usr。您实际上可以查看生成的RPM中的scriptlet,看看它们看起来如何展开。那说......

从简短的代码片段来看,您似乎正在进行错误的安装。复制/移动文件通常不在%post /%postun scriptlet中完成。那些在用户系统上运行(通常以root身份运行),并且很容易造成毁灭性的错误,彻底摧毁用户的系统。

这是一个有点有效的片段:

SourceX: <config_file>
...
%install
...
mkdir -p %{buildroot}%{_sysconfdir}
cp %{SOURCEX} %{buildroot}%{sysconfdir}
...


%files
%config(noreplace) %{_sysconfdir}/<config_file>
...

另一方面,安装到/ usr / local通常不赞成(除非您为自己的用途创建RPM)。