程序包管理器
程序包管理器旨在消除手动安装和更新,这对于Linux/Unix操作系统基为有用。对于不同的Linux发行版,它们使用的程序包管理器也不尽相同,比如debian的dpt,dpkg,redhat的rpm等等。
程序包管理器将编译好的应用程序和各组成文件打包成一个或几个程序包文件,从而更方便的实现程序包的安装、升级、卸载和查询等管理操作。
每个程序包都是单独实现的,包含了自身文件清单和安装或卸载时运行的脚本,它们共用一个公共数据库用来存放程序包的名称和版本、依赖关系、功能说明、安装生成的文件位置及校验信息等等。
基于安全的考虑,一般推荐从可信任的平台上下载程序包,并且检查软件包的合法性。
- 系统发行版的光盘或官方的文件服务器,也可以从镜像站点上获取,比如国内的http://mirrors.aliyun.com等
- 项目的官方站点
- 第三方组织,EPEL和一些包搜索引擎,例如http://pkgs.org,http://rpmfind.net/,http://rpm.pbone.net。
RPM
RPM Package Manager(PRM),最初是Red Hat Package Manager,现在是一个递归的缩写。RPM最初是在1997年的时候由Erik Troan和Marc Ewing根据pms,rpp,pm的经验编写的。
RPM包命名规范
软件包的制作流程一般是源代码编译、制作成对应的二进制格式、组织成为一个或有限几个“包”文件。
软件包的命名包含了软件提供商自身的源代码版本号、rpm包的发行号以及后缀名.rpm。
源代码组成格式一般是:name-VERSION.tar.gz
- name:源代码的项目名称,例如redis
- VERSION:通常由major(主版本).minor(次版本).release(修改号)组成,例如redis-3.0.2.tar.gz,后面就是源代码的压缩方式,通常为tar.gz或tar.xz。
RPM有两种包格式,分为主包和次包,主包组成格式一般是:name-VERSION-release.arch.rpm,子包为name-function-VERSION-release.arch.rpm,其中的name
和VERSION
均采用自源代码。
- function:次包实现的功能,例如python-augeas-0.5.0-2.el7.noarch.rpm
- release.arch:rpm包的发行号,arch则代表了适用的平台,常见的有noarch(平台无关),i386,x64(amd64),ppc
CentOS系统RPM
RPM程序包管理,主要用于安装、升级、卸载、查询、校验和数据库维护(不建议使用)。
rpm [OPTIONS] [PACKAGE_FILE]
- 安装: -i,–install
- 升级: -U,–update,-F --freshen
- 卸载: -e,–erase
- 查询: -q,–query
- 校验: -V,–verfify
- 数据库维护: --rebuilddb,–initdb
GENERAL OPTIONS(共用选项)
-v
:verbose,详细信息-vv
:更详细的输出
安装
rpm {-i|–install} [install-options] PACKAGE_FILE …
[install-options]:
- -h: hash marks输出进度条;
- –test:测试安装,检查并报告依赖关系及冲突信息等;
- –nodeps:忽略依赖关系;不建议
- –replacepkgs:重新安装
- –nosignature:不检查包签名信息,不检查来源合法性
- –nodigest:不检查包完整性信息
注意:rpm可以自带脚本;
四类:–noscripts(禁止所有脚本执行)
- preinstall:安装过程开始前运行的脚本,%pre, --nopre
- postinstall:安装过程完成之后运行的脚本,%post,–nopost
- preuninstall:卸载过程真正开始执行之前的脚本,%preun,–noperun
- postuninstll:卸载过程完成之后运行的脚本,%postun,–nopostun
升级
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
- -U:升级或安装;rpm -Uvh PACKAGE_FILE…
- -F:升级;rpm -Fvh PACKAGE_FILE…
- –oldpackage:降级;
- –force:强制升级;
注意:
- 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
- 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供。
卸载
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
- –allmatches:卸载所有匹配的指定名称的程序包各个版本
- –nodeps:忽略依赖关系
- –test:测试卸载
查询
rpm {-q|–query} [select-options] [query-options]
select-options
- PACKAGE_NAME:查询指定的程序包是否已经安装及其版本;
- -a,–all:查询所有已经安装过的包;
- -f FILE:查询指定的文件由哪个程序安装包安装生成
- -p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
- –whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
- –whatrequires CAPABILITY:查询指定的CAPABILITY被哪个程序包依赖;
query-options
- –changelog:查询rpm包的changelog
- -l,–list:程序包安装生成的所有文件
- -i, --info:程序包相关的信息,版本号、大小、所属的包组,等
- -c, --configfiles:查询指定的程序包提供的配置文件
- -d, --docfiles:查询指定的程序包提供的文档
- –provides:列出指定的程序包提供的所有capability
- -R, --requires:查询指定程序包所依赖关系
- –scripts:查询指定程序包自带的脚本片段;
校验
rpm {-V|–verify} [select-options] [verify-options]
S file Size differs:文件大小改变
M Mode differs (includes permissions and file type):权限改变
5 digest (formerly MD5 sum) differs:内容改变
D Device major/minor number mismatch:主次设备号不匹配
L readLink(2) path mismatch:
U User ownership differs:属主改变
G Group ownership differs:属组
T mTime differs:最近时间戳改变
P caPabilities differ:
包来源合法性验证和完整性验证
对于CentOS发行版来说rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
来源合法性验证:通过数字签名验证
完整性验证:
- 安装此组织签名的程序时,会自动执行验证;
- 手动验证:rpm -K PACKAGE_FILE
数据库重建
rpm {–initdb|–rebuilddb} [–dbpath DIRECTORY] [–root DIRECTORY],rpm管理器数据库路径:/var/lib/rpm
- –initdb:初始化数据库,当前无任何数据库可初始化创建一个;当前有时不执行任何操作;
- –rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重建;
查询操作:通过此处的数据库进行;获取帮助:CentOS6:man rpm,CentOs7:man rpmdb