引 入
rpm,是Red Hat Package Manager的缩写,也就是Red Hat的软件管理包,目前主要在Red Hat系的发行版和其他一些如SUSE,Mandriva等主流发行版中被采用。
rpm包里面主要包含可执行的二进制程序文件,相关配置文件和文档文件。当然,也会有其他的特定版本文件,来说明一个软件包的依赖关系。其实依赖关系不是Linux特有的东西,例如windows上运行3D游戏时,他可能也会提示要安装Direct 9等依赖软件,复杂的软件都难免会有依赖,很多时候这也是按功能分模块所导致。
繁多的依赖可能会给我们用rpm来管理安装软件带来极大的不便,这也是后面yum出现的一个最主要的原因,但yum其实也只就是一个rpm的前端管理工具,yum管理离不开rpm,有些时候用rpm也会比yum更便利,作为一个Linux程序员或Linux维护者,了解掌握rpm是必要的。
一、RPM包管理的用途:
支持本地对软件包进行安装,更新和卸载等操作,当然也支持网络在线的安装和更新;
通过RPM包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个软件包;
可以查询系统中的软件包是否安装以及其版本;
作为开发者可以把自己的程序打包为RPM 包发布;
软件包签名GPG和MD5的导入、验证和签名发布;
依赖性的检查,查看是否有软件包由于不兼容而扰乱了系统。
二、获取程序包的途径:
系统发行版的光盘或官方的文件服务器(或镜像站点);
http://mirrors.aliyun.com,
项目的官方站点;
第三方组织:
(a) EPEL
(b) 搜索引擎
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
三、RPM 的使用者权限:
root用户:RPM软件的安装、更新和卸载等所有操作权限;
普通用户:默认只有查询功能,其他操作需要被赋权。
四、RPM 常用命令基本学习:
通用选项:
各模式通用的选项: --quiet :仅仅输出错误信息; -v :verbose,详细信息; -vv :输出详细的调试信息。安装和升级:
安装: rpm {-i|--install} [install-options] PACKAGE_FILE ... PACKAGE_FILE 可以是本地rpm包,也可以是一个远程ftp或http的URL。 [install-options] -h:hash marks输出进度条;每个#表示2%的进度; --test:测试安装,检查并报告依赖关系及冲突消息等; --nodeps:忽略依赖关系;不建议; --replacepkgs:重新安装; --nosignature:不检查包签名信息,不检查来源合法性; --nodigest:不检查包完整性信息; 升级: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... 或 rpm {-F|--freshen} [install-options] PACKAGE_FILE ...升级基本用法跟安装差不多,不过需要注意两点:
注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
(2) 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆 盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
卸载和查询:
卸载: rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ... --allmatches:卸载所有匹配指定名称的程序包的各版本; --nodeps:忽略依赖关系,强制卸载; --test:测试卸载,并不真的卸载,一般配合-vv选项在debug的时候使用。 查询: rpm {-q|--query} [select-options] [query-options] [select-options] PACKAGE_NAME:查询已经安装过得软件包。 -a, --all:查询所有已经安装过的包. -f, --file:查询指定的文件属于哪个程序包。 -p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作。 [query-options] --changelog:查询rpm包的changlog; -c, --configfiles:查询指定的程序包提供的配置文件; -d, --docfiles:查询指定的程序包提供的文档; -l, --list:程序安装生成的所有文件列表; -i, --info:程序包相关的名字,版本,描述等; -s, --state:显示包文件的状态,有normal, not installed, 和 replaced三种状态; --scripts:查看程序包自带的脚本片断;校验: 这是一点大多数开发人员容易忽略的,但对于安全性要求严格的情况下,请务必做相关安全校验。
校验: rpm {-V|--verify} [select-options] [verify-options] 校验的出的文件类型 type : c %config 配置文件 d %doc 文档文件 g %ghost 占位文件,也就是文件内容不包含在软件包有效内容里面 l %license 许可证文件 r %readme 说明文件 文件属性: S 大小不一致 M 模式不一致(包括权限和文件类型) 5 MD5校验和不一致 D 主/次设备号不匹配 L 路径不匹配 U 属主不一致 G 属组不一致 T 修改时间不一致 P 功能不一致
图:rpm 校验结果选项细节
五、例子展示: 以sudo的这个系统管理程序为例子,来实操一下上面的常用命令:
1、查询sudo是否安装:
rpm -q sudo
2、查看未安装的sudo的相关信息:
rpm -qpi sudo-1.8.6p7-13.el7.x86_64.rpm3、安装sudo
PACKAGE_FILE为本地rpm包 rpm -ivh sudo-1.8.6p7-13.el7.x86_64.rpm PACKAGE_FILE为ftp或http的url rpm -ivh http://mirrors.aliyun.com/centos/7.1.1503/os/x86_64/Packages/sudo-1.8.6p7-13.el7.x86_64.rpm从上面可以看到有warning警告,这是没做用户来源可靠性校验所致
4、导入信任的包制作者的密钥
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7可以看到这一次没有出现warning了。6、 查看sudo提供的配置文件rpm -qc sudo7、查看配置文件/etc/sudo.conf由属于哪个程序包rpm -qf /etc/sudo.conf
8、校验sudo软件的文件数据完整性
rpm -V sudo可以看到,修改/etc/sudo.conf这个配置文件后,数据的大小,md5,修改的时间都变化了,而且改变的是一个配置文件。
9、安装sendmail,留下后文
rpm -ivh sendmail-8.14.7-4.el7.x86_64.rpm可以发现sendmail因依赖promail而安装失败,这里可以先安装promail,当然也可以用yum,你懂得。
后 记
rpm功能强大,灵活应用将是Linux运维人员的一大利器。不过由于依赖问题解决的不是很好,下一篇我们就来学习rpm的前端工具yum。
附:如对上面描述有疑问,期待与朋友您共同探讨。本人QQ:1084569767