首页 > 代码库 > RPM学习笔记

RPM学习笔记

前言:

在操作系统上安装程序是个很常见的事。但在Linux中,很多程序都是由网上的黑客或是项目组使用C,C++或perl开发的源程序包。想要将这些源程序进行安装,就必须要将程序进行编译。这大概就想要经过以下几步:预处理——>编译——>汇编——>链接。然后才能真正的安装运行起来。但不是所有的用户都有这个能力安装。所以这就出现了简化用户安装使用的程序包管理器。

-------------------------------------------------------------------------------------------

包管理器的分类:

Debian:dpkg

RedHat:rpm(redhat package manager)

包管理器的功能:

打包

安装

卸载

升级

校验

数据库管理

包管理器的发展:前端工具

dpkg:apt-get

rpm:yum

-------------------------------------------------------------------------------------------

程序的命名格式:

源代码:

name-version.tar.{gz,bz2,xz}

version:major.minor.release

rpm包:

name-version-relase.arch.rpm

version:major.minor.release,同源代码。

relase:rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS。

arch: 适用于的硬件平台。

获取rpm的途径:

1.发行的光盘或站点服务器

镜像:

http://mirrors.163.com

http://mirrors.sohu.com

2.项目的官网

源代码

rpm包

3.很多第三方机构或个人制作并公开发布许多rpm包

http://rpmfind.net

http://rpm.pbone.net

可靠的途径:EPEL

Fedora-EPEL

rpm包的合法性验证:

包制作者制作完成之后会附加数字签名于包上;

验证方式:

来源合法性

包的完整性

验证过程:

前提:必须有可靠机制获取到包制作者的公钥;

1.使用制作者的公钥解密加密的特征码,能解密意味着来源合法;

2.使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征码作比对,相同,则意味着完整性没问题;

-------------------------------------------------------------------------------------------

rpm包管理器的使用:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

安装

rpm [option] /path/to/package_file

-i:install 安装

-v 显示

-vv 详细显示

-vvv 详细+显示

-h 以#号显示进度

组合选项:-ivh

--test:仅作测试,没有真正执行安装

如果依赖于其它包:

1.解决依赖关系

2.忽略依赖关系

能安装上,但有可能无法运行;

--nodeps 忽略依赖关系

重新安装:

--replacepkgs

如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为.rpmnew

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

卸载程序包:

rpm [option] package_name

-e erase

如果被其它包所依赖:

1.将依赖于此包的所有包一并卸载

2.忽略依赖关系

能卸载,但依赖于此包程序可能会运行不正常

--nodeps 忽略依赖关系

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

升级程序包:

新版本替换老版本

rpm [option] /path/to/package_file

1.升级或安装

-Uvh

2.纯升级

-Fvh

--force 强制升级

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

查询操作:

1.查询某包是否安装

rpm -q package_name...

2.查询所有已经安装的包

rpm -qa

3.查询包的描述信息

rpm -qi package_name

4.查询某包安装生成了哪些文件

rpm -ql package_name

(1)查询某包安装生成了哪些配置文件

rpm -qc package_name

(2)查询某包安装生成了哪些帮助文件

rpm -qd package_name

(3)查询程序包的相关脚本

rpm -q --scripts package_name

5.查询某文件是由哪个包安装生成的

rpm -qf /path/to/some_file

6.对尚未安装的包执行查询

rpm [option] /path/to/package_file

-qpi 查询未安装的某包生成了哪些信息

-qpl 查询未安装的某包生成了哪些文件

-qpc 查询未安装的某包生成了哪些配置文件

-qpd 查询未安装的某包生成了哪些帮助文件

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

校验:

用于检查包安装生成的文件属性是否发生变化

rpm -V package_name

-  -  -  -  -  -  -  -  -  -  -  -

S file Size differs

    M Mode differs (includes permissions and file type)

      5 digest (formerly MD5 sum) differs

      D Device major/minor number mismatch

      L readLink(2) path mismatch

      U User ownership differs

      G Group ownership differs

      T mTime differs

      P caPabilities differ

      某属性无变化,显示为.

-  -  -  -  -  -  -  -  -  -  -  -

rpm包来源合法性及完整性检验:

    前提:在当前系统上导入包的制作者的公钥

导入:

rpm --import /path/to/key_file

#rpm -qa gpg-pubkey*

显示所有已经导入的gpg格式的公钥

#rpm -qi gpg-pubkey-NAME

显示密钥的详细信息

    检查包:安装过程中会自动执行

        手动检查:

rpm -K /path/to/package_file

不检查包完整性:

rpm -K --nodigest

不检查来源合法性:

rpm -K --nosignature

rpm --checksig /path/to/package_file

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

数据库重建:

数据库目录位置:/var/lib/rpm

重建:

rpm --initdb:初始化

如果事先没有库,会新建一个;如果有,则不新建

rpm --rebuilddb:重建

直接重建,覆盖原有的数据库


RPM学习笔记