如何通过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 总结
至此,源代码文件就准备好了。
