Linux软件安装(10)之SRPM的使用:rpmbuild

Linux软件安装(10)之SRPM的使用:rpmbuild

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

谈完了 RPM 类型的软件之后,再来我们谈一谈包含了 Source code 的 SRPM 该如何使用呢?假如今天我们由网络上面下载了一个 SRPM 的文件,该如何安装它?还有,如果我想要修改这个 SRPM 里面源代码的相关设定值,又该如何订正与重新编译呢?此外,最需要注意的是,新版的 rpm 已经将 RPM 与 SRPM 的指令分开了,SRPM 使用的是 rpmbuild 这个指令,而不是 rpm 哦!

利用默认值安装 SRPM 文件

假设我下载了一个 SRPM 的文件,又不想要修订这个文件内的原始码与相关的设定值,那么我可以直接编译并安装吗?当然可以!利用 rpmbuild 配合选项即可。选项主要有下面两个:

选项描述
--rebuild这个选项会将后面的 SRPM 进行编译与打包的动作,最后会产生 RPM 的文件,但是产生的 RPM 文件并没有安装到系统上。当你使用 --rebuild 的时候,最后通常会发现一行字体:Wrote:/root/rpmbuild/RPMS/x86_64/pkgname.x86_64.rpm 这个就是编译完成的 RPM 文件,这个文件就可以用来安装啦!
--recompile这个动作会直接的编译、打包并且安装哦!请注意,--rebuild 仅编译并打包而已,而 --recompile 不但进行编译跟打包,还同时进行安装了!

不过,要注意的是,这两个选项都没有修改过 SRPM 内的设定值,仅是通过再次编译来产生 RPM 可安装软件文件而已。一般来说, 如果编译的动作顺利的话,那么编译过程所产生的中间暂存文件都会被自动删除,如果发生任何错误,则该中间文件会被保留在系统上,等待用户的除错动作!

【例】请由 http://vault.centos.org/ 下载正确的 CentOS 版本中,在 updates 软件库当中的 ntp 软件的 SRPM,下载最
新的那个版本即可,然后进行编译安装的行为。
下载软件:

wget http://vault.centos.org/7.0.1406/updates/Source/SPackages/ntp-4.2.6p5-19.el7.centos.src.rpm

尝试直接编译:

rpmbuild --rebuild ntp-4.2.6p5-19.el7.centos.src.rpm 

上面的动作会告诉我还有一堆依赖的软件没有安装~所以我得要安装起来才行:

yum install libcap-devel openssl-devel libedit-devel pps-tools-devel autogen autogen-libopts-devel perl-HTML-Parser -y

再次执行上面的编译操作,最终的软件会被放置到 /root/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-19.el7.x86_64.rpm


上面的测试案例是将一个 SRPM 文件抓下来之后,依据你的系统重新进行编译。一般来说,因为该编译可能会依据你的系统硬件而优化,所以可能效能会好一些些,但是人类根本感受不到那种效能优化的效果~所以并不建议你这么做。此外,这种情况也很能发生在你从不同的 Linux distribution 所下载的 SRPM 拿来想要安装在你的系统上,这样做才算是有点意义。
一般来说,如果你有需要用到 SRPM 的文件,大部分的原因就是.你需要重新修改里面的某些设定,让软件加入某些特殊功能等等的。所以啰, 此时就得要将 SRPM 拆开,编辑一下编译配置文件,然后再予以重新编译啦!下个小节我们来玩玩修改设定的方式!

SRPM 使用的路径与需要的软件

SRPM 既然含有源代码,那么其中必定有配置文件啰,所以首先我们必需要知道,这个 SRPM 在进行编译的时候会使用到哪些目录呢?这样一来才能够来修改嘛!不过从 CentOS 6.x 开始(当然包含我们的 CentOS 7.x),因为每个用户应该都有能力自己安装自己的软件,因此 SRPM 安装、设定、编译、最终结果所使用的目录都与操作者的家目录有关~这里假设你用 root 的身份来进行 SRPM 的操作,那么你应该就会使用到下列的目录:

路径描述
/root/rpmbuild/SPECS这个目录当中放置的是该软件的配置文件,例如这个软件的信息参数、设定项目等等都放置在这里;
/root/rpmbuild/SOURCES这个目录当中放置的是该软件的原始文件(·*.tar.gz 的文件)以及 config 这个配置文件;
/root/rpmbuild/BUILD在编译的过程中,有些暂存的数据都会放置在这个目录当中;
/root/rpmbuild/RPMS经过编译之后,并且顺利的编译成功之后,将打包完成的文件放置在这个目录当中。里头有包含了 x86_64noarch ...等等的次目录。
/root/rpmbuild/SRPMS与 RPMS 内相似的,这里放置的就是 SRPM 封装的文件。

早期要使用 SRPM 时,必须是 root 的身份才能够使用编译行为,同时源代码都会被放置到 /usr/src/redhat/ 目录内哦!跟目前放置到 /~username/rpmbuild/ 的情况不太一样!

此外,在编译的过程当中,可能会发生不明的错误,或者是设定的错误,这个时候就会在 /tmp 底下产生一个相对应的错误档,你可以根据该错误档进行除错的工作呢!等到所有的问题都解决之后,也编译成功了,那么刚刚解压缩之后的文件,就是在 /root/rpmbild/{SPECS,SOURCES,BUILD} 等等的文件都会被杀掉,而只剩下放置在 /root/rpmbuild/RPMS 底下的文件了。

由于 SRPM 需要重新编译,而编译的过程当中,我们至少需要有 make 与其相关的程序,及 gcc、c、c++ 等其它的编译用的程序语言来进行编译。所以,如果你在安装的过程当中没有选取软件开发工具之类的软件,这时就得要使用上一小节介绍的 yum 来安装就是了!当然, 那个 Development Tools 的软件群组请不要忘记安装了!

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/linux-software-install10.html

Buy me a cup of coffee ☕.