Username: Password:

构造Linux的图像化安装程式(4)
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  rpm包管理和安装盘定制

  本文是构造Linux的图像化安装程式系列文章的第四部分,内容主要包括RPM基本命令介绍,RPM包的定制过程,RPM SPEC文档的主要内容,RPM函数库简单参考和安装程式中关于RPM包管理部分源码的简单介绍。通过这部分的介绍,希望读者能对Linux系统下RPM包的定制过程和RPM包的系统安装过程有一个基本的了解。

  在安装程式进行了磁盘分区工作之后,安装程式就能够进行RPM系统包的安装了。这是整个安装过程中很重要的一步。在这一环节,安装程式要读出任何rpm包的描述信息并根据包之间的依赖关系,构造出正确的包安装顺序。这种构造的机制主要是对包依赖关系的树形结构进行深度搜索,对于最基本的系统包(比如Glibc和Bash)一定要最先安装。为了确保在安装了任何的系统包之后,RPM数据库运行良好,还要在安装过程中构造正确的RPM数据库。最后为了调试的方便,也便于用户检查安装的系统包,还需要对包的安装过程建立日志。

  1 RPM包的基本概念

  RPM(Redhat Package Management)是由RedHat研发的,Linux系统下的系统包管理工具。他的目标是:使包的安装和卸载过程更容易,能够证实一个包是否已正确安装了,简化包的建立过程,能够从源代码建立整个包,使他能用于不同的体系结构。RPM系统已成为现在Linux系统下包管理工具事实上的标准,并且他也移植到很多商业的unix系统之下。

  RPM包由包标签标识,他包含这样几个部分,软件名,软件版本,包的发行版本。在包的内部还包含如下信息:包的建立时间,包的内容描述,安装包的任何文档的大小,数字签名以证实包的完整性。RMP包还包含包内的文档信息,其中包括:每个文档的文档名,每个文档的权限,文档的属组和拥有者,每个文档的md5校验和,文档的内容。

  RPM的包管理系统提供了下列功能:安装新的包,除去旧的包,将一个旧包升级为新的包,获得已安装包的信息。

  常用的RPM命令:

  rpm -i

  使用此命令能够安装一个rpm包。在安装的过程中,此命令依次要进行包依赖性检测,包冲突检测,完成安装前必须执行的任务,处理相应的配置文档,解开包中的文档并将其拷贝到正确的位置,完成安装后必须执行的任务,对包进行的处理进行跟踪记录。

  例如:

  rpm -i bzip2-1.0.1-3.i586.rpm

  //安装bzip2包。

  rpm -ivh bzip2-1.0.1-3.i586.rpm

  //安装bzip2包的同时,显示更多的文本提示信息,连同在屏幕上显示连续的#号来表示的安装进度。

  有时在安装一个新包时,根据依赖性检查的结果,需要首先安装其他的包。但可能这时系统中并没有安装所需要包的合适版本,这样rpm会终止包的安装。为了直接安装这个包,您需要加入--nodeps选项。下例表示在安装bzip2包时,不进行依赖性检测。

  rpm -ivh bzip2-1.0.1-3.i586.rpm --nodeps

  rpm -ivh bzip2-1.0.1-3.i586.rpm --force

  //强制安装rpm包。这条命令实际上等价于

  rpm -ivh bzip2-1.0.1-3.i586.rpm --replacepkgs --replacefiles

  rpm -e

  使用此命令能够删除一个rpm包。删除rpm包时,此命令要完成如下工作:

  检查rpm数据库确保没有其他包依赖将要删除的包。

  假如包存在卸载前脚本,执行此脚本。

  检测安装包时是否对包配置文档进行了修改。假如进行了修改,则保存备份。

  查找rpm数据库中此RPM包所包含的文档。假如这些文档不属于任何其他的包,则删除他。

  假如包存在卸载后脚本,执行此脚本。

  从rpm数据库除去任何包跟踪记录。

  例如:

  rpm -e bzip2

  //从系统中除去bzip2包。添加--nodeps选项能够在删除包时,禁止包的依赖性检查。

  rpm -U

  这条命令完成rpm包的升级。他执行的操作包括安装合意的包,删除任何存在的老版本的包。例如:

  rpm -U bzip2

  //升级包bzip2。

  rpm -q

  这条命令能够获得rpm包的信息。通过这条命令能够查询包的文档列表,包的版本,包的描述性信息。同样的,您也能够通过这条命令查得一个文档属于哪个rpm包。例如:

  rpm -qf `which fdisk`

  //检查fdisk文档属于哪个系统包。

  rpm -qi bzip2

  //获得已安装包bzip2的描述性信息。

  rpm -ql bzip2

  //获得安装包bzip2的文档列表。

  rpm -qa

  //获得系统安装的任何rpm包的列表。这条命令和grep命令一起使用,能够快速找到系统中包含的某个rpm包,例如:

  rpm -qa | grep bzip2

  2 RPM包建立过程

  为了完成RPM包的建立过程,需要执行以下步骤:

  执行Spec文档prep节的命令和宏。

  检查文档列表的内容。

  执行Spec文档build节的命令和宏。

  执行Spec文档install节的命令和宏,同时也执行文档列表中的宏。

  创建二进制包文档。

  创建源码包。

  为了执行打包的工作,RPM需要一系列目录完成建立的工作。正常的目录结构通常由一个顶级目录和五个子目录构成。这五个子目录分别是:

  SOURCES------包含原始的源文档、补丁和像标文档。

  SPECS--------包含控制建立过程的spec文档。

  BUILD--------包含源码解包和软件建立的目录。

  RPMS---------包含建立过程创建的二进制包文档。

  SRPMS--------包含建立过程创建的源码包文档。

  除了上述这五个主要的目录外,在RPMS或SRPMS目录下通常还会有关于包目标平台的目录。例如,i386、i586、i686等代表和Intel兼容cpu的平台,noarch目录下的包代表能够在任何平台下执行。

  2.1 SPEC文档

  Spec文档是整个RPM包建立过程的中央,他的作用就如同编译程式时的Makefile文档。Spec文档包含建立一个rpm包必需的信息,包括哪些文档是包的一部分连同他们安装在哪个目录下。这个文档一般分为如下的几节:

  Preamle(序言)

  序言包含用户请求包的信息时所显示的内容。他能够包含包的功能描述,包的软件版本,版权信息,所属的包组等。

  Prep节 Prep节进行实际的打包准备工作,他是使用节前缀%prep表示的。一般而言,这一节的主要工作是检查标签语法是否正确,删除旧的软件源程式,对包含源程式的tar文档进行解码。假如包含补丁(patch)文档,将补丁文档应用到解开的源码中。他一般包含%setup和%patch两个命令。%setup用于将软件包打开,执行%patch可将补丁文档加入解开的源程式中。

  %setup

  -n newdir---------将压缩的软件源程式在newdir目录下解开。

  -c ---------------在解开源程式之前先创建目录。

  -b num------------在包含多个源程式时,将第num个源程式解压缩。

  -T----------------不使用缺省的解压缩操作。

  例如:

  %setup -T -b 0

  //解开第一个源程式文档。

  %setup -c -n newdir

  //创建目录newdir,并在此目录之下解开源程式。

  %patch

  %patchN----------这里N是数字,表示使用第N个补丁文档,等价于%patch -P N

  -p0--------------指定使用第一个补丁文档,-p1指定使用第二个补丁文档。

  -s---------------在使用补丁时,不显示任何信息。

  -b name----------在加入补丁文档之前,将源文档名上加入name。若为指定此参数,则缺省源文档加入.orig。

  -T---------------将任何打补丁时产生的输出文档删除。

  Build节

  这一节主要用于编译源码,他是使用节前缀%build表示的。这一节一般由多个make命令组成。

  Install节

  这一节主要用于完成实际安装软件必须执行的命令,他是使用节前缀%install表示的。这一节一般是由make install指令构成,但是有时也会包含cp、mv、install等指令。

  这一节还能指定在用户安装的系统上,包安装时运行的脚本。这样的脚本称为安装(卸载)脚本。他能够指定包安装前、包安装后、包除去前、包除去后的系统必须运行的外壳程式段。在用户安装的系统上,为了验证一个包是否已成功安装的验证脚本也可由这一节指定。

  Clean节

  这一节所描述的内容表示在完成包建立的工作之后,自动执行此节下的脚本进行附加的清除工作,他是使用节前缀%clean表示的。一般而言,这一节的内容是简单地使用rm -rf $RPM_BUILD_ROOT命令,无需指定此节的其他内容。

  文档列表

  这一节指定构成包的文档的列表,他是使用节前缀%files表示的。此外,他还包含一系列宏控制安装后的文档属性和配置信息。

  改变日志

  这一节主要描述软件的研发记录,他是使用节前缀%changlog表示的。这个段的内容是为了研发人员能周详的了解该软件的研发过程,对于包的维护极有好处。

  2.2 建立rpm包

  有时您可能只有一个tar.gz格式的源程式包,为了生成正确的rpm包,您能够使用autospec自动创建spec文档。

  举例来说,您有一个源程式文档some.tar.gz。为了定制rpm包,您要进行如下操作:

  解压缩源程式包

  tar xvzf some.tar.gz

  手动编译和安装此源程式包

  make; make install

  自动生成spec文档

  make -n install | autospec -i > some.spec

  编译生成rpm包

  rpm -ba some.spec

  在创建spec文档之前,必须成功编译源程式包。否则au

  

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅