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而独立运行的
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程序包管理前端工具相关的原理和基本操作
本人水平有限, 如有理解不当的地方, 请大家给予指正, 非常感谢!