Linux操作系统使用RPMBUILD命令打包RPM的详细步骤

最近在学习《鸟哥的LINUX私房菜》第23章中一个打包自己软件的范例。自己根据所学,自己总结了最新版本(CentOS Linux release 7.5.1804 (Core))的CentOS7制作rpm软件包的一般步骤。


首先,我们需要了解一些预备知识,在旧版本的CentOS中,rpmbuild工具默认的工作路径是/usr/src/redhat,因为权限原因,一般用户身份不能制作rpm软件包,只能切换到root身份才能够制作。在新版本的CentOS中,可以在一般用户主目录下新建rpmbuild目录作为rpmbuild工具的工作目录。并且,在新版本中,发行商建议为了防止系统函数库或其他文件损坏,不要使用root身份去制作rpm软件包。
————————————————
版权声明:本文为CSDN博主「快乐的goto语句」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010384744/article/details/80929319



详细步骤


一、必要工具的安装


其中包括make工具,若你的待安装包使用C语言写的,还需要安装gcc编译程序。最重要的是要安装rpmbuild工具。命令如下:


1
2
3
yum install make
yum install gcc
yum install rpmbuild



二、创建制作rpm的工作目录


为了创建制作rpm的工作目录,你需要在一般用户身份的主目录下新建如下结构的目录:


rpmbuild目录,还有该目录下六个目录,包括:BUILD、BUILDROOT、RPMS、SOURCES、SPECS、SRPMS,命令如下:


1
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}


各个目录的一般用途如下简介:


BUILD 编译rpm包的临时目录
BUILDROOT 编译后生成的软件临时安装目录
RPMS 最终生成的可安装rpm包的所在目录
SOURCES 所有源代码和补丁文件的存放目录
SPECS 存放SPEC文件的目录(重要)
SRPMS 软件最终的rpm源码格式存放路径



三、制作源代码文件tarball生成


这里主要利用《鸟哥的LINUX私房菜》中提供的源代码进行演示。将自己的源代码打包,其中可以包括可执行文件、脚本文件、用户使用手册、配置文件还有一些其他文件。然后将打包好的压缩包放在SOURCES目录下。


1
2
tar -zcv -f main-0.l.tar.gz main-0.1        #假设主目录下存在待打包的包括源代码的目录=>main-0.1
cp main-0.1.tar.gz ~/rpmbuild/SOURCES       #将打包好的源代码拷贝到SOURCES目录下



四、新建*.spec的设置文件


这个spec文件的设置是整个打包过程中最重要的一环,必须仔细设置。在SPECS目录下新建该目录,并且进入该文件进行设置,其中文件中各个宏名(例如%install)的具体含义请参考文献【4】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[userid@hostname ~]$ cd ~/rpmbuild/SPECS
[userid@hostname ~]$ vim main.spec
1 Name:           main
2 Version:        0.1
3 Release:        1%{?dist}
4 Summary:        Calculate sin and cos value
5
6 License:        GPL
7 URL:            http://linux.vbird.org
8 Source0:        main-0.1.tar.gz
9
10
11 %description
12 This package will let you input your name and calculate sin and cos value
13
14 %prep
15 %setup -q
16
17
18 %build                                      #执行编译命令,编译后会在BUILD目录下存在暂时文件
19 make
20
21 %install                    
22 rm -rf %{buildroot}
23 mkdir -p %{buildroot}/usr/local/bin         #将编译完成源代码试安装在~/rpmbuild/BUILDROOT目录下,其中的宏%{buildroot}=~/rpmbuild
24 make install RPM_INSTALL_ROOT=%{buildroot}
25
26 %files                                      #最终在安装生成的rpm软件包时的安装目录
27 /usr/local/bin/main
28
29
30 %changelog
31 * Wed Jul 4 2018 VBird Tsai <[email protected]> 0.1
32 - Build the program



五、编译成为RPM和SRPM


输入如下命令,在最后出现exit 0表示生成成功。


1
[userid@hostname ~]$ rpmbuild -ba main.spec



六、安装和测试


输入如下命令进行安装和测试。


[userid@hostname ~]$ rpm -ivh ~/rpmbuild/RPMS/x86_64/main-0.1-1.el7.x86_64.rpm #安装main
[userid@hostname ~]$ rpm -ql main #查找main的安装路径
[userid@hostname ~]$ rpm -qi main #查询main相关信息


七、注意事项


在/usr/local/bin目录中不能有同名目录或者文件存在



八、参考文献


【1】https://www.cnblogs.com/masterpanda/p/5700453.html


【2】https://access.redhat.com/sites/default/files/attachments/rpm_building_howto.pdf


【3】https://wiki.centos.org/HowTos/SetupRpmBuildEnvironment


【4】https://docs.fedoraproject.org/quick-docs/en-US/creating-rpm-packages.html#con_rpm_spec_file_overview