【程序包管理】Linux程序包管理之rpm安装总结
rpm简介
rpm( Red Hat Package Manager )是一个开放的软件包管理系统。它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准。
rpm将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作
rpm维护一个所有已安装的软件包和文件的数据库,可以让用户进行功能强大的软件包查询和验证工作。
在rpm学习前我们需要知道其它一些知识点来辅助学习:RPM学习第一篇
rpm软件包的命名格式
rpm包的命名格式一般有两部分组成。
第一部分是源代码版本号。比如:
name-VERSION.tar.gz name:源代码包的名称 VERSION: major.minor.release major: 主版本号,一般程序功能有重大改变才会变动 minor: 次版本号,程序功能某个小的分支有变动,才会变动 release: 发行号,修正了某个BUG或升级了某段代码,才会变动 |
第二部分是rpm打包制作的版本
|
这样最终的软件包就构成了:
|
其中
name-VERSION仍然沿用源代码包的命名 release : 是rpm包打包制作的发行号 arch:是指明适用于哪种操作系统平台,有i386, x64(amd64), ppc, noarch等 |
获取包的方法
除了系统发行版的光盘自带的rpm软件包外,通常还需要到网上下载,下面是几个可信的获取软件包的途径
(1) 官方的文件服务器(或镜像站点)
(2) 项目的官方站点
(3) 第三方组织
(a) EPEL
(b) 搜索引擎
下载后建议先检查程序包的合法性和完整性。(4) 自己动手编译
rpm命令使用
安装:-i, --install
升级:-U, --update, -F, --freshen
卸载:-e, --erase
查询:-q, --query
验证:-V, --verify
数据库维护:--builddb, –initdb
包的来源合法性验证和完整性验证: -K , --import
No1、安装
命令格式:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
通用选项
-v : verbose ,详细信息 -vv : 更详细的信息 |
[install-options]
-h:hash marks输出进度条,每个#表示2%的进度 --test:测试安装,检查并报告依赖关系及冲突消息等 --nodeps:忽略依赖关系;不建议使用 --replacepkgs:强制重新安装已经安装的软件包 【这种安装,其配置文件可能不会安装,也有可能把原来的配置文件覆盖了】 --nosignature:不检查包签名信息,不检查来源合法性 --nodigest:不检查包完整性信息 |
注意:每一个程序安装时可能会运行脚本,做一些准备操作。rpm包可以自带脚本,这些脚本有四类(四类脚本不一定会全部带上),分别在不同的时刻被触发,分别是:
preinstall : 安装过程开始之前运行的脚本,%pre , --nopre postinstall : 安装过程完成之后运行的脚本,%post , --nopost preuninstall : 卸载过程真正开始执行之前运行的脚本,%preun, --nopreun postuninstall : 卸载过程完成之后运行的脚本,%postun , --nopostun |
常用命令:
rpm -ivh PACKAGE_FILE ...
-------------------------------------------------------------
-------------------------------------------------------------
示例:
1、测试安装:
1 [root@oldboy mnt]# rpm -ivh --test mysql-5.1.73-5.el6_6.x86_64.rpm
2 warning: mysql-5.1.73-5.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 [root@oldboy mnt]#
2、正常安装:
1 [root@oldboy mnt]# rpm -ivh python-2.6.6-64.el6.x86_64.rpm
2 warning: python-2.6.6-64.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 package python-2.6.6-64.el6.x86_64 is already installed
5 [root@oldboy mnt]#
【注意:该warning是没有对包进行合法验证】
3、测试安装,且忽略依赖关系:
1 [root@oldboy mnt]# rpm -ivh --test php-odbc-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 error: Failed dependencies:
4 libodbc.so.2()(64bit) is needed by php-odbc-5.3.3-40.el6_6.x86_64
5 php-common(x86-64) = 5.3.3-40.el6_6 is needed by php-odbc-5.3.3-40.el6_6.x86_64
6 php-pdo(x86-64) is needed by php-odbc-5.3.3-40.el6_6.x86_64
7 [root@oldboy mnt]# rpm -ivh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
8 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
9 Preparing... ########################################### [100%]
10 [root@oldboy mnt]#
11
12 rpm -ivh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
4、强制重新安装
1 [root@oldboy mnt]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm
2 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 package zsh-4.3.11-4.el6.centos.x86_64 is already installed
5 [root@oldboy mnt]# rpm -ivh --replacepkgs zsh-4.3.11-4.el6.centos.x86_64.rpm
6 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
7 Preparing... ########################################### [100%]
8 1:zsh ########################################### [100%]
9 [root@oldboy mnt]#
10
11 rpm -ivh --replacepkgs zsh-4.3.11-4.el6.centos.x86_64.rpm
5、安装时候不检查包的来源合法性
1 [root@oldboy mnt]# rpm -ivh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 [root@oldboy mnt]# rpm -ivh --test --nosignature --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
5 Preparing... ########################################### [100%]
6 [root@oldboy mnt]#
7
8 rpm -ivh --test --nosignature --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
No2、升级
命令格式:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
注意事项:
-U|--upgrade:如果没有旧版程序包,则安装程序包;如果有旧版程序包,则升级程序包 |
通用选项:
-v : verbose ,详细信息 -vv : 更详细的信息 |
[install-options]:
-h:hash marks输出进度条,每个#表示2%的进度 --test:只进行升级测试 --nodeps:忽略依赖关系;不建议使用 --nosignature:不检查包签名信息,不检查来源合法性 --oldpackage:降级,如果新版本存在很多问题,就要用到降级 【注意:-F好像不支持降级功能】 --force:强制升级,如果新版本不再为其它程序提供依赖服务,这时会报错,可用强制升级 |
注意:
(1) 内核升级可能会有若然隐患问题,所以不要对内核进行升级,如果要测试新版本内核,可用直接安装新版本内核,让与老版本并存。
(2) 如果某程序包在安装后配置文件曾做过修改,在升级时,新版本程序提供的同名配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名( FILENAME.rpmnew )后提供。
常用命令:
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--------------------------------------------------------------------------
--------------------------------------------------------------------------
示例:
1、-U和-F的区别
1 [root@oldboy mnt]# rpm -Fvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 [root@oldboy mnt]# rpm -Uvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
4 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
5 Preparing... ########################################### [100%]
6 [root@oldboy mnt]#
7
8 rpm -Fvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm / rpm -Uvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
2、当老版本存在,升级"老版本"
1 [root@oldboy mnt]# rpm -q zsh
2 zsh-4.3.11-4.el6.centos.x86_64
3 [root@oldboy mnt]# rpm -Uvh --nodeps zsh-5.0.2-28.el7.x86_64.rpm
4 warning: zsh-5.0.2-28.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
5 Preparing... ########################################### [100%]
6 1:zsh ########################################### [100%]
7 [root@oldboy mnt]#
8
9 rpm -Uvh --nodeps zsh-5.0.2-28.el7.x86_64.rpm
3、降级新版本
1 [root@oldboy mnt]# rpm -q zsh
2 zsh-5.0.2-28.el7.x86_64
3 [root@oldboy mnt]# rpm -Fvh --oldpackage zsh-4.3.11-4.el6.centos.x86_64.rpm [-F 好像不支持降级功能]
4 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
5 [root@oldboy mnt]# rpm -Uvh --oldpackage zsh-4.3.11-4.el6.centos.x86_64.rpm
6 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
7 Preparing... ########################################### [100%]
8 1:zsh ########################################### [100%]
9 [root@oldboy mnt]#
10
11 rpm -Uvh --oldpackage zsh-4.3.11-4.el6.centos.x86_64.rpm
No3、卸载
命令格式:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
注意:这里的PACKAGE NAME 指的是包名,不是包的全名。
选项:
--allmatches:卸载所有匹配指定名称的程序包的各版本,即删除系统里有同一程序的多个安装版本 --nodeps:忽略依赖关系 --test:测试卸载,dry run模式 --noscripts: |
---------------------------------------------------------
---------------------------------------------------------
示例:
1、卸载包
1 [root@oldboy mnt]# rpm -q zsh
2 zsh-5.0.2-28.el7.x86_64
3 [root@oldboy mnt]# rpm -e zsh-5.0.2-28.el7.x86_64
4 [root@oldboy mnt]# rpm -q zsh
5 package zsh is not installed
6 [root@oldboy mnt]#
7
8 rpm -e zsh-5.0.2-28.el7.x86_64
四、查询
命令格式:
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包的changlog,注意非源码包的历史修订 -l, --list:程序安装生成的所有文件列表 -i, --info:程序包相关的信息,版本号、大小、所属的包组,等 -c, --configfiles:查询指定的程序包提供的配置文件 -d, --docfiles:查询指定的程序包提供的文档 --provides:列出指定的程序包提供的所有CAPABILITY -R, --requires:查询指定的程序包所依赖的CAPABILITY --scripts:查看程序包自带的脚本片断 |
常见组合用法:
查询已安装包的信息【后直接接包名就可实现】 -qi PACKAGE //查询程序包information -qf FILE //查询文件由哪个程序包生成 -qc PACKAGE //查询程序包的配置文件 -ql PACKAGE //查询程序包生成的文件列表 -qd PACKAGE //查询程序包安装后生成的文档 查询为安装包的信息【后接包的全名】 -qpi PACKAGE_FILE //查询未安装程序包的information -qpl PACKAGE_FILE //查询未安装程序包将要生成的文件列表 -qpc PACKAGE_FILE, ... //查询未安装程序包将要提供的配置文件 |
示例:
1、查询bash软件包提供的所有CAPABILITY 【需要理解】
1 [root@oldboy mnt]# rpm -q --provides bash
2 config(bash) = 4.1.2-33.el6
3 bash = 4.1.2-33.el6
4 bash(x86-64) = 4.1.2-33.el6
5 [root@oldboy mnt]# rpm -q --provides mysql
6 mysql = 5.1.73-5.el6_6
7 mysql(x86-64) = 5.1.73-5.el6_6
8 [root@oldboy mnt]# rpm -q --provides zsh
9 config(zsh) = 5.0.2-28.el7
10 zsh = 5.0.2-28.el7
11 zsh(x86-64) = 5.0.2-28.el7
12 [root@oldboy mnt]# rpm -q --whatprovides 'config(bash)'
13 bash-4.1.2-33.el6.x86_64
14 [root@oldboy mnt]# rpm -q --whatprovides 'bash(x86-64)'
15 bash-4.1.2-33.el6.x86_64
16 [root@oldboy mnt]# rpm -q --whatprovides 'bash'
17 bash-4.1.2-33.el6.x86_64
18 [root@oldboy mnt]#
2、查询sed软件包所依赖的CAPABILITY
1 [root@oldboy mnt]# rpm -qR sed
2 /bin/sh
3 /bin/sh
4 /sbin/install-info
5 /sbin/install-info
6 libc.so.6()(64bit)
7 libc.so.6(GLIBC_2.2.5)(64bit)
8 libc.so.6(GLIBC_2.3)(64bit)
9 libc.so.6(GLIBC_2.3.4)(64bit)
10 libc.so.6(GLIBC_2.4)(64bit)
11 libselinux.so.1()(64bit)
12 rpmlib(CompressedFileNames) <= 3.0.4-1
13 rpmlib(FileDigests) <= 4.6.0-1
14 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
15 rtld(GNU_HASH)
16 rpmlib(PayloadIsXz) <= 5.2-1
17 [root@oldboy mnt]#
18
19 rpm -qR sed
3、查询未安装php-common软件包的配置文件
1 [root@oldboy mnt]# rpm -qpc php-common-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-common-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 /etc/php.d/curl.ini
4 /etc/php.d/fileinfo.ini
5 /etc/php.d/json.ini
6 /etc/php.d/phar.ini
7 /etc/php.d/zip.ini
8 /etc/php.ini
9
10 rpm -qpc php-common-5.3.3-40.el6_6.x86_64.rpm
4、查询系统中安装了哪些rpm包: rpm -qa
5、查找所有安装过的包含某个字符串sql的软件包: rpm -qa | grep sql
6、查询MySQL软件包中的文件安装到那里去了:rpm -qa MySQL
7、查询XX.rpm中包含那些文件。
- 一个没有安装过的软件包,使用
rpm -qlp XX.rpm
- 一个已经安装过的软件包,还可以使用
rpm -ql XX.rpm
8、查询某个程序是哪个软件包安装的:
rpm -qf `/bin/sed` #返回软件包的全名
rpm -qif `/bin/sed` #返回软件包的有关信息
rpm -qlf `/bin/sed` #返回软件包的文件列表
五、校验
命令格式:
rpm {-V|--verify} [select-options] [verify-options]
【注意: 一般用于对软件包安装后,校验软件包所有的文件有没有发生修改。】
示例:
[root@oldboy mnt]# rpm -V zsh //没有返回任何提示,即校验通过 [root@oldboy mnt]# vim /usr/share/zsh/5.0.2/functions/send-invisible //往zsh包的配置文件添加了几个字符 [root@oldboy mnt]# rpm -V zsh S.5....T. /usr/share/zsh/5.0.2/functions/send-invisible //这次,就显示被修改过了 |
如果一切都被校验正确,屏幕上就不会显示输出。如果出现有修改,相关信息就会被显示至屏幕。输出的格式中,单用“ . ” 表示测试通过,如果是下列字符则代表某类测试失败:
5: MD5校验和 S: 文件大小 L: 符号链接 T: 文件修改时间 D: 设备 U: 用户 G: 组群 M: 模式( 包含权限和文件类型 ) ?: 不可读文件 |
六、.数据库重建 --> 仅管理员才能操作,目前还不知道怎么用??
rpm管理器数据库路径:
/var/lib/rpm/
所有的rpm查询操作都是通过此处的数据库进行的。
命令格式:
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
其中:
--initdb:初始化数据库。如果事先不存在数据库,则新建之;否则,不执行任何操作 |
No7.包来源合法性验证和完整性验证 --> 这一步需要在包安装之前进行
在上面演示的图片中,在每次安装软件包时都会有一个警告信息。软件包在打包制作时,会附加上用单向加密了的软件包自身的特征码,只有与之对应的公钥才能解密验证包的合法性并得到特征码,再利用特征码验证软件包的完整性。由于在本地没有对应的公钥所以才会出现上面的警告信息。这时需要获取公钥,公钥的获取很关键,直接关系着软件包的来源合法性。
注意: 1、在可靠站点下的程序包一般我们获取不到公钥,所以就无法进行来源合法性验证,所以最好使用系统光盘自带的rpm程序包。 2、如果是系统光盘自带的rpm程序包的话,想要进行来源合法性验正的话,直接导入公钥再验证 |
首先要获取并导入信任的包制作者的密钥,对于CentOS发行版来说:
系统在安装完成后,系统会自动复制一份公钥至/etc/pki/rpm-gpg/ 下,用命令导入公钥,如下:
1
|
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 |
还有一种就是把密钥路径指向发行版光盘
1
|
[root@localhost ~]# rpm --import /media/RPM-GPG-KEY-CentOS-7 |
接下来安装软件包时系统就可以自动验证了。
还可以在安装软件包前,手动验证:
1
|
[root@localhost ~]# rpm -K zsh-5.0.2-7.e17.x86_64.rpm |
关于包合法性验证还可以查看博客:链接地址
【程序包管理】Linux程序包管理之rpm安装总结的更多相关文章
- Apache源码包在LINUX(CENTOS6.8)中的安装(出现问题及解决)
任务:在CENT6.8系统中安装Apache(版本为:httpd-2.4.41) 前提:由于源码包必须先编译后安装,所以必须先安装编译器:gcc 理论步骤: 1.检测gcc软件包,如果不存在则进行安装 ...
- 操作系統3-內存管理(Linux內存管理)
操作系統3-內存管理(Linux系統的內存管理方法) 9.Linux系統的內存管理方法 Linux採用"按需調頁"算法,支持三層管理策略.由於Intel CPU在硬件級提供了段式存 ...
- windows程序员开发linux程序的头一个月
开发环境选择 vim,vscode,qt,visual studio都可以做linux c++开发,但是作为windows程序员,最熟悉的还是visual stuio,加上visual studio ...
- 如何实现在Windows上运行Linux程序,附示例代码
微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理, 而今天的这篇文章将会讲解如何自己 ...
- Linux程序包管理之rpm
rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...
- Linux程序包管理之yum及源代码安装
第十六章.Linux程序包管理之yum及源代码安装 目录 yum介绍 yum配置文件 yum的repo配置文件中可用的变量 yum命令的使用 使用光盘作为本地yum仓库 如何创建yum仓库 编译安装的 ...
- Linux程序包管理.md
rpm 简介 RPM包管理员(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器.RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身 ...
- Linux程序包管理rpm与yum
Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...
- Linux 程序包管理-RPM
程序简介: POSIX(Portable Openratin System)跨平台系统:不同操作系统平台的标准C库(glibc)都是遵循POSIX规范的,这样基于标准库开发程序的源代码可以夸平台编译 ...
- Linux程序包管理初步-rpm的使用
在Linux系统上,一般而言,对于程序包管理器来说分为三类: debian:dpt,dpkg; (程序包后缀.deb) rhel:rpm (程序包后缀.rpm) suse:rp ...
随机推荐
- Linux root目录空间过小,加大空间
1. 查看还有多少空间可以使用: df -h 这里可以看出来home的空间还很大,可以分配给root 2. 扩容根目录的思路如下: 将/home文件夹备份,删除/home文件系统所在的逻辑卷,增大/文 ...
- NOIP2013 解题报告
TG Day1 T3 货车运输 考虑货车的运输路径,最小边肯定是越大越好. 那就把图的最大生成树拉出来,每一辆货车在上面都有唯一确定的运输路径,否则必然会经过一条更小或相同的边. 然后倍增求路径上的最 ...
- 三. Vue组件化
1. 认识组件化 1.1 什么是组件化 人面对复杂问题的处理方式 任何一个人处理信息的逻辑能力都是有限的,所以当面对一个非常复杂的问题时我们不太可能一次性搞定一大堆的内容. 但是我们人有一种天生的能力 ...
- (在模仿中精进数据可视化05)疫情期间市值增长top25公司
本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/FefferyViz 1 简介 新冠疫情对很多实体经济带来冲击的同时,也给很多公司带来了新的增长 ...
- dubbo起停之配置注解
虽然说多种方式配置dubbo最后殊途同归实例化为dubbo的各配置对象,但是了解下注解的解析过程也能让我们清楚dubbo在spring bean的什么时候怎么样实例化一个代理对象,这点来说了解整个过程 ...
- 锐安信sslTrus与GeoTrust SSL证书的对比
当您想要为您的网站购买一款SSL证书时,是不是既想要价格便宜,又想要安全性能服务好的证书,最后又在品牌上犹豫不决?如何选择SSL证书?哪款SSL证书是最适合您的?本文将详细对比分析锐成信息平台上畅销品 ...
- 避开一部分安装问题的Burpsuite的安装教程
Burpsuite的安装教程 前言: 既然网上有很多的Burpsuite的安装教程为什么笔者还要在写这篇文章呢? 笔者发现网上的许多安装教程都存在着许许多多的问题,有时候对于一些安装细节描述不是很深, ...
- bypass disable_function
windows 1.com组件绕过 <?php$command=$_POST['a'];$wsh = new COM('WScript.shell'); // 生成一个COM对象 Shell.A ...
- Jmeter测试Websocket接口
前言 websocket是什么? WebSocket 协议在2008年诞生,2011年成为国际标准.所有浏览器都已经支持了. 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器 ...
- day7(redis的pipline使用)
1.pipeline原理 redis基本语法:https://www.cnblogs.com/xiaonq/p/7919111.html redis四篇:https://www.cnblogs.com ...