1. RPM的简介

rpm Red Hat Package Manager (Red Hat 包管理器);现在linux 最常见的包管理方式


2. spec文件规范


制作rpm 软件包并不是一件复杂的事情,其中的关键是:编写SPEC软件包描述文件,想制作一个rpm包,必须写一个软件包描述文件(SPES);这个文件包含了软件包的诸多信息,比如软件包的名字、版本、类别、说明摘要、创建rpm包时需要执行的命令、 安装时需要执行的命令


  • 文件头信息: summary  Name  Version Release  Verdoner ...........
  • depend on other package 依赖包
  • %prep 字段:这个段是预处理段,通常用来执行一些解开源程序包的命令;为下一步的编译安装作准备;是可以执行的shell 脚本命令
  • bulild 字段:建立段,所有执行命令为生成软件包服务;如make命令
  • %install段:本段是安装段,其中的命令在安装软件包时执行
  • %changelog:记录包的修改,比如加入一个补丁,修改配置文件、日志格式等信息记录下来;
  • %files 段:本段是文件段,用于定义软件包所包含的文件,非为三类:配置文件  执行程序 和说明文档 以及定义起执行权限
  • %config:配置宏
%config(noreplace) %{_prefix}/conf/xxx.conf
%config(noreplace) %{_prefix}/conf/xxxx.conf
%config(noreplace) %{_prefix}/conf/xxxxxxx.conf





3.  RMP 打包


如果想发布rpm格式的源码包或者二进制包,就要使用rpmbuild 工具,rpm 最新的打包工具:


rpmbuild -[bspa]  ***.spec 



rpmbuild  进行打包。



先写 spec文件  --->rpmbuild 打rpm包


http://hlee.iteye.com/blog/343499


4.  rpmnew  rpmnsave

rpm spec文件里面有个名为  %config 的宏;它可以标识配置文件,这样在升级时用户对配置文件的修改就不会丢失

RPM中的配置文件的制约条件有三个:

  • 该文件在spec中符合标识(默认, %config  和 %config(noreplace 三种标识方式)
  • 在rpm包版本升级时该配置文件是否更新
  • 该文件是否被用户编辑过

下面是三个制约条件组合的结果:




文件标识

在RPM升级包中是否更新了? 

旧版本文件未被用户编辑过 

旧版本文件被用户编辑过

默认

NO

用rpm包内新文件覆盖

用rpm包内新文件覆盖

 

YES

用rpm包内新文件覆盖

用rpm包内新文件覆盖

%config

NO

用rpm包内新文件覆盖

保持旧文件

 

YES

用rpm包内新文件覆盖

旧文件保存问rpmsave,用rpm包内新文件覆盖就文件

%config(noreplace)

NO

用rpm包内新文件覆盖

保持旧文件

 

YES

用rpm包内新文件覆盖

保持旧文件,rpm包内新文件改为.rpmnew




在日常工作中经常遇到这中用户修改配置文件的情况,正确的方法是:


  • 首先确认文件标识不是默认方式
  • 用户先修改配置文件
  • 然后把修改后的配置文件在原来包版本的spec文件中修改,并把修改后的文件放到包里面;
  • 这样下次升级了rpm包的配置文件,这个配置文件被修改过,这样通过标识可以把旧文件:rpmnew  rpmsave