使用源代码RPMs

在RHEl/CentOS维护工作中,需要对部署的软件源代码debug,或者自己编译定制软件包。本文是安装syslog-ng源代码,debug解决systemd环境syslog-ng启动问题的源代码安装记录。

虽然可以在稳定的CentOS中自己来下载和编译自己的软件包,但是会breaking标准配置。本文是通过有效安全地下载源代码,并且不需要使用root权限,这样就不会影响系统。

准备软件包

如果对于源代码有兴趣并且要做开发,可以安装开发包:

yum groupinstall "Development Tools"

上述开发工具集包含了必要的工具,包括yumdownloader。如果只是需要安装yumdownloader,则可以单独安装yum-utils

yum install yum-utils

注意:从Fedora 22开始,dnf替代了yum作为包管理工具(虽然依然可以使用yum命令,但是推荐转换成dnf),dnf包管理工具今后将逐步取代yum - 使用dnf管理软件包

使用dnf包管理器的时候不需要安装yum-utils,可以用dnf download来代替yumdownloader

CentOS 获取SRPM软件包(可选)

SRPM可以从以下上游获取:

http://ftp.redhat.com/pub/redhat/linux/enterprise/

对于早期的CentOS 5 或者 CentOS 4,可以从以下网站获取SRPM:

http://vault.centos.org/

参考Rebuild a Source RPM

CentOS/Fedora安装软件包的源代码包

  • 首先查看提供命令的软件包,例如syslog-ng命令的软件包

  • 设置yum repo文件的源

CentOS默认没有激活源代码包的仓库,不过配置文件在/etc/yum.repos.d/目录系都已存储,需要修改source.repo。例如,对于Fedora,修改fedora.repoenabled=0修改成enabled=1

  • 下载源代码rpm包 - 这里不需要使用root帐号,普通用户帐号就可以

对于使用dnf包管理工具的Fedora系统,可以使用

此时会在当前目录下下载好 syslog-ng-3.6.2-3.fc23.src.rpm 软件包

  • rpm2cpio检查软件包文件

可以看到输出rpm包中的内容

注意上述rpm包中显示有一系列的patch包文件需要在编译之前先给代码打上补丁,所以在实际编译之前,还需要一些技巧来完成所需工作。

创建RPM构建环境

要实现安装,准备和构建源代码RPM文件,首先创建一个本地目录用于保存输出结果:

然后配置rpm命令使之知晓对应目录

接下来就可以将syslog-ng源代码分离出来

安装源代码

和常规RPM文件不同(常规RPM包的文件是安装到系统的各个目录下),源底码RPM文件是安装到你配置的rpm安装目录的。当前创建的rpmbuild目录还是空的

显示输出:

现在开始安装源代码包

安装完成后再检查rpmbuild目录就可以看到对应文件都已经安装到这个目录下了

显示输出

rpmbuild

需要安装rpm-build软件包来获取rpmbuild命令(这里需要使用root权限) - 使用yumdnf安装

使用rpmbuild处理spec文件

rpmbuild/SPECS目录下有每个源代码编译对应的.spec,例如rpmbuild/SPECS/syslog-ng.spec

编译syslog-ng还需要如下软件包:GeoIP-devel bison eventlog-devel flex glib2-devel hiredis-devel ivykis-devel json-c-devel libcap-devel libdbi-dbd-sqlite libdbi-devel libesmtp-devel libmongo-client-devel libnet-devel libtool libuuid-devel openssl-devel pcre-devel riemann-c-client-devel systemd-devel tcp_wrappers-devel

参考

Last updated

Was this helpful?