CentOS下打包RPM的详细步骤(RPMBUILD命令的一个使用范例)

日期

2018-07-05

综述

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

首先,我们需要了解一些预备知识,在旧版本的CentOS中,rpmbuild工具默认的工作路径是/usr/src/redhat,因为权限原因,一般用户身份不能制作rpm软件包,只能切换到root身份才能够制作。在新版本的CentOS中,可以在一般用户主目录下新建rpmbuild目录作为rpmbuild工具的工作目录。并且,在新版本中,发行商建议为了防止系统函数库或其他文件损坏,不要使用root身份去制作rpm软件包。

详细步骤

一、必要工具的安装

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

[root@hostname ~]# yum install make
[root@hostname ~]# yum install gcc
[root@hostname ~]# yum install rpmbuild

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

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

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

[userid@hostname ~]$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

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

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

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

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

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

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

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

[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  0.1
32 - Build the program

五、编译成为RPM和SRPM

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

[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

你可能感兴趣的:(CentOS下打包RPM的详细步骤(RPMBUILD命令的一个使用范例))