软件管理rpm

1、软件包和包管理器

1.1、主流的程序包管理器

  • redhat:rpm文件, rpm 包管理器,rpm:Redhat Package Manager,RPM Package Manager
  • debian:deb文件, dpkg 包管理器

1.2、常见的arch

  • x86: i386, i486, i586, i686
  • x86_64: x64, x86_64, amd64
  • powerpc: ppc
  • 跟平台无关:noarch

1.3、rpm包命名方式

  • name-VERSION-release.arch.rpm
  • VERSION: major.minor.release
  • release:release.OS

1.4、包的分类

  • Application-VERSION-ARCH.rpm: 主包
  • Application-devel-VERSION-ARCH.rpm 开发子包
  • Application-utils-VERSION-ARHC.rpm 其它子包
  • Application-libs-VERSION-ARHC.rpm 其它子包

1.5、包的依赖

软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包,安装软件包时,会因为缺少依赖的包,而导致安装包失败。
解决依赖包管理工具:

  • yum:rpm包管理器的前端工具
  • dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替 yum
  • apt:deb包管理器前端工具
  • zypper:suse上的rpm前端管理工具

1.6、程序包管理器相关文件

  • 包文件组成 (每个包独有)
    • 包内的文件
    • 元数据,如:包的名称,版本,依赖性,描述等
    • 可能会有包安装或卸载时运行的脚本
  • 数据库(公共):/var/lib/rpm
    • 程序包名称及版本
    • 依赖关系
    • 功能说明
    • 包安装后生成的各文件路径及校验码信息

1.7、获取程序包的途径

#系统发版的光盘或官方网站
https://www.centos.org/download/
http://mirrors.aliyun.com
https://mirrors.huaweicloud.com/
https://mirror.tuna.tsinghua.edu.cn/
http://mirrors.sohu.com
http://mirrors.163.com
http://cdimage.ubuntu.com/releases/
http://releases.ubuntu.com

#第三方组织提供
#Fedora-EPEL:Extra Packages for Enterprise Linux
https://fedoraproject.org/wiki/EPEL
https://mirrors.aliyun.com/epel/
https://mirrors.cloud.tencent.com/epel
#其他软件官方源
#docker
#mysql
......

2、rpm 包管理器

CentOS 系统上使用rpm命令管理程序包,安装、卸载、升级、查询、校验、数据库维护。

2.1、安装

rpm {-i|--install} [install-options] PACKAGE_FILE…

-v: verbose
-vv:
-h: 以#显示程序包管理执行进度

#rpm包安装[install-options]
--test:           测试安装,但不真正执行安装,即dry run模式
--nodeps:        忽略依赖关系
--replacepkgs | replacefiles
--nosignature:    不检查来源合法性
--nodigest:      不检查包完整性
--noscripts:     不执行程序包脚本
     %pre: 安装前脚本 --nopre
     %post: 安装后脚本 --nopost
     %preun: 卸载前脚本 --nopreun
     %postun: 卸载后脚本 --nopostun

2.2、升级和降级

#rpm包升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...

upgrade:安装有旧版程序包,则"升级",如果不存在旧版程序包,则"安装"
freshen:安装有旧版程序包,则"升级", 如果不存在旧版程序包,则不执行升级操作
--oldpackage:降级
--force: 强制安装
  • 升级注意项
    • 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核
    • 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留

2.3、包查询

rpm {-q|--query} [select-options] [query-options]

[select-options]
-a:所有包
-f:查看指定的文件由哪个程序包安装生成
-p rpmfile:针对尚未安装的程序包文件做查询操作

[query-options]
--changelog:查询rpm包的changelog
-c:查询程序的配置文件
-d:查询程序的文档
-i:information
-l:查看指定的程序包安装后生成的所有文件
--scripts:程序包自带的脚本
--last 最后安装的包
--changelog 安装包的变更历史

#和CAPABILITY相关
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
--provides:列出指定程序包所提供的CAPABILITY
-R,--requires 查询指定的程序包所依赖的CAPABILITY
#查看最近安装的包
rpm -qa --last|head

2.4、包卸载

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

#当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
#强行删除rpm包,并恢复
rpm -e rpm --nodeps

#重启进入rescue模式
#mkdir /mnt/cdrom
#mount /dev/sr0 /mnt/cdrom
#rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm --root=/mnt/sysimage
#reboot

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享