Linux下软件包管理之RPM初始化                  

    简单定义:rpmlinux下的一种包文件,现在用的全称叫RPM Package Manager,以前叫Redhat Package Manager

它是一种安装很方便的包,目前也有很多linux下的软件都以rpm格式发布。但它不是相当于windows中的exe文件,它的安装必须是要通过命令的(就算是rpm包的管理程序,在安装是也是通过命令方式的)rpm包有两种,二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。

1、 软件包的组成部分:                                            

1二进制程序:如:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin

2)程序的运行依赖的库文件

如:/lib,/usr/lib,/usr/local/bin

2、rpm软件包管理工具包含的文件清单                                    

a)文件清单:

b)文件放置路径:

c)提供的功能说明

d)依赖关系

e)数据库:


3、安装程序的方式:                                    

a)通用二进制格式

b)软件包管理器

c)软件包管理器的前端工具

d)源代码编译

lips:

Linux下的rpm包都是经过编译的 ,而编译程序本身依赖CPU对其编译的软件进行优化,有些软件包依赖于平台比64bit、32bitCPU。

4、rpm包组成格式相关说明                            

RPM:打包、安装、查询、升级、卸载、数据库管理(重建)

 1)源程序:name-version.tar.{gz|bz|xz}

2)版本号:major.minor.release

3)升级:在哪一个版本号上面进行升级

4)如:bash-4.3.1.tzr.xz

5)RPM包:name-version-releasearch.rpm

6)发型号用于标识RPM包本身的发行号,可包含所适用的操作系统

 7)arch:主机架构平台

   lips:I686X86_64 ADM64 noarch不依赖于平台

 8)RPM分包:

          主包:核心包

          分包:支包

       Bind

       Bind--level

9)OS:安装程序

lips:Linux软件包相关下载链接:

http://mirros.sohu.com   搜狐镜像站点

http://mirrors.163.com/  网易镜像站点

http://rpm.pbone.net

http://rpmfind.net

5、软件包安装来源可靠性和安全性建议

RPM包有验证机制:来源的合法性、软件包的完整性

       1)、首选光盘上存在的话还是建议用光盘上面的安装包

       2)、其次是EPEL,下载下来最好还是要校验下

     3)、对来源的合法性是通过公钥加密或者说是非对称加密来验证的,通常使用GPG来实现。

       4)、GPGPGP的开源实现;PGP是一种技术实现。

       5)、非对称加密:一般有两个秘钥,Ppublic公钥和S secret私钥

       6)、一般来讲使用公钥加密的只能使用与之配对的私钥解密,反之亦然

       7)、公钥是从私钥中提取出来的,你只要有私钥,从公钥中可以把私钥提取出来。

       8)、非对称加密执行的速度非常慢,所以通常不会用来所数据加密,做数字签名或秘钥交换的。

私钥加密特征码,只能用公钥解密,反之亦然

       9)只要能解密出来就能验证是合法的啦

      10)散列值:单项算法,对比散列值

      11)能解密出来说明软件包的来源是合法的,

      12)只要是同样的加密算法,计算出来hash码,进行对比匹配即可。

6、红帽签名,提供了公钥,RedHat系列官方公钥            

lips:安装前的准备步骤:                                

1)、查看当前系统相关信息:                

# lsb_release -a
# uname -a

163723474.png

2)、RHEL6的公钥信息保存在/etc/pki/rpm-gpg/

# ls /etc/pki/rpm-gpg/ -l

163736194.png

3)、导入公钥验证信息

#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


163750115.png

4)、复制光盘软件到本地

#cp zip-3.0-1.el6.x86_64.rpm /test
#cd  /test

5、检查签名,验证软件包来源合法性

rpm -K zip-3.0-1.el6.x86_64.rpm

163802831.png

校验验证相关小贴士lips:

# rpm -K --nodigest zip-3.0-1.el6.x86_64.rpm
//不检验单项的相关内容(sda1,md5)


163818758.png

# rpm -K --nosignature zip-3.0-1.el6.x86_64.rpm
//不检验签名信息(gpg,dsa)

163828195.png

           手把手教你学软件包安装:                

从光盘复制软件包到本地安装

# mount /dev/cdrom  /media/cdrom/       //挂载光盘
# cd /media/cdrom/Packages/             //切换到光盘软件包所在目录
#ls
# cp zip-3.0-1.el6.x86_64.rpm  /test/   //复制相关软件包到本地test目录下
# cp zip-3.0-1.el6.x86_64.rpm  /test/   //执行安装
# rpm -K zip-3.0-1.el6.x86_64.rpm   //执行公钥校验软件包来源信息的合法性
# rpm -ivh /test/zip-3.0-1.el6.x86_64.rpm //执行安装

164013331.png

-i          --install 安装路径

-v          -vv -vvv详细信息,V字越多信息越详细

-h          hash码,也就是警号#显示安装进度,一个警号2%,总共是50#

Linux rpm软件包安装前的小插曲

LipsRPM包具体细节的组成:

1)要安装的文件

2)要执行的脚本 (pre安装前、post安装后、prenu卸载前、postun卸载后)

# rpm -ivh --test bind-chroot-9.8.2-0.17.rc1.el6.x86_64.rpm

依赖关系lips:

   定义:一个RPM 包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系;依赖关系并不是Linux特有的,Windows操作系统中也是同样存在的;比如我们在Windows系统中运行3D游戏,在安装的时候,他可能会提示,要安装Direct 9 LinuxWindows原理是差不多的。


165143283.png

RPM依赖的东西叫capacity中文意为能力。

rpm的一些基本选项:

--nodepends忽略依赖关系,与--replacepkgs(重装)搭配使用

--replacepkgs重装软件包

重装软件包  --replacegks

# rpm -qa |grep ^zip
# rpm -ivvvh --replacepkgs zip-3.0-1.el6.x86_64.rpm

165155799.png


--force无视冲突

卸载                                                                

-e   后面跟软件包名 e----> erase 擦除之意

   lips:擦除、抹除之意,只有别的软件或相关进程依赖于某个软件时才提示不能卸载,如果此软件依赖于其他相关软件和进程的话卸载是任何相关提示信息的。

升级                                                                

-Fold-->new,无old,则不new

     -U old --->old,安装new

     -vh也是常用的组合选项,以显示详细信息的方式安装

  关于内核的lips

注意:内核不应该升级安装,内核允许多版本并存,多疑可以内核;如果测试一段时间新内核很稳定的话可以直接卸载旧内核,不过还是建议备份哦!升级之后即使新内核不稳定或者无法启动再启用新内核即可;不影响公司正常业务的开展!这是大家要注意的事项哦!


查询                                                    

查询:rpm -q |--query包名

# rpm -q zip

165209402.png

#rpm -qa             //查询系统中所有已安装的软件包
# rpm -qi zip        //查询zip软件包的相关信息

lips:

rpm包单项加密,所谓单项加密就是提取数据的指纹信息。

特点:1)如果原数据一样,结果一定会一样;

2)雪崩效应,如果原数据有一点点不同,结果就大大不同;初始条件的微        小改变会引起结果的巨大改变。

单项加密会提取数据的特征码,如果,两次提取不一样呢?

官方:提取rpm特征码,附加在光盘里面,使用自己的私钥加密。

关于对验证签名的简单lips:                                            

1)用官方的公钥解密这段加密的特征码;得到可靠的官方提供的特征码;

2)单项加密不可逆,自己再使用同样的方法提取特征码,并比较和解密出来的特征码是否一致;

RPM -ql 软件包名 用于显示RPM包安装完成之后在系统上生生成了哪些文件。

# rpm -ql zip

165222142.png

查询rpm包安装生成的文件清单:

rpm -ql 包名

165236404.png

查询某文件是由哪个RPM包生成的

格式:rpm -qf  文件路径  

# rpm -qf /etc/inittab

165255920.png

查询此软件包生成的配置文件

格式:rpm -qc   包名  

查询包安装生成的帮助文档

格式:rpm -qd 包名

查询此软件包内置的脚本

格式:rpm -q --scripts 包名

四个脚本

preinstall安装前脚本

postinstall安装后脚本

preuninstall卸载前脚本

postuninstall卸载后脚本

               linux RPM包的一些基本扩展                

查询尚未安装的包的相关信息

格式:rpm -qpi 软件包全名

# rpm -qpi bind-9.8.2-0.17.rc1.el6.x86_64.rpm

165309199.png

校验,前面已经写过,这里介绍其他的校验方法                      

定义:检查rpm包安装生成的文件有没有被非法改变过

格式:-Vpkgname

# rpm -V zip

165321604.png

# rpm -ql zip 查看此文件生成了哪些文件
# rpm -ql zip
# echo "i love linux" >> /usr/share/doc/zip-3.0/algorith.txt
# rpm -V zip

165338678.png

-V选项信息的基本说明

S

表示size大小之意

L

Readlink路径不匹配

M

表示权限为改变

U

属主改变

5

Md5特征码之意

G

属组改变

D

主次设备号不匹配

T

最近一次的修改时间

                       Rpm数据库                                

# ls /var/lib/rpm/ -l    //RPM数据库文所在路径

165354946.png

                   RPM数据库重建                                  


RPM数据库在使用过程中出现丢失或者损坏的情况下需要重建数据库,以保证系统中RPM软件包的正常运行。


#rebuild initdb  //重新初始化丢失了的库

rebuilddb重建,无论事先是否存在

#rpm rebuilddb //rpm数据库已破坏且不能安装软件包的时候使用

  至此,linux RPM软件的基本管理暂且写到此处,难免会有错误和遗漏之处,请大家多提出意见和建议,谢谢