【引用】rpm-build制作rpm安装包过程

一、RPM包的分类

RPM有五种基本的操作功能:安装、卸载、升级、查询和验证。

linux软件包分为两大类:

(1)二进制类包,包括rpm安装包(一般分为i386和x86等几种)

(2)源码类包,源码包和开发包应该归位此类(.src.rpm)。

有时候为了方便源码包的安装,和我们自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包,当有了源码包就可以直接编译得到二进制安装包和其他任意包。spec file是制作rpm包最核心的部分,rpm包的制作就是根据spec file来实现的。在制作自定义rpm包的时候最好不使用普通用户实现。

二、修改宏及自定义车间位置

在redhat下,rpm包的默认制作路径在/usr/src/redhat下,这其中包含了6个目录(要求全部大写)

Directory    Usage

BUILD       源代码解压以后放的位置,只需提供BUILD目录,具体里面放什么,不用我们管,所以真正的制作车间是BUILD目录

RPMS          制作完成后的rpm包存放目录,为特定平台指定子目录(i386,i686,ppc)

SOURCES      收集的源文件,源材料,补丁文件等存放位置   

SPECS        存放spec文件,作为制作rpm包的领岗文件,以 rpm名.spec

SRPMS        src格式的rpm包位置 ,既然是src格式的包,就没有平台的概念了         

BuiltRoot    假根,使用install临时安装到这个目录,把这个目录当作根来用的,所以在这个目录下的目录文件,才是真正的目录文件。当打包完成后,在清理阶段,这个目录将被删除


centos下没有该目录,我们必须自定义工作车间,(即使在redhat下有该目录,一般也是自定义到普通用户的家目录下)

rpmbuild --showrc 显示所有的宏,以下划线开头,

一个下划线:定义环境的使用情况,

二个下划线:通常定义的是命令,

为什么定义宏?不同的系统,命令的存放位置可能不同,所以通过宏的定义找到命令的真正存放位置

查看默认工作车间

[root@localhost /]# rpmbuild --showrc | grep _topdir

-14: _builddir%{_topdir}/BUILD

-14: _buildrootdir%{_topdir}/BUILDROOT

-14: _desktopdir%{_datadir}/applications

-14: _rpmdir%{_topdir}/RPMS

-14: _sourcedir%{_topdir}/SOURCES

-14: _specdir%{_topdir}/SPECS

-14: _srcrpmdir%{_topdir}/SRPMS

-14: _topdir%{getenv:HOME}/rpmbuild

三、rpm包制作原理图

四、制作rpm包

1、安装rpm-build

# yum -y install rpm-build

2、增加普通用户并修改工作车间目录

# useradd rpmbuild

# su - rpmbuild

$vim~/.rpmmacros 

%_topdir        /home/rpmbuild/rpmbuild

# mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

# rpmbuild --showrc | grep _topdir

-14: _topdir    /home/rpmbuild/rpmbuild


3、收集源码文件

(1)文件列表

[rpmbuild@RS1 SOURCES]$pwd

/home/rpmbuild/rpmbuild/SOURCES


(2)源码包

[rpmbuild@RS1 SOURCES]$cp  /wh_k/httpd-2.4.34.tar.gz   .

[rpmbuild@RS1 SOURCES]$ ll

总用量   8888

-rw-r--r--.  1   rpmbuild     rpmbuild    9098780    8月2915:16     httpd-2.4.34.tar.gz


(3)httpd脚本文件

1.

4、在 SPECS 目录下创建 httpd.spec

$ cd rpmbuild/SPECS/

查看系统组:

[root@RS1 rpm-4.11.3]# less /usr/share/doc/rpm-4.11.3/GROUPS

$ vim httpd.spec

Name:httpd

Version:2.4.34

Release:        1%{?dist}

Summary:wang123


Group:  Applications/System

License:        GPLV2

URL:            [email protected]

Source0:        /home/rpmbuild/rpmbuild/SOURCES/httpd-2.4.34.tar.gz


BuildRequires:  gcc

Requires:       gcc

%description

build by wang123


%prep

%setup -q


%build

%configure

make %{?_smp_mflags}


%install

make install DESTDIR=%{buildroot}


%files

%defattr(-,root,root)

/*

%doc

5、制作rpm包

[rpmbuild@RS1 SPECS]$ rpmbuild -bp httpd.spec 制作到%prep段

[rpmbuild@RS1 SPECS]$ rpmbuild -bc httpd.spec 制作到%build段

[rpmbuild@RS1 SPECS]$ rpmbuild -bi httpd.spec 执行 spec 文件的 "%install" 阶段 (在执行了 %prep 和 %build 阶段之后)。这通常等价于执行了一次 "make install"rpmbuild -bb nginx.spec 制作二进制包

[rpmbuild@RS1 SPECS]$ rpmbuild -ba httpd.spec 表示既制作二进制包又制作src格式包

五、rpm包的签名

1、查询软件包信息

[rpmbuild@RS1 x86_64]$ pwd

/home/rpmbuild/rpmbuild/RPMS/x86_64

[rpmbuild@RS1 x86_64]$ ll

总用量 10052

-rw-rw-r--. 1 rpmbuild rpmbuild 7428624 8月  29 16:12 httpd-2.4.18-1.el7.x86_64.rpm

-rw-rw-r--. 1 rpmbuild rpmbuild 2859268 8月  29 16:12 httpd-debuginfo-2.4.18-1.el7.x86_64.rpm

到这里,一个完整的 rpm 包就制作完成了!


原文:rpm-build制作httpd的rpm安装包过程

你可能感兴趣的:(【引用】rpm-build制作rpm安装包过程)