我试图了解 .srpm 又名“源 rpm”Red Hat 软件包管理器软件包的使用。
据我目前所知,.srpm 与标准 .rpm 不同,它提供源代码并且在开发过程中常用。我很困惑为什么这很有用,因为如果我运行rpm2cpio ./myrpm-1.1-1.x86_64.rpm | cpio -idmv
,我仍然可以查看源代码。
据我了解,即使是标准 RPM 也会下载包含源代码的 .tar.gz/bz 文件,并最终构建它。您能否澄清一下源 RPM 有何不同以及我为什么要使用它?
答案1
我从未听说过 RPM 可以下载源代码。也许有一些这样做,但我想说它们很少见。 srpm 软件包包括源代码和构建 rpm 软件包的说明。 rpm 包已编译代码,您可以运行这些代码,并且它们不包含源代码。但也有例外。例如:Perl、python、PHP 等不会像 C 或 C++ 程序那样编译为二进制。这些 rpm 包包含源文件,因为它们是即时解释或编译的 (JIT)。所以没有编译的二进制文件,而是直接使用源代码。
当您想要构建 rpm 包时,您通常会下载 srpm 并安装它。然后进入安装spec 文件的rpmbuild/SPECS 目录。然后你运行:
rpmbuild -bb <package>.spec
这将构建转速。一种 srpm 规格生成多个 rpm 包是很常见的:
<package>.rpm
<package>-devel.rpm
...
构建的 rpm 包存储在 rpmbuild/RPMS 中。然后你可以安装rpm包,它安装你可以运行的实际程序。
从 rpm 包中解压文件与安装 rpm 包有很大不同。通过解压文件,您将获得包文件。您可以尝试从提取的包文件中运行程序,但它很可能无法运行。安装 rpm 包意味着 rpm 确保该程序所需的所有库也都已安装。如果在安装之前或之后需要执行任何其他操作,rpm 包中的脚本将确保它们将被执行。有些程序可能需要一个数据库,需要在安装时创建,另一个程序可能需要重新运行 ldconfig 来更新库缓存,另一个程序可能需要构建手册等。如果您只是从 rpm 中提取文件,这些脚本将不会被执行。