将一个源码包软件转换成一个 RPM 软件包

   我们在使用Linux的使用会安装很多软件,有的软件是rpm包形式的,我们只需要输入命令就可以安装,而有的是一些源码包,如nginx,mysql等源码包,源码包的安装比较麻烦,如果我们希望通过rpm安装软件包,我们可以将源码包转换为rpm包方便我们的安装

利用rpmbuild打包,需要两类文件:

1、源码,源码以tar归档进行压缩的源码包,以及一些.patch文件,存放于目录./SOURCES下;

2、.spec文件,定义了打包的动作,以及依赖,是打包的最主要类容。

                                                 rpmbuild目录结构

目录名

macros宏名

说明

BUILD

%_builddir

编译rpm包的临时目录

BUILDROOT

%_buildrootdir

编译后生成的软件临时安装目录

RPMS

%_rpmdir

最终生成的可安装rpm包的所在目录

SOURCES

%_sourcedir

所有源代码和补丁文件的存放目录

SPECS

%_specdir

存放SPEC文件的目录(重要)

SRPMS

%_srcrpmdir

软件最终的rpm源码格式存放路径(暂时忽略掉,别挂在心上) ?

下面以安装nginx包为例

1.安装rpm-bulid软件和gcc依赖包

  1. [root@web1 ~]# yum -y install rpm-build
  2. [root@web1 ~]# yum -y install gcc pcre-devel openssl-devel

2.生成rpmbuild目录结构

 第一条命令会报错但是没有关系它会为我们创建一个目录,在当前的路径下

  1. [root@web1 ~]# rpmbuild -ba nginx.spec                //会报错,没有文件或目录
  2. [root@web1 ~]# ls /root/rpmbuild                    //自动生成的目录结构
  3. BUILD BUILDROOT RPMS SOURCES SPECS SRPMS

3.准备工作,将源码软件复制到SOURCES目录

  1. [root@web1 ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/

4.创建并修改SPEC配置文件

    有几点需要注意,第一是版本号,Version要与Nginx源码包版本一致,第二是Source0,要与源码包包名一致

 第三是参数名后面不能为空,哪怕你将它注释掉,也不能为空

  1. [root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec
  2. Name:nginx                                          #源码包软件名称
  3. Version:1.12.2                                      #源码包软件的版本号
  4. Release:    10                                         #制作的RPM包版本号
  5. Summary: Nginx is a web server software.            #RPM软件的概述    
  6. License:GPL                                         #软件的协议
  7. URL:    www.test.com                                    #网址
  8. Source0:nginx-1.12.2.tar.gz                        #源码包文件的全称
  9.  
  10. #BuildRequires:                                    #制作RPM时的依赖关系
  11. #Requires:                                        #安装RPM时的依赖关系
  12. %description
  13. nginx [engine x] is an HTTP and reverse proxy server.    #软件的详细描述
  14.  
  15. %post
  16. useradd nginx          #非必需操作:安装后脚本(创建账户)
  17.  
  18. %prep
  19. %setup -q                                #自动解压源码包,并cd进入目录
  20.  
  21. %build
  22. ./configure
  23. make %{?_smp_mflags}
  24.  
  25. %install
  26. make install DESTDIR=%{buildroot}
  27.  
  28. %files
  29. %doc
  30. /usr/local/nginx/*                    #对哪些文件与目录打包
  31.  
  32. %changelog

5.rpmbuild创建RPM软件包

 安装成功后查看一下

  1. [root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
  2. [root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm

6.通过rpm安装Nginx

  1. [root@web1 ~]# rpm -ivh /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
  2. [root@web1 ~]# rpm -qa | grep nginx
  3. [root@web1 ~]# /usr/local/nginx/sbin/nginx
  4. [root@web1 ~]# curl http://127.0.0.1/

7.补充

rpm-bulid主要有四个阶段:

%pre        //预处理阶段,解压缩软件包

%setup          //准备阶段

%setup 不加任何选项,仅将软件包打开。
%setup -n newdir 将软件包解压在newdir目录。
%setup -c 解压缩之前先产生目录。
%setup -b num 将第num个source文件解压缩。
%setup -T 不使用default的解压缩操作。
%setup -T -b 0 将第0个源代码文件解压缩。
%setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。
%patch 最简单的补丁方式,自动指定patch level。
%patch0 -p0 打第1个补丁,0表示利用当前相对路径名称
%pacth1 -p2 打第2个补丁,2表示忽略补丁文件第一层目录
%patch 0 使用第0个补丁文件,相当于%patch ?p 0。
%patch -s 不显示打补丁时的信息。
%patch -T 将所有打补丁时产生的输出文件删除。

%build          //编译阶段

./configure --prefix=$RPM_BUILD_ROOT/usr  make
or
%configure  make

%install 将软件安装到虚拟根目录

你可能感兴趣的:(Linux基础)