Linux rpm包管理详述

我们日常在使用Windows的时候,如果要安装某个软件,最简单的方法就是在程序包的官网直接下载软件包到本地,一般是以.exe或者.msi格式的文件,然后一直下一步下一步就能安装成功了,但是在使用linux的操作系统的时候也许不是这么的友好,即使现在有的linux发行版也可以通过简单的搜索点击安装来实现软件包的安装,但这并不一种很好的安装方法,因为你必须安装桌面环境,消耗和占用一定的内存资源,除非只是你日常使用。本次博客就如何使用rpm命令来实现CentOS上的软件包的安装与管理,rpm也许不是最明智的选择,但是在学习yum之前,我们还是先来看一下rpm吧!

rpm包的组成和获取路径

程序包,简单的来说就是将源代码通过编译器编译成二进制格式的程序,然后将二进制程序、库文件、配置文件和帮助文件组成为一个或者有限几个“包”文件。

在不同的linux发行版上,提供的程序包的管理器并不是都相同的,比如debian系的使用的包管理器是dpkg(包文件后缀名.deb),在rehat和SUSE系使用都是rpm( rpm is package manager),centos作为RedHat的分支,自然使用的是rpm了,而这些包文件的后缀名就是.rpm。

来看一下这些文件吧!(这里使用grep显示了包文件名中只含有yum的包名)

Linux rpm包管理详述

rpm包命名的格式:

先来看一下源代码的命令格式,一般程序的官网会提供程序的源代码文件,你可以通过源代码编译安装:

zabbix-3.4.1.tar.gz

格式: name - version.tar.gz

version:major.minor.release 

major:主版本号,源码发生巨大的改变,则会改变;

minor:次版本号,源码发生了较大的改变,则会改变;

release:发行号,当修复了很小的bug的时候,则会改变。

再来看一下包的命令格式:
yum-3.4.3-150.el7.centos.noarch.rpm

格式:name-VERSION-release.arch.rpm

VERSION为源码的版本号;

releas为rpm包的发行号;

arch为包可以运行的平台,如i386,x64(amd64),ppc,noarch(说明可以在不同的平台上安装)等。

如这里的yum-3.4.3-150.el7.centos.noarch.rpm,yum为包名,3.4.3为源码版本,el7.centos代表centos7,noarch说明你可以在不同的平台上使用它。

从上面的图上我们可以看到,除了一个以yum为名字的包以外还有很多其他包含yum的包,当我们安装了这些包之后,可以为yum提供更多的额外的功能。

包文件的组成(每个包都是单独实现的):

rpm包内的文件;

rpm的元数据,依赖关系,描述等;

安装和卸载时候运行的脚本。

公共的数据库(/var/lib/rpm):

程序包的名称和版本;

依赖关系;

功能说明;

安装生成的各文件的文件路径及校验码信息。

依赖关系:

做为linux重要的哲学思想之一,单一程序的组合起来完成复杂的任务,rpm包之间也是这样的,如果想要实现一个复制的功能,可能需要多个rpm包之间相互依赖才能实现,例如,你装A软件包,可能依赖于B包,那么你就需要安装B包,你安装B包,可能又要依赖于C包,所以你在安装A包的时候,就需要同时报B包和C包都装上去。这样一个一个安装固然很浪费时间,所以linux也提供了一些前端工具来自动解决依赖关系:

yum:rhel系列系统上rpm包管理器的前段工具

apt-get:deb包管理器的前端工具

zypper:suse的rpm管理器前端工具

dnf:Fedora 22+系统上的rpm包管理器的前端工具。

获取程序包的途径

 (1)系统发行版的光盘或官方的文件服务器:

         http://mirrors.aliyun.com, 
         http://mirrors.sohu.com,
         http://mirrors.163.com
 (2)项目的官方站点

 (3)第三方组织

         (a)EPEL
         (b)搜索引擎
             http://pkgs.org
             http://rpmfind.net 
             http://rpm.pbone.net 

 (4) 毛爷爷说过:自己动手,丰衣足食!

rpm命令

 centos上使用rpm命令来实现程序包的安装、升级、卸载、查询、校验和数据库的维护。

 一、安装

rpm {-i|--install} [install-options] PACKAGE_FILE ...
选项:
-i,--install:安装包
-v:verbose,详细信息
-vv:更详细的输出
[install-options]:
-h:hash marks输出进度条,每个#表示2%的进度
--test:测试安装,但是并没有安装,检查并报告依赖关系及冲突消息等
--nodeps:忽略依赖关系安装,不建议
--replacepkgs:重新安装
--nosignature:不检查包的签名信息,不检查来源合法性
--nodigest:不检查包完整性信息
注意:rpm可以自带脚本
总共有4类脚本:
preinstall:安装过程开始之前运行的脚本,%pre
postinstall:安装过程完成之后运行的脚本,%post
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun
postuninstall:卸载过程完成之后运行的脚本,%postun
--noscripts:不执行这四种脚本
--noper:不执行preinstall脚本
--nopost:不执行postinstall脚本
--nopreun:不执行preuninstall脚本
--nopostun:不执行postuninstall脚本

下面我们来举一些例子吧!

1.安装zsh,并显示详细信息和进度条:

[root@localhost Packages]# rpm -ivh  zsh-5.0.2-25.el7.x86_64.rpm  #最常用的组合 -ivh
Preparing...                          ################################# [100%]
Updating / installing...
   1:zsh-5.0.2-25.el7                 ################################# [100%]
[root@localhost Packages]#

2.修改zsh的配置文件,再执行重新安装:

 Linux rpm包管理详述

[root@localhost Packages]# rpm -i  --replacepkgs zsh-5.0.2-25.el7.x86_64.rpm

Linux rpm包管理详述

 说明重新安装并不会覆盖原有的配置文件。

 3.忽略依赖性安装

相关推荐