【发布时间】:2011-08-11 07:07:27
【问题描述】:
我使用前缀值 /usr/local 创建了一个带有安装后脚本的 rpm 包。当我使用 --prefix=/tmp/mylocation 安装 rpm 时,脚本执行无法在新位置下查找文件。
%发布 mv /usr/local/PACKAGE/文件 /etc
在脚本中使用 %{prefix} 也不起作用(mv %{prefix}/PACKAGE/file /etc)。
【问题讨论】:
标签: rpm
我使用前缀值 /usr/local 创建了一个带有安装后脚本的 rpm 包。当我使用 --prefix=/tmp/mylocation 安装 rpm 时,脚本执行无法在新位置下查找文件。
%发布 mv /usr/local/PACKAGE/文件 /etc
在脚本中使用 %{prefix} 也不起作用(mv %{prefix}/PACKAGE/file /etc)。
【问题讨论】:
标签: rpm
以防万一,其他人想知道,使用 $RPM_INSTALL_PREFIX 有效。
【讨论】:
是的,您可以使用 $RPM_INSTALL_PREFIX 访问 scriptlet 中的真实前缀,但如果您的 RPM 创建正确,通常没有理由使用它。
如果您真的知道自己在做什么,那么使用 scriptlet(%post/%postun 代码)就可以了。但是请注意,所有 RPM 宏都会在构建期间进行扩展。 Ergo 之类的:
%post
echo %{_prefix}
将始终扩展为 echo /usr。您实际上可以查看生成的 RPM 中的小脚本,以了解它们的扩展情况。那就是……
从简短的 sn-p 看来,您的安装不正确。复制/移动文件通常不会在 %post/%postun scriptlet 中完成。它们在用户系统上运行(通常以 root 身份运行),很容易犯下彻底破坏用户系统的毁灭性错误。
所以一个有点有效的sn-p:
SourceX: <config_file>
...
%install
...
mkdir -p %{buildroot}%{_sysconfdir}
cp %{SOURCEX} %{buildroot}%{sysconfdir}
...
%files
%config(noreplace) %{_sysconfdir}/<config_file>
...
另一方面,安装到 /usr/local 通常是不受欢迎的(除非您创建 RPM 供自己使用)。
【讨论】: