【问题标题】:Does installing a src.rpm run %install?安装 src.rpm 是否运行 %install?
【发布时间】:2016-01-14 20:58:38
【问题描述】:

我在 myrpm-1.0.e17.centos.src.rpm 中的 source.tar 中有源代码。当我在我的机器上安装 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 时相同)。

【问题讨论】:

    标签: php linux rpm rpmbuild rpm-spec


    【解决方案1】:

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

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

    如果您提到what is the problem that you are trying to solve by doing this,我们可能会提供更多帮助...


    让我们在这里澄清一些事情。 SRPM 中的“S”指的是 SRPM 是构建可安装 RPM 包的,仅此而已。它确实意味着非编译包中的程序是从 SRPM 安装的,或者 RPM 仅包含二进制文件。例如:

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

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

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

    【讨论】:

    • 谢谢它确实回答了我的问题。简而言之,我希望源代码在服务器上。将代码放在正确的位置不是 RPM 的职责。
    • @Eddie:您似乎在混淆 RPM 源包和二进制包。要将文件放在您的服务器上,您需要rpmbuild您的 .src.rpm 以获取二进制 .rpm,然后您可以安装...
    • 我不想获得二进制文件(我正在为 php 应用程序构建它)。所以我将我的 PHP 代码打包并希望通过 RPM 安装它们。我仍然想从 tarball 中移动这些文件并将它们移动到我想要的位置。
    • @Eddie:SRPM 不能安装到系统 - 只能安装到供 rpmbuild 使用的 RPM 构建环境。时期。您需要构建二进制 RPM 来安装 - 如果它们是独立于体系结构的(例如 PHP 文件包),那么它们将是 .noarch RPM,但它们仍然不是 SRPM。
    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 2013-10-03
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2019-11-23
    • 2020-03-04
    相关资源
    最近更新 更多