一、RPM介绍

RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理;现在应为RPM Package Manager的缩写。在Fedora、RedHat、Mandriva、SUSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用; RPM包中除了包括程序运行时所需要的文件,也有其它的文件;一个RPM包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系。

RPM可以让用户直接以binary方式安装软件包,并且可替用户查询是否已经安装了有关的库文件;在用RPM删除程序时,它又会聪明地询问用户是否要删除有关的程序。如果使用RPM来升级软件,RPM会保留原先的配置文件,这样用户就不用重新配置新的软件了。RPM保留一个数据库,这个数据库中包含了所有的软件包的资料,通过这个数据库,用户可以进行软件包的查询。RPM虽然是为Linux而设计的,但是它已经移值到SunOS、Solaris、AIX、Irix等其它UNIX系统上了。RPM遵循GPL版权协议,用户可以在符合GPL协议的条件下自由使用及传播RPM。

二、RPM包分类

rpm分为两大类,

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

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

它们之间的关系是,最先我们按rpm打包要求改造软件项目源码,当符合要求之后就可以使用rpmbuild命令来生成不同的rpm包,同时生成的包之间版本是直接对应的,比如相同的源码包将生成完全相同的二进制rpm包。当你在网上查找rpm包时,一般你可以在RPMS目录中找到预编译的二进制包,而源码包则会在SRPMS目录内。

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

三、RPM包制作介绍

RPM包的制作,即是RPM源码包的制作。

RPM包工作的原理

RPM是为解决源码包不易安装(需要编译)和软件包相互之间依赖(是RPM包管理器可以一定程度解决依赖问题)问题,它通过在探测源码包在build和install阶段的动作获得最终生成的需要安装的系统里的文件,并记录下一些必要的操作(比如安装完成后执行某项操作),然后把此组成为一个整体,当在用户安装此包时把前面获得的所有问题和记录的所有操作原原本本的作用的实际系统上。

把一个普通的源码打成RPM包,需要下面一些操作

1、先需要对项目的Makefile作必要的改造以支持RPM打包操作(实际上此操作不是绝对的,SPEC文档和Makefile的是协调统一工作的,只要他们之间配合好了其他都无所谓,我们一般只是推荐大家尽量按行业标准规范操作而已)

2、次是针对当前项目撰写SPEC文档,SPEC文档包括了RPM打包过程的操作内容和新生成的RPM包的基本信息等,它的作用对象是打包程序rpmbuild。

四、RPM包制作过程

1 准备打包环境

执行如下命令安装rpmbuild和rpmdevtools

#yum install rpmbuild
#yum install rpmdevtools

执行如下命令来生成rpmbuild的工作目录

#rpmdev-setuptree

工作目录结构如下,

~/rpmbuild
~/rpmbuild/SOURCES              #放置打包资源,包括源码打包文件和补丁文件等
~/rpmbuild/SPECS                #放置SPEC文档
~/rpmbuild/BUILD                #打包过程中的工作目录
~/rpmbuild/RPMS                #存放生成的二进制包
~/rpmbuild/RPMS/i386            #存放生成的i386结构包
~/rpmbuild/SRPMS                #存放生成的源码包

提示:rpmdev-setuptree命令默认将再当前用户主目录下创建一个RPM构建根目录结构,如果需要改变次默认位置,可以修改配置文件:~/.rpmmacros中变量_topdir对应的值即可。

2、载源码包到SOURCES目录,不需要解压

cd SOURCES/
wget http://nginx.org/download/nginx-1.2.1.tar.gz

3、撰写Spec文件

SPEC撰写是打包RPM的核心,也算是最难的一步,好在我们可以从参照一个简单的模板文件开始,在可以实现基本功能的基础上再一步一步的扩充文档内容,直至完全达到要求。下面是一个简单的SPEC文档,其中包括了一些说明信息(注:#后面的内容为说明信息),该SPEC文档是对一个测试的软件项目hellorpm写的,hellorpm软件包编译后仅有一个执行文件、一个手册文件和一个项目说文件。

nginx.spec文档的内容如下:

#
# Example spec file for nginx
#
#软件包简要介绍
Summary: high performance web server

#软件包的名字
Name: nginx

#软件包的主版本号
Version: 1.2.1

#软件包的次版本号
Release: 1.el5.ngx

#授权协议
License: 2-clause BSD-like license

#软件分类
Group: Applications/Server
Source: http://nginx.org/download/nginx-1.2.1.tar.gz
URL: http://nginx.org/
Distribution: Linux
Packager: zhumaohai <admin@www.linuxidc.com>
 
#软件包的内容介绍
%description
nginx [engine x] is a HTTP and reverse proxy server, as well as
a mail proxy server

#表示预操作字段,后面的命令将在源码代码BUILD前执行
%prep
rm -rf $RPM_BUILD_DIR/nginx-1.2.1
zcat $RPM_SOURCE_DIR/nginx-1.2.1.tar.gz | tar -xvf -

#BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作  
%build
cd nginx-1.2.1

#调用源码目录中的configure命令 
./configure --prefix=/usr/local/nginx

#在源码目录中执行自动构建命令make
make

#安装字段
%install
cd nginx-1.2.1

#调用源码中安装执行脚本  
make install
%preun
if [ -z "`ps aux | grep nginx | grep -v grep`" ];then
killall nginx >/dev/null
exit 0
fi

#文件说明字段,声明多余或者缺少都将可能出错
%files
#声明/usr/local/nginx将出现在软件包中
/usr/local/nginx

4、构建RPM包

开始构建操作,首先进入到当前用户的rpmbuild根目录

#cd ~/rpmbuild/
#rpmbuild -ba SPECS/nginx.spec

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

参考地址:http://www.linuxidc.com/Linux/2015-08/121748.htm

转载于:https://www.cnblogs.com/disanyuzhou/p/6830955.html

linux rpm 包制作详解相关推荐

  1. Linux rpm 命令参数详解

    文章节选自:http://www.linuxsir.org/main/?q=node/50 RPM软件包管理的查询功能 命令格式 rpm {-q|--query} [select-options] [ ...

  2. linux怎么制作运行包,简单 RPM 包制作

    今天为了测试搭建自己的yum仓库并安装升级软件包,因此需要一个rpm包来做测试,所以就想到了自己来做一个最简单rpm,因为仅仅就是做一个测试所以没有添加需要编译的文件,而是只使用了一个shell文件来 ...

  3. linux yum仓库制作,yum仓库搭建之RPM包制作

    常见的软件安装方式有以下几种 1.yum安装,可自动解决依赖,但不能自定义软件安装位置 2.编译安装,可指定安装路径,指定装模块,但编译参数冗长,且耗时较长,不能解决依赖问题. 3.rpm安装,安装速 ...

  4. Linux LVM 的使用详解

    Linux LVM 的使用详解 2011-12-20 14:41 摘要: Linux用户安装Linux操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间.而 ...

  5. Linux下使用aMsn详解(转)

    Linux下使用aMsn详解(转) amsn这一款在linux下的Msn就不多介绍了,0.95版出来后加入了摄像头,在加上其文件传输功能,你还留恋于gaim么? 经过多天的搜索和尝试,终于在Fedor ...

  6. linux ps命令使用详解

    PS是LINUX下最常用的也是非常强大的进程查看命令 1. ps简介 前面介绍的两个命令都是用于查看当前系统用户的情况,下面就来看看进程的情况,这也是本章的主题. 要对进程进行监测和控制,首先必须要了 ...

  7. 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动

    本节书摘来自异步社区<Linux 设备驱动开发详解(第2版)>一书中的第1章,第1.1节,作者:宋宝华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 L ...

  8. linux下DNS配置详解

    linux下DNS配置详解 DNS 是域名系统 (Domain Name Server) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务.在Internet上域名与IP地址之间是一一对应的 ...

  9. 内网环境下使用rpm包制作yum数据源及使用

    内网环境下使用rpm包制作yum数据源及使用 在实际生产环境中,绝大多数服务器处于内网环境.基于最小化安装.光盘镜像挂载不方便(缺少)等原因,无法使用yum服务,本实验基于生产环境中出现的上述现象进行 ...

最新文章

  1. 107. Binary Tree Level Order Traversal II
  2. 【C#公共帮助类】10年代码,最全的系统帮助类
  3. 特定场景下Yolo改进算法:Poly-Yolo
  4. hdu 2777(线段树)
  5. XXL-JOB v2.0.2,分布式任务调度平台 | 多项特性优化更新
  6. Html基础知识详解
  7. Cloud for Customer系统里的附件url,可以通过partner编程自己生成么
  8. Flask 应用的文件结构
  9. Eclipse Tips(2):代码颜色设置
  10. Linux系统centos7+VMwareWorkstation创建共享文件夹错误解决方法集锦
  11. 【申论】钟君讲申论(听课笔记)
  12. 如何把照片kb缩小?详细步骤
  13. 企业微信如何快速高效添加好友?
  14. 史上最全Java并发编程面试题(75道附答案)
  15. 简单静态web页面+动画(小案例)
  16. DataStory X Kungfu | DemoDay亮点大揭秘
  17. 奇妙数字(数论)题解
  18. SAP的新T台:在中国站稳脚跟
  19. 七龙珠火影海贼王妖精的尾巴精典语录与各地所看语录
  20. tf.invert_permutation

热门文章

  1. [转]讲解安装Ubuntu nfs配置系统
  2. Java锁详解之改进读写锁StampedLock
  3. iOS - 使用 SQLite 数据库实现数据持久化
  4. 阿里云徐立:面向容器和 Serverless Computing 的存储创新
  5. 深度解读!阿里统一应用管理架构升级的教训与实践
  6. 这件事,阿里爱了10年
  7. linux 查询注册服务,window下注册服务的命令小结
  8. 城镇开发边界划定指南_URP精编 | 基于 “双评价”的城镇开发边界划定实证研究...
  9. linux 串口驱动 atmel_set_mctrl何时调用,linux uart serial使用驱动分析
  10. linux怎么复制手册,程序员的Linux上手手册(2) - 基础文件操作命令