RPM简介:
其设计理念最初是“借鉴”Ddbian的DPT打包成红帽自己的包管理器RedHat Package Manager即
RPM,但是其后来者居上,现在RPM已经成为了世界的包管理标准,所以改名为RPM is Package Manager
SUSE由于一直没有属于自己的包管理器也使用RPM,但是SUSE有自己的理念,RedHat发现SUSE的理念更好
然后将其收录其中,使得其更加强大。
RPM功能:
将原本需要自己编译的源代码先编译好,然后打包成RPM包,并将其拆包成主包与各种依赖于主包的支包,以方便用户的安装与功能的选择。并且会在本地建一个RPM数据库,里面有所有已经安装的软件的各种信息,包括名字版本、功能说明、依赖关系、安装路径等等,来方便用户的查询。
RPM缺点:
虽然RPM大大方便了用户,但是其并没有解决源码安装时候的依赖关系,这就要求用户安装某个
RPM时候其安装环境必须满足相应的条件,而且还要自己解决各种软件包之间的依赖关系。而且用户还必须先取得其要安装的RPM包。
RPM用法:
既然是软件包管理工具,那么就必须拥有安装、升级、卸载、查询、校验、建立软件数据库的功能。
使用格式为:rpm 选项 包文件
选项:
-i:安装
-U和-F:升级
-e:卸载
-q:查询
-V:校验
--builddb和--initdb:数据库维护
安装:
rpm -ivh 包文件
-v:显示详细信息
-vv;显示更加详细的信息
-h:显示进度条
[root@bogon Packages]# rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-14.el7 ################################# [100%]
--test:只是检测安装,并不真的安装,可以检查依赖关系和冲突信息。
[root@bogon Packages]# rpm -ivh --test php-common-5.4.16-36.el7_1.x86_64.rpm error: Failed dependencies: libzip.so.2()(64bit) is needed by php-common-5.4.16-36.el7_1.x86_64
--nodeps:忽略依赖关系,不建议这么做,除非你自己很清楚不会出错。
[root@bogon Packages]# rpm -ivh --nodeps php-common-5.4.16-36.el7_1.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:php-common-5.4.16-36.el7_1 ################################# [100%]
--replacepkgs:重新安装,但是其不会替换原包的配置文件。
]# vim /etc/zshrc 1 # 2 # /etc/zshrc is sourced in interactive shells. It 3 # should contain commands to set up aliases, functions, 1 # 2 # should contain commands to set up aliases, functions, [root@bogon Packages]# rpm -ivh --replacepkgs zsh-5.0.2-14.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-14.el7 ################################# [100%] [root@bogon Packages]# vim /etc/zshrc 1 # 2 # should contain commands to set up aliases, functions,
这时候一般需要删除其配置文件再重新安装
[root@bogon Packages]# rm -rf /etc/zshrc [root@bogon Packages]# rpm -ivh --replacepkgs zsh-5.0.2-14.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-14.el7 ################################# [100%] [root@bogon Packages]# vim /etc/zshrc 1 # 2 # /etc/zshrc is sourced in interactive shells. It 3 # should contain commands to set up aliases, functions,
--nosignature:不检查包签名信息即不检查来源合法性
--nogigest:不检查包的完整性
[root@bogon Packages]# rpm -ivh --replacepkgs --nosignature zsh-5.0.2-14.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-14.el7 ################################# [100%] [root@bogon Packages]# rpm -ivh --replacepkgs --nodigest zsh-5.0.2-14.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-14.el7 ################################# [100%]
升级:rpm -Uvh或者-Fvh,前者是若程序包安装了则升级,若没安装则安装,后者只升级
--oldpackage:降级
--force:强制升级
卸载:rpm -e
--nodeps:强行卸载
--test:测试卸载
查询:rpm -q 包名
不带除了q外的任何选项表示查询当前系统上是否安装了此包
[root@bogon Packages]# rpm -q zsh zsh-5.0.2-14.el7.x86_64
-qa 后面接包名和-q一样,带任何参数表示查询已经安装的全部包。
[root@bogon Packages]# rpm -qa zsh zsh-5.0.2-14.el7.x86_64
-qf:显示指定文件由哪个包生成
[root@bogon Packages]# rpm -qf /bin/bash bash-4.2.46-19.el7.x86_64
-ql;列出指定已安装的包生成的所有文件路径
-qi:查询指定已安装包的详细信息
[root@bogon Packages]# rpm -qi zsh Name : zsh Version : 5.0.2 Release : 14.el7 Architecture: x86_64 省略。。。。。
-qc:查询已安装包生成的配置文件路径
[root@bogon Packages]# rpm -qc zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc
-qd:查询已安装包生成的文档路径
[root@bogon Packages]# rpm -qd zsh /usr/share/doc/zsh-5.0.2/BUGS /usr/share/doc/zsh-5.0.2/CONTRIBUTORS /usr/share/doc/zsh-5.0.2/FAQ /usr/share/doc/zsh-5.0.2/FEATURES 省略。。。
-q --pvovides:查询已安装包的某CAPABILITY
[root@bogon Packages]# rpm -q --provides zsh config(zsh) = 5.0.2-14.el7 zsh = 5.0.2-14.el7 zsh(x86-64) = 5.0.2-14.el7
-q --requires(-R):查询已安装包所需要(依赖)的CAPABILITY
[root@bogon Packages]# rpm -q --requires zsh /bin/sh /bin/sh /bin/sh /bin/sh /bin/zsh /sbin/install-info 省略。。。
-q --whatprovides:查询指定程序的软件包名
[root@bogon Packages]# rpm -q --whatprovides zsh zsh-5.0.2-14.el7.x86_64
-q --whaterequires:查询指定包被谁所需要(依赖)
[root@bogon Packages]# rpm -q --whatrequires zsh no package requires zsh [root@bogon Packages]# rpm -q --whatrequires gcc systemtap-devel-2.8-10.el7.x86_64 libquadmath-devel-4.8.5-4.el7.x86_64 gcc-gfortran-4.8.5-4.el7.x86_64 libtool-2.4.2-20.el7.x86_64 gcc-c++-4.8.5-4.el7.x86_64
-p:查询的是未安装包的信息,得配合别的选项使用不然没有任何意义
[root@bogon Packages]# rpm -qp php-5.4.16-36.el7_1.x86_64.rpm php-5.4.16-36.el7_1.x86_64 [root@bogon Packages]# rpm -qpi php-5.4.16-36.el7_1.x86_64.rpm Name : php Version : 5.4.16 Release : 36.el7_1 Architecture: x86_64 Install Date: (not installed) Group : Development/Languages Size : 4591798 省略、、、、
所以当然就有-qpi -qpd -qpc -qpl等等意义与-qi -qd -qc -ql一样只是前面查询的是未安装的包,后面查询的是已安装的包。
-q --scripts:查询指定包的脚本信息
[root@bogon Packages]# rpm -q --scripts zsh postinstall scriptlet (using /bin/sh): if [ ! -f /etc/shells ] ; then echo "/bin/zsh" > /etc/shells else grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells fi if [ -f /usr/share/info/zsh.info.gz ]; then # This is needed so that --excludedocs works. /sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \ 省略、、
校验:-V 也是校验已安装的包,否则加上p
[root@bogon Packages]# rpm -V zsh [root@bogon Packages]# 没有消息就是最好的消息 [root@bogon Packages]# rpm -Vp php-5.4.16-36.el7_1.x86_64.rpm Unsatisfied dependencies for php-5.4.16-36.el7_1.x86_64: httpd-mmn = 20120211x8664 is needed by php-5.4.16-36.el7_1.x86_64 php-cli(x86-64) = 5.4.16-36.el7_1 is needed by php-5.4.16-36.el7_1.x86_64 httpd is needed by php-5.4.16-36.el7_1.x86_64 missing c /etc/httpd/conf.d/php.conf missing c /etc/httpd/conf.modules.d/10-php.conf missing /usr/lib64/httpd/modules/libphp5.so missing /usr/share/httpd/icons/php.gif missing /var/lib/php/session
包合法性和完整性验证:
先获取包制作者的公钥到本地然后用rpm --import 公钥路径
对于CentOS7:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
至于其他的自行去GPG值高的地方获取
导入后安装时候会自动验证,要想手动验证
rpm -K 包文件
[root@bogon Packages]# rpm -K php-5.4.16-36.el7_1.x86_64.rpm php-5.4.16-36.el7_1.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
数据库重建:所有的查询、安装、升级、卸载都是根据数据来查询的,RPM数据库在/var/lib/rpm下。
--initdb:当前系统没有数据库时候实行初始化数据库,如果有就重新创建
--rebuilddb:重新创建,读取当前系统所有已安装的软件重新构建可以都可以用--dbpath指定路径
[root@bogon ~]# mkdir /tmp/dbrebuild [root@bogon ~]# rpm --initdb --dbpath=/tmp/dbrebuild/ [root@bogon ~]# ls /tmp/dbrebuild/ Basenames __db.002 Group Obsoletename Requirename Triggername Conflictname __db.003 Installtid Packages Sha1header __db.001 Dirnames Name Providename Sigmd5 [root@bogon ~]# ls /var/lib/rpm Basenames __db.002 Group Obsoletename Requirename Triggername Conflictname __db.003 Installtid Packages Sha1header __db.001 Dirnames Name Providename Sigmd5 [root@bogon ~]# rpm --rebuilddb --dbpath=/tmp/dbrebuild [ ~]# ls /tmp/dbrebuild/ Basenames Dirnames Installtid Obsoletename Providename Sha1header Trigg ername Conflictname Group Name Packages Requirename Sigmd5