我使用前缀值/ usr / local创建了一个带有安装后脚本的rpm包。当我使用--prefix = / tmp / mylocation安装rpm时,脚本执行无法在新位置下查找文件。
%交 mv / usr / local / PACKAGE / file / etc
在脚本中使用%{prefix}也不起作用(mv%{prefix} / PACKAGE / file / etc)。
答案 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)。