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