安装src.rpm运行%install


Does installing a src.rpm run %install?

我在源代码中有源代码.tar那是在myrpm-1.0.e17.centos.src.rpm中。当我在我的机器上安装 rpm 时。

rpm -ivh myrpm-1.0.e17.centos.src.rpm

我在我想要的根目录中获取了 SOURCE 和 SPECS 文件。 我现在希望 RPM 进入该 SOURCE 文件夹,解压缩 tar 文件(source.tar)并将其移动到我机器上的其他位置。我试过把它放到%install%post.似乎它们没有运行,我什至无法在安装部分进行目录。

%install 
echo "INSTALLING"
mkdir temp/myfile
tar -xvf source.tar

安装时,没有消息,没有创建临时文件,并且没有解压缩 tar。 (放入%post时相同)。

不,源 RPM 内容的处理是硬编码的。 %pre%post%install等仅在实际构建二进制包时使用。

一般来说,无论如何你都不应该做这样的事情。如果您需要解压缩源文件或应用补丁,只需在%pre部分中执行此操作,该部分在实际构建开始之前作为二进制包构建过程的一部分执行。这确保了构建至少在某种程度上是可重复的。

如果您提到您试图通过这样做解决的问题是什么,我们可能会提供更多帮助......


让我们在这里澄清一些事情。SRPM中的"S"是指SRPM是构建可安装RPM包的来源,仅此而已。这并不意味着非编译包中的程序是从 SRPM 安装的,也不意味着 RPM 只包含二进制文件。例如:

  • 当应用程序的源代码不可用时,有时发行版会在其 SRPMS 中包含二进制可执行文件,或者将它们下载到其%build部分中。

  • Python,Bash和PHP脚本通常按原样包含在生成的RPM中。在这些情况下,%build完全为空并不罕见,%install只是将文件复制到 $RPM_BUILD_ROOT 下的正确位置。如果生成的包没有依赖于平台的文件,那么它通常构建为.noarch RPM,但它仍然被视为二进制 RPM,它不是 SRPM。

拜托,

非常拜托,不要滥用 SRPM 来做它们不适合的事情。