如何通过rpmbuild将源代码构建成完整的rpm软件包?

摘要:1 说明 因centos停止支持,需要将一些应用软件迁移到OpenEuler上。原本在centos上只需要直接安装官网提供的预编译rpm包即可,现在没有了现成的安装包,只能从源代码自行编译。如果只是少数机器,逐台编译尚可忍耐,对于大量机器需
1 说明 因centos停止支持,需要将一些应用软件迁移到OpenEuler上。原本在centos上只需要直接安装官网提供的预编译rpm包即可,现在没有了现成的安装包,只能从源代码自行编译。如果只是少数机器,逐台编译尚可忍耐,对于大量机器需要安装的情况,显然还是制作成rpm更为合适。 本文内容整理自官网文档:https://rpm-packaging-guide.github.io/,将其中的一个实例进行了解释,供学习之用。 2 准备源代码 2.1 C语言程序 创建目录cello-1.0,在其中创建一个输出Hello World的C语言程序文件cello.c: mkdir cello-1.0 cd cello-1.0 touch cello.c cello.c内容如下: #include <stdio.h> int main(void) { printf("Hello World\n"); return 0; } 用gcc将该程序编译链接,即可直接运行: yun install -y gcc gcc -g -o cello cello.c 此时目录下会出现一个cello的可执行文件,直接使用./cello 即可输出Hello World。 如果将该可执行文件放在PATH路径下,那么在任何目录都可以直接使用cello命令执行。 2.2 补丁文件 在cello-1.0目录下创建一个普通文件cello.conf,假设为配置文件,安装完成后准备放在/etc/cello/目录下,内容为“before” 。 echo "before" > cello.conf 这个文件内容计划在安装完成后被修改,因此需要用到补丁。创建内容为“after”的cello2.conf文件,并用diff命令生成补丁。生成后将cello2.conf文件删除,将补丁文件cello-patch.patch复制到上层目录下,后面另有用处,只保留原文件cello.conf。 echo "after" > cello2.conf diff -Naur cello.conf cello2.conf > cello-patch.patch rm -f cello2.conf mv cello-patch.patch .. 可以用patch < cello-patch.patch进行补丁功能的测试。 2.3 说明文件 在cello-1.0目录下再创建一个README.md,假设为说明文件,安装完成后准备放在/usr/share/doc/cello-1.0/目录下,文件内容随意。 2.4 Makefile文件 除了用gcc直接编译、链接,使用make工具可以更方便、更规范的完成这个流程。首先确保已经安装了make工具: yum install -y make 编写Makefile内容如下: cello: gcc -g -o cello cello.c install: mkdir -p $(DESTDIR)/usr/bin install -m 0755 cello $(DESTDIR)/usr/bin/cello clean: rm -f cello rm -f $(DESTDIR)/usr/bin/cello 运行make或者make cello命令,则会在当前目录下生成可执行文件cello。 运行make install命令,则会将cello文件复制到$(DESTDIR)/usr/bin/cello目录下,并赋予755的权限。这里的$(DESTDIR)是一个宏,可以人工指定(后面spec文件的%make_install部分会涉及),如果不指定则为根目录/。 运行make clean,则会将当前目录下的cello删除,同时将$(DESTDIR)/usr/bin/cello目录下的cello删除。 运行make distclean(本例中未涉及configure操作),除了同make clean外,还会将Makefile、config.log等文件一起删除,用于重新configure 2.5 总结 至此,源代码文件就准备好了。
阅读全文