我试图理解.srpm,也就是“源rpm”红帽包管理器包的使用。
据我所知,.srpm与标准.rpm不同,因为它提供了源代码,并且在开发过程中经常使用。我很困惑为什么这是有用的,因为如果我运行rpm2cpio ./myrpm-1.1-1.x86_64.rpm | cpio -idmv,我仍然可以查看源代码。
据我所知,即使是标准的RPM也会提取包含源代码的.tar.gz/bz文件,并最终构建此文件。请您澄清源RPM是如何不同的,为什么我要使用一个?
发布于 2020-05-21 06:27:07
我从未听说过RPM会删除源代码。也许有一些人这样做,但我想说,他们是罕见的。srpm包包括源代码和构建rpm包的说明。rpm包有编译过的代码,您可以运行这些代码,并且它们不包括源代码。也有例外。例如: Perl、python、PHP等不会像C或C++程序那样编译为二进制。对于这些rpm包,包括源文件,因为它们是及时解释或编译的(JIT)。因此没有编译的二进制文件,但是源代码是直接使用的。
当您想要构建rpm包时,通常会下载一个srpm并安装它。然后转到安装spec文件的rpmbuild/SPECS目录。然后你跑:
rpmbuild -bb <package>.spec这将建立rpm(s)。很常见的是,一个srpm规范会产生更多的rpm包:
<package>.rpm
<package>-devel.rpm
...构建的rpm包存储在rpmbuild/rpm中。然后,您可以安装rpm包,这些包可以安装您可以运行的实际程序。
从rpm包中解压缩文件与安装rpm包非常不同。通过解压缩文件,您可以得到包文件。您可以尝试从解压缩的包文件中运行程序,但很有可能它无法工作。安装rpm包意味着,rpm确保也安装了该程序所需的所有库。如果在安装之前或之后需要任何其他操作,rpm包中的脚本将确保它们被执行。一些程序可能需要一个数据库,需要在安装时创建,另一个程序可能需要重新运行ldconfig来更新库缓存,另一个程序可能需要构建手册等等。如果您只是从rpm提取文件,这些脚本将不会被执行。
https://unix.stackexchange.com/questions/588054
复制相似问题