我正在构建一个 RPM 包,它打包各种文件,包括属性文件、配置文件、脚本、JAR 等。现在,在编写 %pre、%post、%preun 和 %postun 脚本时,我需要使用一些我在 script/ 文件夹中拥有的脚本(已打包在 RPM 中)。所以,我希望能够做这样的事情:
%pre
export scripts/important.sh
someFunctionFromImportant parameter
%post
. scripts/anotherScript.sh
someFuncFromAnotherScript parameters
现在,因为我希望能够在任何系统上复制粘贴此 RPM,然后安装它,并且%pre
必须%post
运行 scriptless。我已经阅读了很多教程,并且仍在寻找实现此目标的方法。注意:我的要求不允许我在安装 RPM 的系统上已经存在这些脚本。就像 RPM 文件本身一样,一切都应该干净地进行,安装以及安装前和安装后脚本。
答案1
按照我对你问题的理解,你想做的事情是不可能的。该%pre
scriptlet 在 RPM 中的任何内容在磁盘上可用之前运行,因此它无法引用包中的任何内容。另一方面, scriptlet%post
是在包有效负载就位后运行的,因此该部分没问题。有关安装/升级/删除 RPM 软件包的操作顺序的更多详细信息,您可以参见https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Scriptlet_Ordering。虽然此 URL 特定于 Fedora 项目,但其中的信息对于任何基于 RPM 的 Linux 发行版都应该有效。
答案2
如果您有需要在 中可用的先决条件%pre
,请创建另一个 rpm 并依赖它。要么就是这样,要么你做了一些可怕的事情,比如curl
在你需要的文件中。我认为my-project-tools
包含您的先决条件的 rpm 或类似内容是最好的。