软件包有两种:
二进制格式的软件包和源码程序包。
如何选择适合自己的二进制格式的软件包?
1、根据CPU架构选择软件包
二进制格式的软件包就是已经把源程序转化为CPU所支持的指令集,它可以直接运行的。因为不同架构的CPU指令集不完全一样的。所以二进制格式的
软件包通常会标识适用于那种架构的CPU。
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。
[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了。
可以使用下述方法获取二进制程序的格式:
[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) 标准
不同的文件存放在不同的目录中。
配置文件 放在/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格式的数据包有一定的格式,如下:
软件名称|-该包的作用|-程序的主版本号.次版本号.rpm包发行号-系统平台.CPU平台.rpm
[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
[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计算资源。
[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程序包的格式可知道,该程序包为主包。
[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 服务器软件
[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 开发包
[root@a ~]# rpm -qa | grep -i openssl openssl-0.9.8e-22.el5_8.4
从上面查看结果知道,系统中没有安装:openssl-devel开发包。使用yum 工具把该软件包安装好。
[admin@localhost admin]$ yum install openssl-devel
再次编译就不会报错了。
[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、安装
【rpm -ivh /path/to/package_file】 安装软件包,并显示安装进度。 【rpm -ivh --test /path/to/package_file】 测试软件包是否可安装
Linux的重要哲学思想之一:“组合小程序完成复杂任务”。在 Linux 中一个程序,往往要依赖其它好多小程序才可以完成一个大的功能。这些程序是有依赖关系的。程序的执行过程,也称为程序流。当程序执行到某个位置就要调用另外一个程序完成特定的任务,并把执行结果返回给主程序。这时候主程序才可以往下执行的。
这样组合小程序完成了复杂的任务。如果使用【rpm】程序包管理工具安装程序包时候,如果程序包有依赖关系。rpm程序包管理工具是没有办法解决的,只有人工解决,有的程序包依赖关系很复杂。人工根本很难解决。
后来,就有了解决程度包依赖关系的工具:yum Yellowdog Update Modifier.它是rmp的前端工具。这能够分析你所要安装的程序包有那些依赖程序包,并分析它们的依赖关系。根据依赖关系把程序包安装好,如果你系统中有些程序包已经安装了,它就不会重新安装。
3、卸载
【rpm [options] package_name】 -e 卸载软件包 --nodeps 忽略依赖关系。很危险,可能寻到被依赖的软件包无法使用。
4、升级
rpm [option] /path/to/package_file -Uvh 升级并安装 -Fvh 纯升级
注意:软件包有依赖关系,有可能升级这后,被依赖的软件包无法使用。或冲突等问题。
5、校验
(1)、包安装前,进行rpm包的合法性和完整性检验:
在当前系统上导入包的制作者的公钥
rpm --import /path/to/key_file
在安装软件包的时候,会自动检验rpm包的合法性和完整性的。
手动检查,rpm包的合法性和完整性使用下述方法。
rmp -K /path/to/package_file --nodigest 不检查包完整性 --nosignature 不检查来源合法性
(2)、包安装后检查文件属性
检查文件属性是否发生变化,这是软件包安全的一种手段。
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
说明:
如果属性无变化,显示为点(.),否则,就使用上述属性表示。
6、查询包的描述信息,只能查询已经安装的包
rpm -qi package_name Relocations:是否可以指定安装位置
7、查询文件是由哪个包生成的。
rpm -qf /path/to/some_file [root@Node1 ~]# rpm -qf `which free` procps-3.2.8-25.el6.i686
8、查询某包生成哪些文件
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
[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
本文出自 “Linux” 博客,请务必保留此出处http://9528du.blog.51cto.com/8979089/1445074
RPM(RPM Package Manager)程序包管理工具的常见使用方法
原文地址:http://9528du.blog.51cto.com/8979089/1445074