博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RPM(RPM Package Manager)程序包管理工具的常见使用方法
阅读量:6629 次
发布时间:2019-06-25

本文共 6595 字,大约阅读时间需要 21 分钟。

软件包有两种:

       二进制格式的软件包和源码程序包。

如何选择适合自己的二进制格式的软件包?

1、根据CPU架构选择软件包

    二进制格式的软件包就是已经把源程序转化为CPU所支持的指令集,它可以直接运行的。因为不同架构的CPU指令集不完全一样的。所以二进制格式的

软件包通常会标识适用于那种架构的CPU。

1
2
3
4
5
6
7
CPU 常见平台arch:
    
1)、Power  造价高、性能强劲
    
2)、简化板的 PowerPC
    
3)、UItraSparc
    
4)、x86 功耗低,性能接近服务器级架构的CPU。
    
5)、x86_64
    
7)、MIPS

    不同架构的CPU所支持的指令集是不一样的。所以,在x86 架构的CPU上编译的软件,移植到 Power 架构的CPU上是无法运行的、我们要根据使用的CPU的架构来选择二进制软件包。

 例:这两个程序包的适合i386和i686架构的CPU。

1
2
3
4
[root@Node1 ~]
# ll /home/admin/
total 1136
-rw-r--r--. 1 root  root  221868 May  9  2012 drbd83-8.3.8-1.el5.centos.i386.rpm
-rw-r--r--. 1 root  root  125974 May  9  2012 kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

2、根据所使用的操作系统选择对应的版本。

   应用程序虽然是运行在CPU上,但受控于内核。不同的内核支持的二进制执行文件的格式是不一样的。Linux 使用的二进制格式是:ELF.而Windows 所支持的二进制格式就不是:ELF了。

可以使用下述方法获取二进制程序的格式:

1
2
[root@Node1 ~]
# file `which httpd`
/usr/sbin/httpd
: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), 
for 
GNU
/Linux 
2.6.18, stripped

   所以,选择二进制软件包的时候,要了解该软件包运行的平台是:windows ,还是 Linux呢。这就是所谓的ABI,程序的运行环境不一样的。

   根据操作系统选择好二进制软件程序包以后,还要考虑你的操作系统是32位的,还是64位的?

虽然64位的兼容32位,意思是说:在64位操作系统上可以运行32位的应用程序。但是应用程序在64位系统上运行就不能充分发挥64位操作系统的性能。32位操作系统就不能运行64位的应用程序了。一般是向下兼容的。所以,我们选择二进制程序包的时候还要了解操作系统的位长。尽量选择位长与操作系统

位长一样的软件包,这样能够充分发挥操作系统的性能和应用程序的性能。

------------这样就可以根据实际情况选择适合我们系统的二进制程序包了。

    Linux 系统中二进制应用程序通常以下几部分组成:配置文件、库文件、头文件、二进制程序、帮助文档。根据FHS(Filesystem Hierarchy Standard) 标准

不同的文件存放在不同的目录中。

1
2
3
4
5
配置文件            放在
/etc
目录
库文件              放在
/lib
/usr/lib
二进制程序          放在
/bin
/sbin
/usr/bin
/usr/sbin
头文件              放在
/usr/include
帮助文档            放在
/usr/share

    因为,在Linux系统中卸载软件就是直接把安装的程序文件删掉就可以了。没有Windows系统中所谓的注册表的概念。

    一个二进制程序包通常有很多文件:如配置文件、库文件、头文件、二进制程序文件、帮助文档等等。要把这些文件存放到上述的目录中。

    由于,这些目录中存放了大量的文件,执行程序的卸载工作有很多的不便。因为要从这些目录中一个个找出来再把它删掉,很困难。

     这就需要有一种工具帮我们记录这个应用程序包的文件安装到哪里,安装该程序时候都安装了那些文件等等。rpm(RPM Package Manager)就是这样一种工具。

     在Linux系统中,RPM包管理机制已经成为一种标准。像CentOS 和 RedHat 等发行版,都使用【rpm】程序包管理器来管理,二进制程序包的安装、升级、卸载。等同于windows中的软件安装卸载程序。

下面看看,RPM软件包管理工具的功能:

 1、打包

       把二进制程序的各个文件打成为.rpm格式的数据包。rpm格式的数据包有一定的格式,如下:

      

1
 
软件名称|-该包的作用|-程序的主版本号.次版本号.rpm包发行号-系统平台.CPU平台.rpm
1
2
[root@Node1 ~]
# ll /mnt/cdrom/Packages/ | grep "\<zlib\-[0-9]>"
-r--r--r--.  94 root root    74336 Nov 27  2012 zlib-1.2.3-29.el6.i686.rpm

      说明:这是一个主软件包名称为:             zlib.

            主版本号为:                         8

    次版本号为:                         3

    rpm包发行号:                        8

    适用的系统平台:                     centos 5

    适用于CPU架构                        i686

1
2
[root@Node1 ~]
# ll /mnt/cdrom/Packages/ | grep "\<zlib\>-devel"
-r--r--r--.  77 root root    45052 Nov 27  2012 zlib-devel-1.2.3-29.el6.i686.rpm

说明:zlib后的横杠(-)跟的不是数字,而是一个单词----> devel.就表示该包是子软包。“devel”表示,该软件包的作用是开包用的。

    zlib是基于互联网的,Web服务器传输数据的时候经常使用的数据压缩工具,数据经过压缩后可以节省带宽,为公司节省不少成本的,但是压缩就要耗费CPU计算资源。

1
2
[root@Node1 ~]
# ll /mnt/cdrom/Packages/ | grep "[[:space:]]openssl\>-[0-9]"
-r--r--r--.  32 root root  1435936 Jan 21  2013 openssl-1.0.0-27.el6.i686.rpm

说明:从PRM程序包的格式可知道,该程序包为主包。

1
2
[root@Node1 ~]
# ll /mnt/cdrom/Packages/ | grep "[[:space:]]openssl\>-devel"
-r--r--r--.  27 root root  1201312 Jan 21  2013 openssl-devel-1.0.0-27.el6.i686.rpm

说明

   根据PRM包的格式知道,该包是一个子包,作用:是开发的时候才用到的。下面举个例子说明下,开发包在什么时候使用到?

   编译安装 httpd 服务器软件 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  
[root@localhost httpd-2.2.17]
# ./configure \
 
--prefix=
/usr/local/apache2
\
 
--sysconfdir=
/etc/httpd
\
 
--
enable
-mods-shared=all\
 
--
enable
-so\
 
--
enable
-rewrite\
 
--
enable
-cgi\
 
--
enable
-ssl\     ------> 启用用ssl
 
--with-z
[root@localhost httpd-2.2.17]
# make
checking openssl
/engine
.h usability... 
yes
checking openssl
/engine
.h presence... 
yes
checking 
for 
openssl
/engine
.h... 
yes
checking 
for 
SSLeay_version... no
checking 
for 
SSL_CTX_new... no
checking 
for 
ENGINE_init... no
checking 
for 
ENGINE_load_builtin_engines... no
checking 
for 
SSL_set_cert_store... no
configure: error: ... Error, SSL
/TLS 
libraries were missing or unusable

说明:httpd-2.2.17报错。缺少SSL/TLS库。

查看是否安装openssl-devel 开发包

1
2
[root@a ~]
# rpm -qa | grep -i openssl
openssl-0.9.8e-22.el5_8.4

从上面查看结果知道,系统中没有安装:openssl-devel开发包。使用yum 工具把该软件包安装好。

1
[admin@localhost admin]$ yum 
install 
openssl-devel

再次编译就不会报错了。

1
2
3
4
5
6
7
8
9
10
[root@localhost httpd-2.2.17]
# make
checking openssl
/engine
.h usability... 
yes
checking openssl
/engine
.h presence... 
yes
checking 
for 
openssl
/engine
.h... 
yes
checking 
for 
SSLeay_version... 
yes
checking 
for 
SSL_CTX_new... 
yes
checking 
for 
ENGINE_init... yees
checking 
for 
ENGINE_load_builtin_engines... 
yes
checking 
for 
SSL_set_cert_store... 
yes
......

说明:

    httpd 服务器,接收用户请求后,分析用户请求的资源,响应用户时候,要调用openssl,对数据加密,再发送。在编写httpd软件,调用了openssl提供的API(开发库),实现了对数据的加密之后再传送的功能。就是所谓的:HTTPS。所以编译该软件的时候,系统没有openssl的开发库会报错的的。虽然系统上有openssl-devel 但是编译httpd软件的时候找不到。也会报错的。这就涉及到系统默认到哪里去找开发库的问题了。

    默认系统会到:/lib、/usr/lib 这两个目录去找开发库。如果你的开发库不在系统默认的地方,就要告诉系统你的开发库在什么地方。一般有两种方式:

   (1)、/etc/ld.so.conf.d/下创建一个文件,只要它的后缀是.conf就行。然后把你的开发库的在的路

       径添加到该文件中。然后执行【ldconfig -v】通知系统配置文件。

   (2)、在编译软件的时候在选项中直接指定开发库在哪里:openssl-dir=/path/to/somepath/  

 2、安装

1
2
【rpm -ivh 
/path/to/package_file
】           安装软件包,并显示安装进度。
【rpm -ivh --
test 
/path/to/package_file
】    测试软件包是否可安装

    Linux的重要哲学思想之一:“组合小程序完成复杂任务”。在 Linux 中一个程序,往往要依赖其它好多小程序才可以完成一个大的功能。这些程序是有依赖关系的。程序的执行过程,也称为程序流。当程序执行到某个位置就要调用另外一个程序完成特定的任务,并把执行结果返回给主程序。这时候主程序才可以往下执行的。

    这样组合小程序完成了复杂的任务。如果使用【rpm】程序包管理工具安装程序包时候,如果程序包有依赖关系。rpm程序包管理工具是没有办法解决的,只有人工解决,有的程序包依赖关系很复杂。人工根本很难解决。

     后来,就有了解决程度包依赖关系的工具:yum Yellowdog Update Modifier.它是rmp的前端工具。这能够分析你所要安装的程序包有那些依赖程序包,并分析它们的依赖关系。根据依赖关系把程序包安装好,如果你系统中有些程序包已经安装了,它就不会重新安装。

3、卸载

1
2
3
【rpm [options] package_name】
     
-e          卸载软件包
     
--nodeps    忽略依赖关系。很危险,可能寻到被依赖的软件包无法使用。

 4、升级

1
2
3
rpm [option] 
/path/to/package_file
      
-Uvh     升级并安装
      
-Fvh     纯升级

注意:软件包有依赖关系,有可能升级这后,被依赖的软件包无法使用。或冲突等问题。

 5、校验

  (1)、包安装前,进行rpm包的合法性和完整性检验:

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

       rpm --import /path/to/key_file

       在安装软件包的时候,会自动检验rpm包的合法性和完整性的。

       手动检查,rpm包的合法性和完整性使用下述方法。

1
2
3
  
rmp  -K 
/path/to/package_file
      
--nodigest         不检查包完整性
      
--nosignature      不检查来源合法性

  (2)、包安装后检查文件属性

          检查文件属性是否发生变化,这是软件包安全的一种手段。

       rpm -V package_name

       使用上述方法会查出文件那些属性发生了改变。文件属性如下:

1
2
3
4
5
6
7
8
9
       
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

     说明:

          如果属性无变化,显示为点(.),否则,就使用上述属性表示。

 6、查询包的描述信息,只能查询已经安装的包

1
2
   
rpm -qi package_name
            
Relocations:是否可以指定安装位置

7、查询文件是由哪个包生成的。

1
2
3
4
 
rpm  -qf 
/path/to/some_file
  
 
[root@Node1 ~]
# rpm -qf `which free`
 
procps-3.2.8-25.el6.i686

8、查询某包生成哪些文件

1
2
3
4
5
 
rpm -ql package_name | 
less
 
 
[root@Node1 ~]
# rpm -ql zlib
  
/lib/libz
.so.1
  
/lib/libz
.so.1.2.3

9、对尚未安装的包执行查询

rpm -qpl /path/to/package_file

1
2
3
4
5
6
7
[root@Node1 ~]
# rpm -qpl /mnt/cdrom/Packages/zsh-4.3.10-5.el6.i686.rpm  | grep "^/etc"
/etc/skel/
.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
     本文转自成长的小虫 51CTO博客,原文链接:http://blog.51cto.com/9528du/1445074
,如需转载请自行联系原作者
你可能感兴趣的文章
Java Word Break(单词拆解)
查看>>
MYSQL的服务不见了
查看>>
Android Canvas drawText实现中文垂直居中
查看>>
Css3 过渡(Transition)特效回调函数
查看>>
Mac 开发者设置强迫症
查看>>
Linux以百万兆字节显示内存大小
查看>>
(转)Java.lang.reflect.Method invoke方法 实例
查看>>
systemd新的系统管理方案
查看>>
Spring Tool Suite(STS)启动时出现错误:Java was started but returned exit code=13问题解决...
查看>>
android微信开放平台,申请移动应用的应用签名怎样获取
查看>>
RESTful状态码说明
查看>>
ASP.NET微信公众号获取AccessToken
查看>>
Erlang进程堆垃圾回收机制
查看>>
C#.NET开源项目、机器学习、Power BI
查看>>
我许你去百度
查看>>
ssh 免登录
查看>>
分享牛人就是的volatilekeyword
查看>>
Windows 7/8/8.1 误删EFI启动项,无法开机解决方式(U盘+原版镜像)
查看>>
临时表空间操作总结
查看>>
【游普罗旺斯薰衣草庄园】诗一首
查看>>