软件包管理器介绍
在没有软件包管理器前,用户都是通过源代码的方式来安装软件。但是我们很容易发现,在每次安装软件时都必须对操作系统的境、编译的参数进行对应的编译,并且操作过程很是复杂,这对于不熟悉操作系统的朋友来说真心困难,那么有没有一款软件能让用户能很简单的安装所需的软件呢?
在Linux下,除了使用源码包安装外,还有一种已经编译好的开源软件大多是采用“包”的形式发布的。包捆绑了一个软件所需要的二进制文件;数据、配置文件和技术文档。包还规范了将软件安装到系统上所需要的步骤,通常就是执行命令,但是由于不同的Linux发行版会有自己独特的特性,这就使得包适用于特定系统。因此,不同的Linux发行版会提供自己的包管理器,一个用于在系统中添加和删除包的特殊程序。
常见Linux软件安装方式有2种
第一种:RPM
RPM就是redhat中的一种包管理器,它由redhat在1997年开发出来。由于非常的简单实用,很多的distributions都使用这个机制来安装和管理软件。例如:RHEL、SuSe等。但RPM以前叫RedHat package manager;后更名为rpm is package manage),RPM包相对来说使用方便安装简,单但是它的缺陷就是RPM包内有些特性都不是我们需要的而我们需要的特性说不定它又没有;RPM包的版本一般都是落后于源码包。
第二种: DPKG
这个软件安装方法是通过Debian Linux社区开发出来的,通过dpkg机制,Debian所提供的软件就能通过很简单的方法安装软件,并且能记录安装后的软件信息。只有是Debian的Linux distributions大多数都是使用这个方法管理软件。例如B2D、Ubuntu。
软件包管理器的工作原理
RPM(RedHat Package Manager),RPM通过以一个种数据库记录的方式来将你所需的软件安装到你的Linux系统上的。在你所安装的软件前先通过编译完成,打包成RPM格式的文件,数据库记录的方式搜索对应需要具备的依赖关系的软件,那么当你在安装该软件的时候,RPM会查看你系统环境和依赖性关系来判定你是否能安装此软件。若能满足,则允许安装。否则将不给予安装。并且在安装的时候将该软件的信息写入RPM的数据库中,以便日后查询、检验和升级。
软件包管理器的核心功能
功能:将编译好的程序打包成一个文件或有限的几个文件,可以用于实现安装、卸载、升级、查询等功能。
包含:
1)打包这些二进制文件,库文件,配置文件,帮助文件成一个文件
2)安装此文件时在展开打包好的文件到各自指定的路径下去、
3)生成数据库追踪所安装的每一个文件/var/lib/rpm
4)支持安装,卸载,查看,升级,查询,校验,数据库重建等功能
5)软件包管理器也是一个软件可自我管理
一个程序的组成
安装一个软件大概也就是生成以下内容:
- 二进制文件:存放在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/
- 库:此库是软件自己的库文件提供其它软件调用或是二次开发存放在/lib,/usr/lib
- 配置文件:调整软件参数的存放在/etc,/usr/local
- 帮助文件:一些man文档和share文件存放在/usr/share/man
PS:/etc,/dev,/bin,/sbin,/lib,/proc,/sys:这些目录不能独立分区必须在/分区中。系统启动就需要用到的程序/usr/bin,/usr/sbin,/usr/lib:这一套程序运行操作系统核心功能要用到的
RPM包的组成和命名格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
主包如 bind-9.7.1-1.el5.i386.rpm(32位平台) 或 bind-9.7.1-1.el5.x86_64.rpm(64位平台) 或 bind-9.7.1-1.el5.noarch.rpm(无平台) 或 bind-9.7.1-1.el5.ppc.rpm(powerpc平台) 子包如 bind-libs-9.7.1-1.el5.i386.rpm bind-utils-9.7.1-1.el5.i386.rpm bind-level-9.7.1-1.el5.i386.rpm 包名格式 bind-9.7.1-1.el5.i386.rpm 对应 name-version-.release.arch.rpm 对应 bind-主版本号XX.次版本号YY.修正号ZZ-release.arch.rpm 源码开发者版本号 XX:重大改变时才修改 YY:当某个子功能发生重大改变时才修改 ZZ:修正了部分bug或调整了一点点功能就修改 release号:RPM包的作者每次修改版本号就加1 |
RPM包的管理命令
1.安装卸载RPM包,语法如下
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ rpm [OPTIONS] /PATH/TO/PACKAGE [OPTIONS] -ihv:安装rpm包并以#号显示进度 --nodeps:忽略依赖关系可能会导致软件安装上不可用 --force:强制安装或卸载 --replacepkgs:重新安装替换原有安装 --oldpackage:安装低版本的rpm包 -v:显示详细信息 -vv:显示更详细的信息 -e PACKAGE:卸载rpm包 -Uvh:如果安装有老版本的包可升级否则安装 -Fvh:如果安装有老版本的就升级 |
2)查看RPM包信息
1 2 3 4 5 6 7 8 9 10 11 |
$ rpm [OPTIONS] PACKAGE_NAME [OPTIONS] -q:查询软件包是否安装 -qa:查询系统上安装的所有rpm包 -qi:查询rpm包信息 -ql:查询rpm包安装的所有路径列表 -qc:查询指定rpm包安装的配置文件 -qd:查询指定rpm包安装的帮助文件 -qf /PATH/TO/somefile:根据rpm安装的路径查看rpm包名 -q -scripts PACKAGE_NAME:查询指定包中包含的脚本(安装前后;卸载前后) |
3)查看尚未安装的RPM包信息
1 2 3 4 5 |
$ rpm [options] PACKAGE_NAME [OPTIONS] -qpi:查看尚未安装的rpm包详细信息 -qpl:查询尚未安装的rpm如果安装后的路径有哪些 |
4) 验证RedHat的RPM软件包可靠性和完整性
1 2 3 4 5 |
$ rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release #先导入RedHat提供的秘钥 $ rpm –K PACKAGE_NAME #验证RedHat的RPM软件包 PS:其中dsa,gpg都是验证来源合法性;使用—nosignature略过此项。其中sha1,md5都是验证数据完整性;使用—nodigest略过此项 |
RPM数据库重建
一般当RPM包或者YUM使用出现错误时就需要对rpm数据进行重建了,下面提供rpm数据库重建的命令。另外提供一个使用案例,yum报错rpmdb open failed处理方法。
1 2 3 4 |
$ rpm –-rebuliddb #重建数据库 $ rpm --initdb #初始化数据库,没有就建立有就不用建立 |