[期权杂谈] 【分享吧】linux软件包管理之rpm

论坛 期权论坛 期权资料     
大连飞创   2018-7-20 16:58   16942   0

概述
   在我们日常开发运维工作中,接触最多的就是各种各样的软件包;软件包大体可以分为两类:二进制文件,比如(exe、rpm、bin等格式);另一类就是源码文件(各种tarball),本文将介绍linux系统中最常用的rpm软件包,将从rpm包定义、rpm包功能、rpm包数据格式、如何制作一个简单的rpm包四个方面进行阐述。



RPM定义
   一个软件包管理器,起初是redhat package manager,为红帽系统设计的;目前RPM是许多linux发行版的重要组成部分,比如redhat、 fedora、suse、opensuse、centos等。
   rpm是基于GPL规则,且为免费的软件。
   对于系统管理员 来说,使用rpm进行软件安装与运维有以下优点:简单、统一、能够实现自动化,无需人工干预。
   Rpm包命名规则:
name-version-release.arch.rpm
eg:gnome-desktop-2.28.2-11.el6.x86_64.rpm



RPM软件包功能
存储数据压缩
  它支持常见的 bz2 和 gzip 等压缩算法。
文件安装
  将软件包中的文件安装到目标操作系统上。
配置文件的生成
  既可以静态把配置文件安装到指定的目录中,也可以根据系统相关的信息动态生成。
系统服务注册
  当安装一些软件包时,会将文件安装在系统指定的目录中,作为系统服务命令,比如安  装软件包 vsftpd *.rpm后,会安装在/etc/init.d/目录,可使用系统命令启动或者停止该服务。
软件依赖检查
  rpm包内提供软件依赖检查功能,为使用yum工具自动安装软件包奠定基础。



RPM包数据格式
  Rpm包数据包格式不同版本是不一样的,下面介绍的rpm数据格式是基于version 3的,每个rpm包含4个区域,如下图:

Lead分区:
  Rpm的数据第一个分区是lead分区,lead分区含一个结构体,用来记录一些简单的信息,比如文件类型、版本信息等。但是由于结构体的扩展性比较差,后来引入一个新的结构—“header structure”。其结构如下:

Header: 16字节
[8e ad e8|version 1|reserved 4|number 4|size 4]
  3个字节 魔数,1字节版本号 ,4字节保留,4字节index的个数,4字节头结构的大小
Index: 16字节
  [tag 4|type 4|offset 4|count 4]
  4个字节整型变量tag,4个字节的类型,4个字节数据存储store的偏移量,4个字节index指向数据元素的个数。
  头结构的索引部分是由0个或者多个索引入口组成,每一个入口都是16字节长。
store: N字节
  store就是header structure存储data的地方。根据index中的type值的不同,存储的数据有以下三点要注意:
  a.STRING类型的数据,每个字符串是以null结尾。
  b.INT类型的数据,每个INT*的数据都是按照它的类型的自然边界存储的。
  c.所有的数据都是用网络字节序存储的。
接下来介绍的signature分区和header分区都是基于“header structure”实现的。
Signature分区:
  Signature分区是基于“header structure”实现的,存储了rpm包的校验信息,比如sha1值、md5sum等,用来校验rpm包的完整性与一致性。
Header分区:
  Header分区也是基于“header structure”实现的,存储了rpm包的所有的相关描述信息,例如,文件名称、版本号、文件列表,但不含数据。
Archive分区:
  Archive分区存储的rpm包所有文件的内容,并采用gzip压缩存储的。



RPM包制作
  经过上面rpm简单知识的了解,那么怎么做一个rpm呢?接下来将通过一个简单的示例来说明rpm包制作过程:
首先需要准备“原材料”如下:
源码文件及构建工具(gmake等)。
比如一个简单的测试程序:test_build_rpm.cpp

  Makefile文件:

依据rpmbuild规范设置目录结构,有以下目录结构需要设置。

  注意:该目录放在$HOME路径下即可。
将源码程序、配置文件、说明文档等打包tarball放入到SOURCES目录下。
创建一个以.spec结尾的配置文件,spec是一个具有特殊语法的文本文件,在生成rpm包使用。

  配置项说明:
  % description:软件描述、概要。
  %setup:解压源码程序。
  %build:编译构建程序。
  %install: 运行make install安装到目的路径。
  %clean:Clean掉一些临时文件。
  %files:要安装的档案写此处。
  %changelog:记录该软件的修改履历。
  格式:* 后面跟时间、修改者,email,版本信息
  - 后面跟详细修改说明。
将创建的配置文件放入到SPECS目录下。
运行命令
  rpmbuild -v -bb --clean SPECS/*.spec,将生成所需要的rpm包,其在RPMS目录下。
  参数说明:
  -v显示生成过程详细信息
  --clean 生成包后删除构建树
  -bb 只生成rpm包,-ba,即生成rpm包、又生成srpm包。

  附rpm包常用命令
  安装命令:
  rpm –i *.rpm
  rpm –ihv *.rpm
  rpm –ihv http://xx
  参数选项说明:
  -v 显示安装信息界面
  -h 显示安装进度
  -i 安装

  查询命令:
  rpm –q *rpm(查询某个rpm包)
  rpm –qa (查询所有以安装的软件包)
  rpm –qf 可执行文件名(查询该可执行文件属于那个软件包)

  更新升级命令:
  rpm –vUh *rpm
  rpm –vFh *rpm
  选项说明:  
  -U 软件包没有安装,则直接安装,如果安装过则升级到最新版本   
  -F 该软件包只有已安装过才能更新


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3174
帖子:645
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP