Linux程序包管理--rpm和yum的原理和基本用法

Linux中的程序包主要分为两类: 二进制可执行安装包和源代码程序文件包. 本文主要讲解使用rpm程序包管理器和yum管理器前端工具来实现对二进制可执行安装包的安装, 查询, 升级和卸载等相关操作.


Linux中在二进制可执行安装程序包安装上会涉及多个文件的操作, 操作过程就会比较复杂, 为简化该过程就使用程序安装包管理器来管理程序包的安装过程, 大大简化了程序包安装过程.

Linux根据发行版本不同, 使用不同的程序包管理器实现对程序包的管理, 在这里主要介绍两大分支:

    debian: 使用dpt管理器, 使用deb作为管理器前端工具, 程序包文件格式为deb

    redhat: 使用rpm管理器, 使用yum作为管理器前端工具, 程序包文件格式为rpm

# 注意: deb前端工具和deb格式程序包在具体环境下的区别, rpm管理器和rpm格式程序包同理.


rpm程序包制作和安装过程:

rpm包制作者将软件源码在特定硬件环境和操作系统发行版上进行编译, 将源码文件编译成为二进制可执行程序文件, 并且生成软件本身默认的数据库文件, 其中记录了安装该软件时必备的依赖软件, 将可执行程序文件和数据库文件打包生成rpm格式的安装包


rpm包命名方式

name - VERSION - ARCH . rpm 

VERSION = major . minor . release  与源码包VERSION相同

ARCH = release . [OS] . arch

release是指rpm的release, rpm进行编译释放后的版本

OS指在进行编译时操作系统的类型

arch是指编译时的硬件环境, 一般使用CPU类型指代


rpm使用者安装rpm包时, 主机中的rpm包管理软件(dpt或rpm)会根据软件包里的数据库文件查看依赖软件是否满足:

条件满足时则进行安装, 并将软件信息写入本地rpm管理软件的数据库(/var/lib/rpm目录)中, 方便后续对软件的查询,验证和升级等操作

条件不满足时则无法安装, ==> 需要使用yum来进行安装(稍后进行讨论)


rpm程序包的主要限制

1. 软件安装的环境必须与rpm包制作时的环境相同

2. 需要满足软件之间的依赖性要求


rpm程序包管理器命令rpm使用方法:

通用选项:

-v: 显示安装过程

-h: 以#形式显示安装进度


因为rpm命令使用环境较多, 在不同环境模式下有不同的语法格式

a. 安装模式

语法: rpm {-i|--install} [install-options] PACKAGE_FILE ...

作用: 用于安装程序包

install-options安装选项:

--test: 测试安装,但不真正执行安装过程;dry run模式;

--nodeps:忽略依赖关系;

--replacepkgs: 重新安装;

--nosignature: 不检查来源合法性;

--nodigest:不检查包完整性;

EX: rpm -ivh PACKAGE_FILE 以过程和进度方式显示安装程序包


b. 升级模式

语法: 

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...旧版存在则进行升级; 旧版本不存在则进行安装

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...只有已安装旧版本情况下才进行对旧版本升作用: 升级程序包

install-options升级选项:

--oldpackage:降级;

--force: 强行升级;


c. 查询模式

语法: rpm {-q|--query} [select-options] [query-options]

作用: 用于显示程序包相关信息, 查询已安装rpm包时不需要使用版本号, 查询未安装rpm包时需要使用版本号

select-options选择选项:

-a: 所有包

-f file: 查看指定的文件由哪个程序包安装生成

-p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

query-options查询选项:

--changelog:查询rpm包的changlog

-c: 查询程序的配置文件

-d: 查询程序的文档

-i: information

-l: 查看指定的程序包安装后生成的所有文件;

--scripts:程序包自带的脚本片断

-R: 查询指定的程序包所依赖的CAPABILITY;

--provides: 列出指定程序包所提供的CAPABILITY;


d. 卸载模式

语法: rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

作用: 用于卸载指定程序包

选项: 

--noreps: 忽略依赖关系进行卸载


e. 校验模式

语法: rpm {-V|--verify} [select-options] [verify-options]

作用: 用于验证程序包完整性

校验模式的输出字段意义:

S: 文件的容量大小是否改变

M: 文件的类型或文件rwx属性是否改变

5: MD5指纹码是否改变

D: 设备的主次代码是否改变

L: 链接路径是否改变

U: 文件的属主是否改变

G: 文件的属组是否改变

T: 文件的mtime是否改变

P: 功能是否发生改变

# 使用rpm安装时需要先导入密钥, 通过 rpm --import /PATH/GPGKEY 导入软件公钥, 在通过查看和比对公钥信息来验证程序包的来源合法性


以上是rpm程序包管理相关的原理和基本操作


=============================================================

yum程序包安装原理

yum作为rpm的前端管理工具, 主要实现是在安装程序包时, 通过程序包间的依赖关系, 获取得到该程序包的所有依赖性程序包, 从而实现该程序包的成功安装

# yum通过依赖rpm程序包管理器, 实现了rpm程序包管理器在功能上的扩展, 因此yum是不能脱离rpm而独立运行的

 

wKiom1XjJNXTaVCWAAHMztEg1-o462.jpg


yum功能上的实现原理

yum可以看作是CS架构的软件

Server端先对程序包进行分类后存储到不同repository容器中; 再通过收集到大量的rpm的数据库文件中程序包之间的依赖关系数据, 生成对应的依赖关系和所需文件在本地的存放位置的说明文件(.xml格式), 存放在本地的repodata目录下供Client端取用

Cilent端通过yum命令安装软件时发现缺少某些依赖性程序包, Client会根据本地的配置文件(/etc/repodata.d/SERVER.repo)找到指定的Server端, 从Server端repo目录下获取说明文件xxx.xml后存储在本地/var/cache/yum中方便以后读取, 通过xxx.xml文件查找到需要安装的依赖性程序包在Server端的存放位置, 再进入Server端yum库中的指定repository容器中获取所需程序包, 下载完成后在本地实现安装


yum Client 配置文件说明

用户可以在本地系统的/etc/yum.repos.d/目录下编辑配置文件*.repo, 用于指定yum Server, 一个文件中可以指定多个Server通过Repo_ID来进行区别, 因此同一文件中的不同Repo_ID不能重名

[Repo_ID]     # epo 仓库的唯一标识符,不要在同一文件中有重名ID
name=Description # 用于描述repo的简要信息
baseurl=ftp://|http://|file:///PATH/TO/PAKS    # Server端repodata目录所在的具体路径, 支持三种路径格式 ftp, http, file(本地路径): ftp://, http://, file:///
enabled={1|0}    # 表示是否启用该repo, 默认为关闭
gpgcheck={1|0} # 表示是否验证 rpm 包的合法性,如果启用必须填写 gpgkey 字段, 默认启用
gpgkey=ftp://|http://|file:///PATH/TO/KEY    # gpgkey文件所在的具体路径


yum程序包管理前端工具命令yum使用方法:

yum命令使用环境较多, 在不同环境模式下有不同的语法格式


a. 查询模式语法: 

yum repolist [all|enabled|disabled] 显示本地repo文件中的yum仓库信息

yum list {available|installed|updates} [glob_exp1] [...] 根据状态查询相关程序包

yum info [...]    查看程序包信息

yum provides | whatprovides feature1 [feature2] [...]    查看指定的特性或文件由哪个程序包所提供

yum deplist package1 [package2] [...]    查看指定包所依赖的capabilities


b. 安装模式语法: 

yum install package1 [package2] [...] 安装指定程序包

yum reinstall package1 [package2] [...]  重新安装指定程序包


c. 升级模式语法:

yum check-update    检查可用升级

yum update [package1] [package2] [...] 升级指定程序包

yum downgrade package1 [package2] [...] 降级指定程序包


d. 卸载模式语法:

yum remove | erase package1 [package2] [...]    卸载指定程序包


e. 清理模式语法:

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]    根据条件清理指定数据



f. 包组管理语法

yum grouplist [hidden] [groupwildcard] [...]    列出指定程序安装包组信息

yum groupinfo group1 [...]    查看指定程序安装组信息

yum groupinstall group1 [group2] [...]    安装指定的程序安装包组

yum groupupdate group1 [group2] [...]    升级指定程序安装包组

yum groupremove group1 [group2] [...]    卸载指定程序安装组


以上是yum程序包管理前端工具相关的原理和基本操作


本人水平有限, 如有理解不当的地方, 请大家给予指正, 非常感谢!


你可能感兴趣的:(linux,基础,程序包管理)