1 软件包管理器

1.1主要功能把一个软件的二进制程序,库文件,配置文件,帮助文件打包成一个文件还可以把打包好的这个文件,按照我们指定的位置将二进制程序展开到相关的路径上来
1.2 生成数据库,追踪记录所安装的每一个文件并且对实现软件包的安装,卸载,升级,查询,校验
2 rpm
2.1 rpm基本结构
rpm命令本身是个软件包,这个软件包提供了一些命令,然后rpm命令是来管理软件包的
2.2 rpm本身在管理的时候还需要提供追踪安装文件的功能,以便在以后实行卸载更重要的是还要提供查询的功能,查询包括根据软件包所安装的文件,或者是根据某个文件来查找这个文件是由哪个软件包安装所生成的,所以rpm本身有一个庞大的数据库/var/lib/rpm
2.3软件包的介绍
一个rpm包为了避免一个主包过大,一般都会做成一个或多个子包
主包(例如是:bind-9.7.1-1.i586.rpm)
子包:在主包下又加了一个子名字,版本号一样(例如:bind-libs-9.7.1-1.e15.i586.rpm、
bind-utiles-9.7.1-1.e15.i586.rpm)
2.3.1  rpm包名格式:
Name(名称)-version(版本号)-release(发行号).arch(平台架构)
bind-major(主版本号).minor(次版本号).release(修正号,-release.arch.rpm
主版本号:rpm包的功能有重大改进;次版本号:某个子功能发生重大变化;release发行号;修正了部分bug,调整了一点功能
2.4 rpm命令
2.4.1安装
rpm -h:以#显示安装进度,每个#表示2%
rpm  -v:显示详细信息
rpm -vv:显示安装更详细的过程
通常是使用命令:rpm –ivh 命令来安装软件包
--nodeps:忽略依赖关系; 会导致软件安装好后无法运行
--replacepkgs;重新安装,替换原有安装;
--replacefiles替换文件
--oldpackage降级
--force:强行安装,可以实现重装或降级;
--test:测试软件包是否可以安装
2.4.2 查询
rpm -q 软件包命令(不是跟路径):只查询指定的包(不带后面的版本信息)
例如:一个软件包是:zsh-4.2.6-6.el5.i386.rpm
rpm –q zsh
rpm -qa 查询已安装的所有包
rpm -qa | gerp "^z" 查询z开头的软件包
rpm -qi 软件包名:查询指定软件包的说明信息
例如:rpm –q zsh
rpm -ql 软件包名:查询指定包安装后生成的文件列表
例如:rpm –ql zsh
rpm -qf /path/to/somefile:查询指定的文件是由哪个rpm包安装生成的
例如:rpm -qf /etc/passwd
rpm -qc 软件包名:查询指定包安装的配置文件
例如:rpm -qc zsh
rpm -qd 软件包名;查询指定包的帮助文件
例如:rpm -qd zsh
rpm -q --scripts 软件包名:查询指定包中包含的脚本
例如:rpm -q --scripts zsh
(1)如果某rpm 包尚未安装,我们需查询其说明信息,安装以后会生成的文件
     rpm -qpi 尚未安装的软件包路径
     rpm –qpl 显示安装后会生成哪些文件
2.4.3升级rpm -Uvh /Path/to/new_package_file 如果装有老版本的,则升级,否则,则安装
 rpm -Fvh /Path/to/new_package_file 如果装有老版本就升级,否则,退出
降级:--oldpackage
rpm -ivh --oldpackage
rpm -Uvh  --oldpackage 降级
2.4.4 卸载
rpm -e PACKAGE_NAME:卸载不允许其他包依赖
--nodeps 强制卸载
2.4.5校验
rpm -V PACKAGE_NAME: 校验软件包是否被非法改变过
2.5 检验来源合法性,及软件完整性
2.5.1密钥文件
红帽安装好的linux系统中存放着一个文件,也就是红帽系列rpm包的密钥文件,这个文件是:/et/pki/rpm-gpg/RPM-GPG-KEY-redhat-release:(只能验证红帽系列的软件)
使用时需要把这个文件导入到rpm包中去,rpm命令中去
验证的命令
rpm –K  --nosignature(不验证签名)  /PATH/TO/PACKAGE_FILE
rpm –K –nodigest(只验证签名,不验证完整性)/APTH/TO/PACKAGE_FILE
把密钥文件导入到rpm包的命令是:
rpm –import /et/pki/rpm-gpg/RPM-GPG-KEY-redhat-release:导入密钥文件
dsa,gpg:验证来源合法性,也即验证签名,可以使用--nosignature.略过此项
sha1,md5:验证软件包完整性;可以使用--nodigest,略过此项
使用过程

(1)查看系统中密钥存放的文件地址 如图1所示

rpm与yum的综合性介绍与示例演示_linux

图1 查看密钥文件
 
(2)测试当没有导入时,验证效果 如图2所示

rpm与yum的综合性介绍与示例演示_yum_02

图2 验证失败(必须在验证前导入密钥文件)
(3)导入密钥文件如图3所示

rpm与yum的综合性介绍与示例演示_linux_03

图3 导入密钥文件命令
(4)再次检验rpm包如图 4所示

rpm与yum的综合性介绍与示例演示_yum_04

图4 校验成功
2.6 重建数据库
rpm --rebuildb:重建数据库(无论有没有一定会重新建立)
rpm  --initdb:初始化数据库(没有才建立,有就不用建立))
3 yum介绍
3.1 yum(Yellowdog Update Modifier)是是由红帽软件包的前端工具;手动管理rpm之间的依赖关系,它不是脱离rpm,而是在rpm上提供了一个更高的工具
3.2 yum工作分析
yum整个工作过程依赖于yum仓库;yum仓库就是我们期望用到的所有rpm包的一个场所;yum有自己的客户端,这个客户端工作时依赖于配置文件,这个文件可以是ftp,web
或者是一个指定的文件路径,也就是yum仓库的位置(rpm包的存放位置,以及元数据文件);安装一个包时yum会根据这个包的自身属性,和我们系统上已经安装的所有rpm包来分析,分析这个包是否具有依赖关系,或者是所依赖的包有多少是已经安装过的以及还有多少尚未安装,yum会自己到yum仓库去找未安装过的包,来进行同时安装。yum会自行分析所依赖关系
3.3 yum元数据文件
(1)yum仓库中的元数据文件:
primar.xml.gz:
1 所有RPM包的列表(当前yum仓库)
2  包含了依赖关系
3  每一个rpm包安装生成的文件列表
filelists.xml.gz:当前仓库中所有RPM包的所有文件列表
other.xml.gz额外信息,RPM包的修改日志
repomd.xml包含了primar.xml.gz、filelists.xml.gz、filelists.xml.gz大小时间戳和校验和(元数据)
comps-rhel5-server-core.xml:将当前这个yum仓库中的各软件包的分组关系定义在这个文件中
(2)/etc/yum.conf文件是yum 的配置文件其配置内容介绍如下
cachedir=/var/cache/yum缓存路径
keepcache=0是否保存缓存中的文件
debuglevel=2 yum安装时输出信息的级别
logfile=yum安装软件包过程即日志存放路径
distroverkg:发行版版本号的名称
 
tolernat=1 容错
exactarch=1 安装rpm包时从yum仓库中获得的版本和我们当前使用的必须要严格匹配
obsoletes=1 是否对过期的文件进行废弃
gpgcheck=1是否检查文件来源的完整性,和来源合法性
plugins=1 yum插件使用
(3)为yum定义repo文件
[Repo_id]repo 的标示名称
name=描述信息
baseurl=(仓库所在的具体的所在位置,有三种格式)

ftp://    http://     file:///

enabled=(1|0)当前这个仓库是否允许使用“1”表示使用“0”表示禁用
gpgcheck={1|0}是否使用gpg这个机制来验证软件包的合法性与完整性默认是1
gpgkey=指定gpg文件的具体路径
第一步:在/etc/yum.repos.d的目录下创建一个以.repo文件结尾的文件如图5所示

rpm与yum的综合性介绍与示例演示_yum_05

图5 创建yum仓库
第二步:编辑内容 如图6所示

rpm与yum的综合性介绍与示例演示_yum_06

图6 指定仓库所在的位置
3.4 yum命令使用格式
(1)list:列表列出当前yum仓库当中的rpm包
列表显示的信息的介绍如图7所示
第一个是软件包的名称 名称后面是软件运行平台 然后是版本号加release号 最后显示的rpm包在哪个仓库当中,如果安装了显示install

rpm与yum的综合性介绍与示例演示_rpm_07

 
图7 yum列表显示的相关内容信息 
repolist all | enabled | disabled
all:显示所有的仓库信息(可用与禁用信息也显示出来) enabled显示可用的 disabled显示禁用的   repolist 默认是功能是enabled选项
list命令支持globbing(同配符)
例如:yum list all zsh* (显示所有是zsh开头的包)
available:可用的(仓库中有但尚未安装的)
installed:已经安装的        
updates:可用的升级
clean:清理缓存[ packages | headers | metadata | dbcache | all ]
clean packages :只清理rpm包
clean headers :头部信息
clean metadata:只清理元数据文件
clean dbcache :库缓存
clean all     :清理以上所有
(2)install:安装
yum install PACKAGE_NAME –y
-y:自动回答为yes即自动选择安装具有依赖关系的rpm包 如图8、图9所示

rpm与yum的综合性介绍与示例演示_linux_08

图8安装php53-mysql

rpm与yum的综合性介绍与示例演示_linux_09

图9 yum会自动分析所依赖的库然后从指定的仓库中下载至本地进行安装
(3)update:升级
update -to:升级为指定的版本
(4)卸载:remove|erase:
卸载时这个包时依赖这个包的包也会被卸载
 
(5)查看信息
rpm -qi(info)zsh 查看信息
info查看的信息比-qi简要
provides|whatprovides:查看指定文件或特性是由哪个包安装生成的

例如:yum provides /etc/inittab(查看/etc/inittab文件是由哪个安装包安装的)

4 如何创建yum仓库分
(1)命令是:ceraterepo (提供createrepo命令的rpm包的名字也是createrepo,要使用ceraterpo命令就必须先安装这个包)如图10所示

rpm与yum的综合性介绍与示例演示_yum_10

图10 手动安装createrepo包
(2)在/etc/yum.repos.d目录下在创建一个以.repo结尾的文件如图11所示

rpm与yum的综合性介绍与示例演示_linux_11

如图11 创建cd.repo文件
(3)编辑cd.repo文件如图12所示

rpm与yum的综合性介绍与示例演示_yum_12

图12 编辑cd.repo文件指定仓库名与源位置
(3)这里先直接查看一下是否有VT 如图13所示

rpm与yum的综合性介绍与示例演示_linux_13

图13 VT虽存在但是有缺失文件需要手动安装一下
(4)创建yum源,缺失的文件会自动安装如图14所示

rpm与yum的综合性介绍与示例演示_linux_14

图14 手动创建yum源 
 
(5)查看/yum/VT源的内容如图15所示

rpm与yum的综合性介绍与示例演示_rpm_15

图15 查看/yum/VT内容
(6)再次查看repo列表 如图16所示

rpm与yum的综合性介绍与示例演示_rpm_16

图16 VT生成成功

(7)给VT 创建组的定义 如图17所示

rpm与yum的综合性介绍与示例演示_linux_17

图17 为VT添加组的定义

到这里手动创建yum库就完成了