资讯专栏INFORMATION COLUMN

制作 RPM 包

wapeyang / 568人阅读

摘要:总结制作就是指改造软件源代码使之符合打包要求的过程,这也可以等价为源码包的制作过程,因为当你有了源码包就可以直接编译得到二进制安装包和其他任意包。到此一个完整的打包环境已经构建完成,下面我们就可以开始构建二进制和源代码包。

介绍 缩写

前世:RPM为Red Hat Package Manager的缩写(Red Hat软件包管理),顾名思义是Red Hat贡献出来的软件包管理。

今身:RPM为RPM Package Manager的缩写(GNU的既视感)。

特点

RPM包中除了包括程序运行时所需要的文件,也有其它的文件。

RPM包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系。

RPM可以让用户直接以binary方式安装软件包,并且可替用户查询是否已经安装了有关的库文件。

RPM删除程序时,它又会聪明地询问用户是否要删除有关的程序。

RPM升级软件时,RPM会保留原先的配置文件,这样用户就不用重新配置新的软件了。

RPM保留一个数据库,这个数据库中包含了所有的软件包的资料,通过这个数据库,用户可以进行软件包的查询。

RPM虽然是为Linux而设计的,但是它已经移值到SunOS、Solaris、AIX、Irix等其它UNIX系统上了。RPM遵循GPL版权协议,用户可以在符合GPL协议的条件下自由使用及传播RPM。

类型

二进制类包,包括rpm安装包(一般分为i386和x86等几种)和调式信息包等。

源码类包,源码包和开发包应该归位此类。

总结

RPM制作就是指改造软件源代码使之符合RPM打包要求的过程,这也可以等价为RPM源码包的制作过程,因为当你有了源码包就可以直接编译得到二进制安装包和其他任意包。

依赖:

yum install rpmdevtools
开始 创建目录结构

执行 rpmdev-setuptree 将在当前用户主目录下创建一个RPM构建根目录结构

注:如需改变默认位置,可以修改配置文件:~/.rpmmacros中变量_topdir对应的值。

.
├── BUILD (打包过程中的工作目录)
├── RPMS (存放生成的二进制包, 不同硬件平台存放在不同文件夹)
├── SOURCES (存放打包资源, 包括源码打包文件和补丁文件等)
├── SPECS (存放SPEC文档)
└── SRPMS (存放生成的源码包)
撰写SPEC文档

SPEC撰写是打包RPM的核心, 下面是一个简单的SPEC文档, 其中包括了一些说明信息, 假设我们需要创建一个软件项目devrpm。

创建 devrpm.spec 文档:

#软件包简要介绍
Summary: build develop environment。
#软件包的名字
Name: develop environment
#软件包的主版本号           
Version: 0.0.1         
#软件包的次版本号             
Release: 1   
#源代码包,默认将在上面提到的SOURCES目录中寻找
Source0: %{name}-%{version}.tar.gz   
#授权协议
License: GPL          
#定义临时构建目录,这个地址将作为临时安装目录在后面引用
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
#软件分类
Group: Development/Tools  
#软件包的内容介绍               
%description                         
build local develop environment.
#表示预操作字段,后面的命令将在源码代码BUILD前执行
%prep                     
#构建BUILD环境,将解压源码压缩包到BUILD目录 
%setup -q
#BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作
%build       
#调用源码目录中的configure命令            
./configure        
#在源码目录中执行自动构建命令make     
make            
#安装字段         
%install     
#调用源码中安装执行脚本             
make DESTDIR=$RPM_BUILD_ROOT install 
#文件说明字段,声明多余或者缺少都将可能出错
%files              
#设置文件权限属性       
%defattr(-,root,root)      
#声明/usr/local/bin/devrpm将出现在软件包中      
/usr/local/bin/devrpm      
#声明并设置文件属性   
%doc %attr(0444,root,root) /usr/local/man/man1/devrpm.1  
#同上,声明文档文件 
%doc README  

文档说明:

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root上面BuildRoot变量表示的是源码的临时按照目录,rpmbuild就是通过此目录获得将要按照到系统中的所有文件,而在SPEC文档后面make install命令中的参数。

DESTDIR=$RPM_BUILD_ROOT 即是对该参数的引用,这个参数将传给Makefile文件一告诉自动构建工具应该安装文件那里。

实际上我再前文提到过的Makefile需要作一些改造以适应RPM的构建就包括此操作,你的Makefile文件中至少要知道在RPM构建过程中引用此参数的值去控制安装操作的目标。

放置源代码

把一个名为devrpm-0.0.1.tar.gz的源码压缩文件放到rpmbuild根目录下的SOURCES目录下(注,确保此归档文件解压后的目录为devrpm-0.0.1,否则会有问题)。

到此一个完整的rpm打包环境已经构建完成,下面我们就可以开始构建二进制和源代码RPM包。

构建RPM包

构建RPM包是有命令rpmbuild在SPEC的指导下完成。

开始构建操作,首先进入到当前用户的rpmbuild根目录(即上面提到的目录环境)。

#cd ~/rpmbuild/

执行如何命令,-ba表示build all,即生成包括二进制包和源代码包的所有RPM包,下来如果正常的话,rpmbuild将正常退出,同时在RPMS目录和SRPMS目录中将生成对应的RPM包。

#rpmbuild -ba SPECS/hellorpm.spec

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/7781.html

相关文章

  • 制作 RPM

    摘要:总结制作就是指改造软件源代码使之符合打包要求的过程,这也可以等价为源码包的制作过程,因为当你有了源码包就可以直接编译得到二进制安装包和其他任意包。到此一个完整的打包环境已经构建完成,下面我们就可以开始构建二进制和源代码包。 介绍 缩写 前世:RPM为Red Hat Package Manager的缩写(Red Hat软件包管理),顾名思义是Red Hat贡献出来的软件包管理。 今...

    derek_334892 评论0 收藏0
  • CentOS7编译安装Apache Httpd 2.4.20及rpm制作小记

    摘要:但是执行这个命令后我们发现,它会提示我们缺少相关依赖包。通常依赖包可以通过指令直接安装,下面是需要特殊安装的依赖包。安装完依赖包后,编译就是已经很轻松的事情了。相信很多同学都是在本地编译,然后上传到生产环境安装的吧,所以这一点需要提示一下。 showImg(https://segmentfault.com/img/remote/1460000006768765); httpd(Apac...

    crossea 评论0 收藏0
  • CentOS7编译安装Apache Httpd 2.4.20及rpm制作小记

    摘要:但是执行这个命令后我们发现,它会提示我们缺少相关依赖包。通常依赖包可以通过指令直接安装,下面是需要特殊安装的依赖包。安装完依赖包后,编译就是已经很轻松的事情了。相信很多同学都是在本地编译,然后上传到生产环境安装的吧,所以这一点需要提示一下。 showImg(https://segmentfault.com/img/remote/1460000006768765); httpd(Apac...

    187J3X1 评论0 收藏0
  • CentOS7编译安装Apache Httpd 2.4.20及rpm制作小记

    摘要:但是执行这个命令后我们发现,它会提示我们缺少相关依赖包。通常依赖包可以通过指令直接安装,下面是需要特殊安装的依赖包。安装完依赖包后,编译就是已经很轻松的事情了。相信很多同学都是在本地编译,然后上传到生产环境安装的吧,所以这一点需要提示一下。 showImg(https://segmentfault.com/img/remote/1460000006768765); httpd(Apac...

    oogh 评论0 收藏0
  • 使用rpmbuild制作Nginx的RPM

    摘要:是制作包最核心的部分,包的制作就是根据来实现的。本文主要介绍使用制作的包,大部分步骤已经使用自动化完成了,大家可以基于此重新定义。 showImg(https://segmentfault.com/img/remote/1460000017913567?w=868&h=657); 前言 题图为RPM包制作原理图,有时候为了方便源码包的安装,和我们自己订制软件包的需求,我们会把一些源码包...

    dinfer 评论0 收藏0

发表评论

0条评论

wapeyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<