文前说明
作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。
本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。
RPM 是 Red Hat Package Manager 的缩写,本意是 Red Hat 软件包管理,是 Red Hat 贡献出来的软件包管理,在Fedora 、Redhat、Mandriva、SuSE、YellowDog 等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用。
RPM 名称规则说明
- 例如:tagsoup-1.2.1-8.el7.noarch.rpm
套件名称 |
版本信息 |
释出次数 |
适用系统 |
适用平台 |
tagsoup |
1.2.1 |
8 |
el7 |
noarch |
-
除了适合的平台、系统、副档名外,主要是以 '-' 隔开各个部分。
-
释出版本次数:由于有某些 bug 或者是安全上的顾虑,所以必须要重新设定当初打包时候的设定参数, 设定完成之后重新编译并打包成 RPM 档案。
-
i386 软件包可以在任何 x86 平台下使用,无论是 i686 还是 x86_64 的机器。
-
而 i686 的软件包一般都对 cpu 进行了优化,具有向后的兼容性,不具有向前的兼容性。
RPM 包管理的作用
- 可以安装、删除、升级和管理软件(支持在线安装和升级)。
- 通过 RPM 包可以知道包含文件,也能知道某文件所属 RPM 软件包。
- 可查询软件包是否已经安装及其版本。
- 开发者可以把程序打包为 RPM 包发布。
- 软件包签名 GPG 和 MD5 导入、验证和签名发布。
- 依赖性检查,软件包是否兼容检查等。
RPM 包的使用权限
- RPM 软件的安装、删除、更新只有 root 权限才能操作。
- 查询功能任何用户都可以操作。
- 普通用户拥有安装目录的权限,也可以进行安装。
RPM 常用参数
参数 |
说明 |
-a |
查询所有套件 |
-b <完成阶段><软件包>+ 或 -t <完成阶段><软件包>+ |
设置软件包的完成阶段,并指定软件包的文件名称 |
-c |
只列出组态配置文件,本参数需配合 "-l" 参数使用 |
-d |
只列出文本文件,本参数需配合 "-l" 参数使用 |
-e <软件包> 或 --erase <软件包> |
删除指定的软件 |
-f <文件>+ |
查询拥有指定文件的软件包 |
-h 或 --hash |
软件包安装时列出标记 |
-i |
显示软件包的相关信息 |
-i <软件包> 或 --install <软件包> |
安装指定的软件包 |
-l |
显示软件包的文件列表 |
-p <软件包>+ |
查询指定的 RPM 软件包 |
-q |
使用询问模式,当遇到任何问题时,rpm 指令会先询问用户 |
-R |
显示软件包的关联性信息 |
-s |
显示文件状态,本参数需配合 "-l" 参数使用 |
-U <软件包>或 --upgrade <软件包> |
升级指定的软件包 |
-v |
显示指令执行过程 |
-vv |
详细显示指令执行过程,便于排错。 |
RPM 资料库初始化
[root@localhost rpm]# rpm --initdb
[root@localhost rpm]# rpm --rebuilddb
命令 |
说明 |
--rebuilddb |
重建 RPM 资料库 |
--initdb |
创建一个新的 RPM 资料库 |
--quiet |
尽可能的减少输出 |
--help |
显示帮助文件 |
--version |
显示 RPM 的当前版本 |
- 系统初装时需要执行 updatedb,每隔一段时间也需要执行一次,以保持已经安装的软件库信息最新。updatedb 是 slocate 软件包所有,需要安装 slocate 软件包。
[root@localhost rpm]# updatedb
- 可以通过 locate 查询软件或文件的安装路径。
[root@localhost rpm]# locate <软件名或文件名>
RPM 软件包查询
- 命令格式:rpm {-q|--query} [select-options] [query-options]
查询已安装的软件
命令 |
说明 |
例子 |
rpm -q <软件名> |
查询系统是否安装了指定名称的软件 |
rpm -q gaim |
rpm -qa |
查询系统中所有安装的软件 |
rpm -qa |
rpm -qf <文件名> |
查询已安装的文件属于哪个软件包(需要指出文件所在绝对路径) |
rpm -qf /usr/share/pixmaps/javaws.png |
rpm -ql <软件名> |
查询已安装的软件包的安装位置 |
rpm -ql gaim |
rpm -qi <软件名> |
查询已安装的软件包的信息 |
rpm -qc gaim |
rpm -qd <软件名> |
查询已安装的软件包的文档的安装位置 |
rpm -qd gaim |
rpm -qR <软件名> |
查询已安装的软件包所依赖的软件和文件 |
rpm -qR rpm-python |
查询未安装的软件
命令 |
说明 |
例子 |
rpm -qpi <软件包名> |
查看一个软件包的用途、版本等信息 |
rpm -qpi zip-3.0-11.el7.x86_64.rpm |
rpm -qpl <软件包名> |
查看一个软件包所包含的文件 |
rpm -qpl zip-3.0-11.el7.x86_64.rpm |
rpm -qpd <软件包名> |
查看一个软件包文档所在位置 |
rpm -qpd zip-3.0-11.el7.x86_64.rpm |
rpm -qpc <软件包名> |
查看一个软件包的配置文件 |
rpm -qpc zip-3.0-11.el7.x86_64.rpm |
rpm -qpR <软件包名> |
查看一个软件包的依赖关系 |
rpm -qpR zip-3.0-11.el7.x86_64.rpm |
查询命令 - 详细选项 |
说明 |
-p (or "-'') |
查询软件包的文件 |
-f |
查询属于哪个软件包 |
-a |
查询所有安装的软件包 |
-g |
查询属于组的软件包 |
--whatprovides |
查询提供了功能的软件包 |
--whatrequires |
查询所有需要功能的软件包 |
查询命令 - 信息选项 |
说明 |
i |
显示软件包的概要信息 |
-l |
显示软件包中的文件列表 |
-c |
显示配置文件列表 |
-d |
显示文档文件列表 |
-s |
显示软件包中文件列表并显示每个文件的状态 |
--scripts |
显示安装、卸载、校验脚本 |
--queryformat (or --qf) |
以用户指定的方式显示查询信息 |
--dump |
显示每个文件的所有已校验信息 |
--provides |
显示软件包提供的功能 |
--requires (or -R) |
显示软件包所需的功能 |
查询命令 - 通用选项 |
说明 |
-v |
显示附加信息 |
-vv |
显示调试信息 |
--root |
让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下 |
--rcfile |
设置 rpmrc 文件为 |
--dbpath |
设置 RPM 资料库存所在的路径为 |
RPM 软件包安装
- 命令格式:rpm -i(or --install) [options] file1.rpm ... fileN.rpm
[root@localhost rpm]# rpm -ivh zip-3.0-11.el7.x86_64.rpm
安装命令 - 详细选项 |
说明 |
-h (或 --hash) |
安装时输出 hash 记号 ( "#'' ) |
--test |
只对安装进行测试,并不实际安装 |
--percent |
以百分比的形式输出安装的进度 |
--excludedocs |
不安装软件包中的文档文件 |
--includedocs |
安装文档 |
--replacepkgs |
强制重新安装已经安装的软件包 |
--replacefiles |
替换属于其它软件包的文件 |
--force |
忽略软件包及文件的冲突 |
--noscripts |
不运行预安装和后安装脚本 |
--prefix |
将软件包安装到指定的路径下 |
--ignorearch |
不校验软件包的结构 |
--ignoreos |
不检查软件包运行的操作系统 |
--nodeps |
不检查依赖性关系 |
--ftpproxy |
用作为 FTP 代理 |
--ftpport |
指定 FTP 的端口号为 |
安装命令 - 通用选项 |
说明 |
-v |
显示附加信息 |
-vv |
显示调试信息 |
--root |
让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下 |
--rcfile |
设置 rpmrc 文件为 |
--dbpath |
设置 RPM 资料库存所在的路径为 |
RPM 软件包网络安装和查询
[root@localhost rpm]# rpm -qpi http://mirrors.kernel.org/fedora/core/4/i386/os/ Fedora/RPMS/gaim-1.3.0-1.fc4.i386.rpm
[root@localhost rpm]# rpm -ivh http://mirrors.kernel.org/fedora/core/4/i386/os/ Fedora/RPMS/gaim-1.3.0-1.fc4.i386.rpm
软件包升级
- 命令格式:rpm -U(or --upgrade) [options] file1.rpm ... fileN.rpm
[root@localhost rpm]# rpm -Uvh zip-3.0-11.el7.x86_64.rpm
升级命令 - 详细选项 |
说明 |
-h (or --hash) |
升级时输出 hash 记号 ( "#'' ) |
--oldpackage |
允许 "升级" 到一个老版本 |
--test |
只进行升级测试 |
--excludedocs |
不安装软件包中的文档文件 |
--includedocs |
安装文档 |
--replacepkgs |
强制重新安装已经安装的软件包 |
--replacefiles |
替换属于其它软件包的文件 |
--force |
忽略软件包及文件的冲突 |
--percent |
以百分比的形式输出升级的进度 |
--noscripts |
不运行预安装和后安装脚本 |
--prefix |
将软件包安装到指定的路径下 |
--ignorearch |
不校验软件包的结构 |
--ignoreos |
不检查软件包运行的操作系统 |
--nodeps |
不检查依赖性关系 |
--ftpproxy |
用作为 FTP 代理 |
--ftpport |
指定 FTP 的端口号为 |
升级命令 - 通用选项 |
说明 |
-v |
显示附加信息 |
-vv |
显示调试信息 |
--root |
让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下 |
--rcfile |
设置 rpmrc 文件为 |
--dbpath |
设置 RPM 资料库存所在的路径为 |
软件包删除
- 命令格式:rpm -e(or --erase) [options] pkg1 ... pkgN
[root@localhost rpm]# rpm -e zip
删除命令 - 详细选项 |
说明 |
--test |
只执行删除的测试 |
--noscripts |
不运行预安装和后安装脚本程序 |
--nodeps |
不检查依赖性 |
删除命令 - 通用选项 |
说明 |
-vv |
显示调试信息 |
--root |
让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下 |
--rcfile |
设置 rpmrc 文件为 |
--dbpath |
设置 RPM 资料库存所在的路径为 |
RPM 软件包校验
已安装软件包校验
- 命令格式: rpm -V(or --verify, or -y) [options]
校验命令 - 软件包选项 |
说明 |
-p |
校验包文件 |
-f |
校验所属的软件包 |
-a |
校验所有的软件包 |
-g |
校验所有属于组的软件包 |
校验命令 - 详细选项 |
说明 |
--noscripts |
不运行校验脚本 |
--nodeps |
不校验依赖性 |
--nofiles |
不校验文件属性 |
校验命令 - 通用选项 |
说明 |
-v |
显示附加信息 |
-vv |
显示调试信息 |
--root |
让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下 |
--rcfile |
设置 rpmrc 文件为 |
--dbpath |
设置 RPM 资料库存所在的路径为 |
未安装软件包文件校验
命令格式: rpm -K(or --checksig) [options] file1.rpm ... fileN.rpm
校验命令 - 详细选项 |
说明 |
--nopgp |
不校验 PGP 签名 |
校验命令 - 通用选项 |
说明 |
-v |
显示附加信息 |
-vv |
显示调试信息 |
--rcfile |
设置 rpmrc 文件为 |
RPM 软件包导入签名
[root@localhost rpm]# rpm --import RPM-GPG-KEY
[root@localhost rpm]# rpm --import RPM-GPG-KEY-fedora
RPM 软件包文件抽取
[root@localhost rpm]# rpm2cpio gaim-1.3.0-1.fc4.i386.rpm |cpio -div
RPM 的配置文件
[root@localhost rpm]# locate rpmrc
/usr/lib/rpm/rpmrc
/usr/lib/rpm/redhat/rpmrc
- 可以通过 rpm --showrc 查看配置文件内容
SRPM 的安装
格式 |
说明 |
RPM(.rpm) |
已经经过编译且包装完成的 rpm 档案。 |
SRPM(.src.rpm) |
包含未编译的原始码资讯。 |
- 执行 rpm -i your-package.src.rpm
- cd /usr/src/redhat/SPECS
- rpmbuild -bp your-package.specs 一个和软件包同名的 specs 文件
- cd /usr/src/redhat/BUILD/your-package/ 一个和软件包同名的目录
- ./configure 这一步和编译普通的源码软件一样,可以加上参数
- make
- make install
- 执行 rpm -i you-package.src.rpm
- cd /usr/src/redhat/SPECS (前两步和方法一相同)
- rpmbuild -bb your-package.specs 一个和软件包同名的 specs 文件
- 在 /usr/src/redhat/RPM/<平台>/(根据具体,可以是 i686、noarch、i386 等等)下,有一个新的 rpm 包这个是编译好的二进制文件,可以直接执行 rpm -i new-package.rpm
执行 rpmbuild -bb your-package.specs 出现错误 Error: Architecture is not included : i386,此错误表示该软件包不支持 i386 平台(默认的 rpmbuild 为 i386 平台),需指定到别的平台。
rpmbuild –bb –target=i686 your-package.specs
网友评论