“Linux包管理:rpm与yum”的版本间差异

来自Wikioe
跳到导航 跳到搜索
第225行: 第225行:


== RPM 命令 ==
== RPM 命令 ==
rpm命令:
<syntaxhighlight lang="bash">
rpm [options] [PACKAGE_FILE]
</syntaxhighlight>
[options]:
# 安装:-i,--install
# 升级:-U,--update,-F,--freshen
# 卸载:-e,--erase
# 查询:-q,--query
# 校验:-V,--verify
# 数据库维护:--builddb,--initdb
{| class="wikitable"
! 命令 !! 说明
|-
! colspan="2"| 安装
|-
| <syntaxhighlight lang="bash">
rpm {-i|--install} [options] PACKAGE_FILE
</syntaxhighlight>
| 安装、升级首先要到网上下载对应的rpm包
* 如果想安装多个用空格间隔然后接上要安装的rpm包即可,同时也支持通过网址的资源来安装
[options]:
# -v:显示指令执行过程;
# -h,-hash:显示指令的进度;
# --test:不安装,只是检查与报告该软件潜在的依赖冲突;
# --nodeps:忽略依赖关系安装;
# --replacepkgs:重新安装,通常用于在程序出错后重新安装程序;
# --nosignature:不检查包签名信息,即不检查来源的合法性;
# --nodigest:不检查包的完整性;
|-
! colspan="2"| 升级
|-
| <syntaxhighlight lang="bash">
rpm {-U|--upgrade} [options] PACKAGE_FILE
rpm {-F|--freshen} [options] PACKAGE_FILE
</syntaxhighlight>
|
* upgrade:更新软件,若系统中没有该软件则进行安装
* freshen:更新系统已安装的某个软件
[options]:
# --oldpackage:降级安装;
|-
! colspan="2"| 卸载
|-
| <syntaxhighlight lang="bash">
rpm {-e|--erase} [options] PACKAGE_NAME
</syntaxhighlight>
| erase options:
# --nodeps:忽略依赖关系卸载;
# --allmatches:卸载所有匹配指定名称的程序包;
# --test:测试卸载,不是真实的卸载;
|-
! colspan="2"| 查询
|-
| <syntaxhighlight lang="bash">
rpm {-q|--query} [select-options] [query-options]
</syntaxhighlight>
| rpm命令的查询动作是通过查询/var/lib/rpm的数据库来进行显示。
[select-options]:
# PACKAGE_NAME:查询是否已安装指定的RPM包;
# -a,--all:查询所有已经安装的RPM包;
# -f FILE:查询指定的文件由哪个程序包安装生成;
# -p,--package PACKAGE_FILE:对未安装的程序包执行查询操作;
# --whatprovides CAPABILITY:查询指定的功能由哪些程序包提供;
# --whatrequires CAPABILITY:查询需要安装指定功能才能正常运行的程序包;
[query-options]:
# --changelog:查询rpm包的修改日志;
# -l,--list:查询程序安装所产生的所有文件列表;
# -i,--info:查询程序包相关的信息,如版本号,大小,所属包组等;
# -c,--configfiles:查询知道你个的程序提供的配置文件;
# -d,--docfiles:查询指定的程序包所提供的帮助文件;
# --provides:列出指定的程序包所提供的所有功能;
# -R,--requires:查询指定的程序包的依赖关系;
# --scripts:查询程序包自带的脚本信息;
|-
! colspan="2"| 校验
|-
| <syntaxhighlight lang="bash">
rpm {-V|--verify} [select-options] [verify-options]
</syntaxhighlight>
| rpm包的检验后的输出类似如下:
<syntaxhighlight lang="bash">SM5DLUGT c /etc/profile.d/vim.sh</syntaxhighlight>
其中“SM5DLUGT ”:
# S:对应文件大小不一致
# M:对应的文件类型或权限不一致;
# 5:文件对应的MD5值不一致;
# D:设备的major/minor码不匹配;
# L:文件符号链接不一致;
# U:表示文件的所有者不一致。
# G:表示文件的所属组不一致。
# T:表示文件的修改时间不一致;
# c:只有在文件是配置文件的时候才会出现该标识;
|-
! colspan="2"| 维护(重建)
|-
| <syntaxhighlight lang="bash">
rpm {--initdb|--rebuilddb}
</syntaxhighlight>
| 重建rpm的数据库(/var/lib/rpm)
# --initdb:初始化数据库,
#: 当rpm不存在任何数据库时,可初始化创建一个新的数据库;
#: 当存在一个数据库时,不执行任何操作;
# --rebuilddb:重新构建,通过读取当前系统上的所有已安装过的程序包进行数据库的重建;
|}
=== 示例 ===
<syntaxhighlight lang="bash">
# 安装RPM包
rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
# 升级RPM包
rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm
# 卸载RPM包
rpm -e vim-enhanced-7.4.160-2.el7.x86_64
# 查询RPM包
rpm -q zsh
# 查询程序包安装完后生成的所有配置文件
rpm -qc zsh
</syntaxhighlight>
=== rpm包的验证 ===
【???】<br/>
RPM程序包的验证有两种,一种是包来源的合法性验证,另一种是包的完整性验证。<br/>
这两种验证分别依赖于制作者的数字签名和程序特征码完成。数字签名是包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。<br/>
验证过程:
* 前提:必须有可靠机制获取到包制作者的公钥;
# 使用制作者的公钥解密加密的特征码,能解密则意味着来源合法。
# 对文件进行相应的完整性校验工具MD5|SHA-1 等得到特征码对比制作者提供的加密特征码,一致则认为包完整。
对于centos发行版来说,通过下面命令可以获取并导入信任的包制作者的密钥:
<syntaxhighlight lang="bash">
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
</syntaxhighlight>


== YUM 命令 ==
== YUM 命令 ==

2020年10月15日 (四) 22:05的版本


RPM

RPM 即“RedHat Package Manager”,由RedHat公司开发并被广大Linux发行版所应用(如:Fedora,CentOS,SuSE等)。
特点:

  • 需要安装的软件已经编译过,打包成RPM机制的安装包(.rpm),并通过里头默认的数据库记录这个软件安装时需要的依赖软件;
  • 安装时,RPM会根据安装包里面的依赖关系,查询系统中是否满足相应的条件,如果满足则安装,否则会报错。
  • 安装后,RPM会把该软件的信息写入到主机RPM的数据库中,以便将来的查询、验证、升级和卸载等操作。

缺点:

  • 软件包安装的环境必须与打包时的环境一致或相当
  • 必须安装了软件的依赖软件
  • 卸载时,最底层的软件不能先移除,否则可能造成整个系统不能用

为了解决RPM属性依赖的问题,可以使用YUM进行操作。

原理

RPM安装原理图.png

包命名规则

“软件名称-版本号-发布次数.适合linux系统.硬件平台.rpm”
RPM包命名规则.png

  • rpm 操作未安装的软件包使用的是包全名,如“ftp-0.17-74.fc27.i686.rpm”;
  • rpm 操作已安装的软件使用的是包名,如“ftp”;

安装路径

RPM包文件默认安装位置

路径 说明
/etc/ 配置文件默认安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 所依赖的函数库文件保存位置
/usr/share/doc/ 软件帮助文档,使用手册保存位置
/usr/share/man/ 软件手册,man page档案保存位置

yum

YUM 即 “Yellow dog Updater, Modified”,基于 RPM 包管理的前端工具,YUM 可以看作是CS架构的软件,能够从指定的服务器自动下载 RPM 包并且安装,并自动处理依赖性关系,一次安装所有依赖的软体包。

  • YUM的存在很好的解决了RPM的属性依赖问题。提供了查找、安装、删除某一个、一组甚至全部软件包的命令。
  • YUM 通过依赖rpm软件包管理器, 实现了rpm软件包管理器在功能上的扩展, 因此YUM是不能脱离rpm而独立运行的。

特点:

  • 可以同时配置多个资源库(Repository)
  • 简洁的配置文件(/etc/yum.conf)
  • 自动解决增加或删除rpm包时遇到的依赖性问题
  • 使用方便
  • 保持与RPM数据库的一致性

原理

YUM安装原理图.png

Server端:

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

Cilent端:

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


  • YUM是一个在线软件管理工具,所以使用YUM进行的操作大都是需要在联网的条件下才能正常使用。

配置

yum 的配置文件分为两部分:main 和 repository

  1. main 部分定义了全局配置选项,整个yum 配置文件应该只有一个main。常位于/etc/yum.conf 中。
  2. repository 部分定义了每个源/服务器的具体配置,可以有一到多个。常位于/etc/yum.repo.d 目录下的各文件中。
  • yum.conf 文件一般位于/etc目录下,一般其中只包含main部分的配置选项。
  • /etc/yum.repos.d/xxx.repoyum 中配置合适的站点镜像,以保证yum源的正常使用。

main

yum.conf 文件一般位于/etc目录下,一般其中只包含main部分的配置选项。

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release


#  This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
#  It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
exclude=httpd nginx php mysql mairadb python-psutil python2-psutil
配置 说明
cachedir yum 缓存的目录,yum在此存储下载的rpm包和数据库,默认设置为/var/cache/yum
keepcache 安装完成后是否保留软件包,0为不保留(默认为0),1为保留
debuglevel Debug信息输出等级,范围为0-10,缺省为2
logfile yum日志文件位置。用户可以到日志文件去查询过去所做的更新
pkgpolicy 包的策略:如果设置了多个repository时,若同一软件在不同的repository中同时存在,yum应该安装哪一个
  1. newest:安装最新的那个版本
  2. last:将服务器id 以字母表排序,并选择最后的那个服务器上的软件安装

一般用newest

distroverpkg 指定一个软件包,yum会根据这个包判断你的发行版本,默认是redhat-release
tolerant 是否容忍命令行发生与软件包有关的错误
  1. 0:默认,显示错误信息
  2. 1:不出现错误信息
exactarch 有1和0两个选项,设置为1(默认),则yum只会安装和系统架构匹配的软件包
retries 网络连接发生错误后的重试次数,如果设为0,则会无限重试。默认值为6.
obsoletes 这是一个update的参数,简单的说就是相当于upgrade,允许更新陈旧的RPM包
plugins 是否启用插件,默认1为允许,0表示不允许

我们一般会用yum-fastestmirror这个插件

bugtracker_url
metadata_expire
installonly_limit
exclude
gpgcheck 是否是否进行gpg(GNU Private Guard) 校验,以确定rpm 包的来源是有效和安全的。0(默认,否)1(是)

repository

所有repository 服务器设置都应该遵循如下格式:

[serverid]
name=Some name for this server
baseurl=url://path/to/repository/
配置 说明
[serverid] 是用于区别各个不同的repository,必须有一个独一无二的名称;
name 对repository 的描述,支持像$releasever $basearch这样的变量;
baseurl 服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。
  1. baseurl后可以跟多个url,但baseurl只能有一个,格式:
    baseurl=url://server1/path/to/repository/
         url://server2/path/to/repository/
         url://server3/path/to/repository/
    
  2. 其中url 支持的协议有 http:// ftp:// file:// 三种
  3. url 指向的目录必须是这个repository header 目录的上一级,它也支持$releasever、$basearch这样的变量。
enable 启动这个容器,默认值也为1。关闭这个容器可以设置enable=0。
mirrorlist 列出这个容器可以使用的镜像站点,如果不想使用可以批注掉这一行。
failovermethod 有多个url可供选择时,yum选择的次序(roundrobin:随机选择;priority:默认,按url配置依次选择)
gpgcheck 指定是否需要查阅RPM文件内的数字证书。
gpgkey 数字证书的公钥文件所在位置,使用默认值即可。
  • 其中gpgcheck,exclude 的含义和[main] 部分相同,但只对此服务器起作用。


查看yum配置文件,如“vi /etc/yum.repos.d/CenOS-Base.repo”:
Yum配置文件.png

容器

容器就是指Server端存放程序包的repository,包括centosplus、extras、fasttrack、os、updates等容器。最重要的一个目录就是那个“repodata”,该目录是分析RPM软件后所产生的软件依赖数据放置处。【???没看到】

查询yum使用的容器有哪些:

yum repolist all

Yum使用的容器.png

  • 只有当最右边的status为enabled该容器才算激活
  • /etc/yum.repos.d/ 里面会有多个配置文件(.repo),yum会从里面逐个查找,所以文件里的容器名称不能有重复。

RPM 命令

rpm命令:

rpm [options] [PACKAGE_FILE]

[options]:

  1. 安装:-i,--install
  2. 升级:-U,--update,-F,--freshen
  3. 卸载:-e,--erase
  4. 查询:-q,--query
  5. 校验:-V,--verify
  6. 数据库维护:--builddb,--initdb
命令 说明
安装
rpm {-i|--install} [options] PACKAGE_FILE
安装、升级首先要到网上下载对应的rpm包
  • 如果想安装多个用空格间隔然后接上要安装的rpm包即可,同时也支持通过网址的资源来安装

[options]:

  1. -v:显示指令执行过程;
  2. -h,-hash:显示指令的进度;
  3. --test:不安装,只是检查与报告该软件潜在的依赖冲突;
  4. --nodeps:忽略依赖关系安装;
  5. --replacepkgs:重新安装,通常用于在程序出错后重新安装程序;
  6. --nosignature:不检查包签名信息,即不检查来源的合法性;
  7. --nodigest:不检查包的完整性;
升级
rpm {-U|--upgrade} [options] PACKAGE_FILE
rpm {-F|--freshen} [options] PACKAGE_FILE
  • upgrade:更新软件,若系统中没有该软件则进行安装
  • freshen:更新系统已安装的某个软件

[options]:

  1. --oldpackage:降级安装;
卸载
rpm {-e|--erase} [options] PACKAGE_NAME
erase options:
  1. --nodeps:忽略依赖关系卸载;
  2. --allmatches:卸载所有匹配指定名称的程序包;
  3. --test:测试卸载,不是真实的卸载;
查询
rpm {-q|--query} [select-options] [query-options]
rpm命令的查询动作是通过查询/var/lib/rpm的数据库来进行显示。

[select-options]:

  1. PACKAGE_NAME:查询是否已安装指定的RPM包;
  2. -a,--all:查询所有已经安装的RPM包;
  3. -f FILE:查询指定的文件由哪个程序包安装生成;
  4. -p,--package PACKAGE_FILE:对未安装的程序包执行查询操作;
  5. --whatprovides CAPABILITY:查询指定的功能由哪些程序包提供;
  6. --whatrequires CAPABILITY:查询需要安装指定功能才能正常运行的程序包;

[query-options]:

  1. --changelog:查询rpm包的修改日志;
  2. -l,--list:查询程序安装所产生的所有文件列表;
  3. -i,--info:查询程序包相关的信息,如版本号,大小,所属包组等;
  4. -c,--configfiles:查询知道你个的程序提供的配置文件;
  5. -d,--docfiles:查询指定的程序包所提供的帮助文件;
  6. --provides:列出指定的程序包所提供的所有功能;
  7. -R,--requires:查询指定的程序包的依赖关系;
  8. --scripts:查询程序包自带的脚本信息;
校验
rpm {-V|--verify} [select-options] [verify-options]
rpm包的检验后的输出类似如下:
SM5DLUGT c /etc/profile.d/vim.sh

其中“SM5DLUGT ”:

  1. S:对应文件大小不一致
  2. M:对应的文件类型或权限不一致;
  3. 5:文件对应的MD5值不一致;
  4. D:设备的major/minor码不匹配;
  5. L:文件符号链接不一致;
  6. U:表示文件的所有者不一致。
  7. G:表示文件的所属组不一致。
  8. T:表示文件的修改时间不一致;
  9. c:只有在文件是配置文件的时候才会出现该标识;
维护(重建)
rpm {--initdb|--rebuilddb}
重建rpm的数据库(/var/lib/rpm)
  1. --initdb:初始化数据库,
    当rpm不存在任何数据库时,可初始化创建一个新的数据库;
    当存在一个数据库时,不执行任何操作;
  2. --rebuilddb:重新构建,通过读取当前系统上的所有已安装过的程序包进行数据库的重建;

示例

# 安装RPM包
rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm 
# 升级RPM包
rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm 
# 卸载RPM包
rpm -e vim-enhanced-7.4.160-2.el7.x86_64
# 查询RPM包
rpm -q zsh
# 查询程序包安装完后生成的所有配置文件
rpm -qc zsh

rpm包的验证

【???】
RPM程序包的验证有两种,一种是包来源的合法性验证,另一种是包的完整性验证。
这两种验证分别依赖于制作者的数字签名和程序特征码完成。数字签名是包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。
验证过程:

  • 前提:必须有可靠机制获取到包制作者的公钥;
  1. 使用制作者的公钥解密加密的特征码,能解密则意味着来源合法。
  2. 对文件进行相应的完整性校验工具MD5|SHA-1 等得到特征码对比制作者提供的加密特征码,一致则认为包完整。

对于centos发行版来说,通过下面命令可以获取并导入信任的包制作者的密钥:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

YUM 命令