【程序包管理】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 ...
随机推荐
- H5 ,Css实现了你的logo
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Qt实现客户端与服务器消息发送与文件传输
Qt实现客户端与服务器消息发送与文件传输需要使用到 QTcpSocket:提供套接字QTcpServer:提供基于TCP的服务端,官方文档的解释如下: This class makes it poss ...
- 安装rose遇到的问题
将rose文件夹里面的rose.rar直接解压到rose安装目录里面的common文件夹中 安装教程与问题解决连接https://blog.csdn.net/Farewell_w/article/de ...
- 老猿学5G:融合计费基于流计费的触发器Triggers
☞ ░ 前往老猿Python博文目录 ░ 一.概述 每个触发条件都是一个可计费事件.SMF中的功能体CTF在用户上网时达到一定条件就会向CHF上报流量,而CTF什么时候触发流量上报是由CTF中的触发器 ...
- 第7.16节 案例详解:Python中classmethod定义的类方法
第7.16节 案例详解:Python中classmethod定义的类方法 上节介绍了类方法定义的语法以及各种使用的场景,本节结合上节的知识具体举例说明相关内容. 一. 案例说明 本节定义的一个 ...
- 使用kali生成远控payload
kali linux中的metasploit框架是优秀的渗透框架之一,今天记载一下使用kali生成windows远控木马的过程 生成payload使用的工具是MSFVenom,我们输入msfvenom ...
- 云原生时代 给予.NET的机会
.NET诞生于与Java的竞争,微软当年被罚款20亿美元. Java绝不仅仅是一种语言,它是COM的替代者! 而COM恰恰是Windows的编程模型.而Java编程很多时候比C++编程要容易的多,更致 ...
- 从HBase底层原理解析HBASE列族不能设计太多的原因?
在之前的文章<深入探讨HBASE>中,笔者详细介绍了: HBase基础知识(包括简介.表结构).系统架构.数据存储 WAL log和HBase中LSM树的应用 HBase寻址机制 mino ...
- 题解-CF1418G Three Occurrences
题面 CF1418G Three Occurrences 给一个 \(n\) 个数的序列 \(a_i\),求每个出现过的数出现次数为 \(3\) 的子序列个数. 数据范围:\(1\le n\le 5\ ...
- gunicorn简单配置
Gunicorn配置 # -*- coding: utf-8 -*- import os from multiprocessing import cpu_count bind = "127. ...