linux软件包的安装之----rpm软件包管理工具

程序语言开发的程序:系统调用:库,动态库(开发时指向的库)

程序:只要Windows上开的程序所指向的库遵循POSIX规范将源码拿到linux上编译时没问题的,运行应该也没有问题,能否运行还要看依赖的库文件是否存在;因为linux、Windows的ABI不同,Windows上编译好的程序无法在linux上正常运行,即使程序源码遵循POSIX规范。

API:POSIX(可移植os规范)

ABI:应用二进制接口

linux发行商:32bit:i386,预先编译好以后提供给用户二进制程序

64bit:x86_64,可兼容运行32bit程序,反之不行。

Debian:dpt(软件包管理器)-àapt-get(apt库中有成千上万个包或者库,dpt就是个打包工具,将每个包的依赖关系提取出来,放在一个文件中,自动检测当前系统已安装的包/库,并根据当前系统已安装的包/库,及apt库中包/库,以及被安装软件包的依赖关系,自动解决依赖关系,自动安装用户指定的包)

Redhat:rpm----yum

*rpm是仿照dpt的,yum是仿照apt-get的,因此真正牛的os是debian!!!

二进制程序放置目录:/bin,/sbin,/usr/sbin,/usr/local/sbin,/usr/local/bin

库文件放置目录:可能是一个程序特有的(也可供其他程序调用),也可能是共享库;/lib[64],/usr/lib[64],/usr/local/lib[64]

Linux上库文件分为2种:1)静态库,以.a后缀名结尾(2)动态库,以.so(sharedobject)后缀名结尾。

库文件也是可执行程序,但不能独立运行,因为它没有执行入口(例如c的main函数,shell的sha_bang等等),库文件在面向过程的语言中被称为函数,程序执行入口为主函数main(),库文件在程序运行时会被载入内存,可被多个程序共享使用,因此库文件也被称为共享库。

配置文件:一般在/etc/下,格式为纯文本或者xml

帮助文件:通常有2类:(1)man手册:/usr/share/man,/usr/local/share/man(man命令配置文件/etc/man.config中用MANPATH来定义man文件的搜索路径)(2)/usr/share/doc/程序名-版本号/下一般有README\INSTALL等帮助文件。

软件包管理工具(数据库)提供的主要功能如下:

  • 提供文件清单
  • 提供文件放置路径
  • 提供程序依赖关系
  • 程序功能说明,介绍
  • 它有一个数据库,其中存放了(1,已安装的每一个程序;2,每个程序展开的文件以及路径;3,每个文件在安装时的md5校验值,已确定在安装后此文件是否被修改过)
  • 软件包安装事务:防止安装冲突、卸载冲突,包升级时检测是否会有冲突(依赖关系等,如果包原来的库文件被另一个程序所依赖,升级后库文件更新后,那个程序可能无法正常运行)

软件包管理器提供的功能:打包(***对于我们来说:定制编译rpm包,完成上千台server软件的自动部署、管理是必备的能力,要能够写脚本完成rpm包自动安装,指定可以运行rpm安装的用户)、安装、查询、升级、卸载、校验、数据库管理(重建)。

软件包依赖关系:x-àyàz,

YellowDog(是红帽的2次发行版,YUM:YellowdogUpdate Manager,后来红帽将yum机制引入红帽)

Rpm(软件包管理器)--àyum是rpm的前端工具,是基于rpm的***前不久YUM的作者挂了,车祸

编译安装的特点:可以自定义安装软件的哪些功能,但只能手动安装卸载,为了卸载方便,将其安装在特定的路径下(卸载的时候一并删除即可),为了使用方便,修改(1)命令搜索路径PATH (2)库文件搜索路径,(除标准库文件以外其他库文件的搜索路径定义在:如下位置)修改配置文件/etc/ld.so.conf或/etc/ld.so.conf.d/*.conf(可以自己新建一个配置文件,填入搜索路径)  (3)帮助手册搜索路径:修改配置文件 /etc/man.config加入程序帮助文件所在的路径或 man  -M  /path/to/manfile/  程序名(指定程序的man页所在的目录)

(4)头文件:linux下默认路径为/usr/include/,自己编译的话,头文件不一定放在/usr/include下,可以通过导出、链接的方式来引用头文件。--à头文件功能:定义库函数的调用方式,以及接受的参数格式等等。

Linux下软件安装方式总结:

1)  通用二进制格式:直接打开即可使用。

2)  软件包管理器,例如rpm,dpt

3)  软件包管理器前端工具,例如yum,apt-get

4)  源代码编译:在x86_64上编译,不能在PowerPC上运行,x86_64可以运行32位程序,反之不行;一样的:64bitOS上可以运行32bit程序,反之不行。要点:1)底层cpu架构(2)OS版本(3)os是32位或64位的(4)选择与之匹配的程序包来运行。

概念:例如java,python程序在多平台上都可以编译运行,因为java程序通过jvm来运行,而jvm是有对应cpu架构、os版本的特定版本的,python也有自己的虚拟机,这种情况下运行的程序,运行速度比较慢(中间隔了一个解释器来解释自己的语言,不像2进制程序直接就可以通过cpu芯片的汇编语言来运行)。

源代码程序包(tarball)的命名方式(name-version.tar.{gz|bz2|xz})

版本号一般为格式(major.minor.release(版本的主要改动看changelog))

Rpm包命名:name-version-release.arch.rpm

Release号:rpm包作者第几次制作的编号;arch为适合安装的cpu平台架构;可能还包含所适用的操作系统例如:el6_2

Arch:主机平台,i386,i686,x86_64,amd64;***注:在红帽系统上显示为x86_64,在debian上可能显示为amd64。*noarch包:不依赖于平台的rpm包

Rpm分包:将某些功能独立封装成包,需要则安装,否则就不装(例:有时只需装服务器或客户端2者之一)。例如:主包为:核心包     bind  ;;;;分包:支包bind-devel;bind-chroot

Rpm分包特点:分支包一般会依赖于主包(核心包)。

Epel:为rhel平台提供的扩展rpm包,此项目目前有fedora来维护,Google“Fedora epel”

http://mirrors.163.com/,可以找一下国内镜像站,比较快

因此我们以后如果要安装除安装盘中包含的其他rpm包时找Google“Fedora epel”,centos也是一样。要找与我们os平台,硬件平台所匹配的,不要使用来路不明的包(1)首先光盘上的包(2)EPEL包

搜索rpm包的网站(如果光盘以及epel中都没有这个rpm包):http://rpmfind.net

http://rpm.pbone.net

或者直接google

Rpm包的验证机制:验证rpm包来源的合法性,软件包的完整性。

验证机制原理讲解如下:

用GPG非对称加密算法实现,GPG是PGP技术规范的一种实现。

非对称加密:用加密算法生出一对公钥和私钥;使用公钥加密的数据只能用与之配对的私钥解密,反之亦然。由于其加密速度太慢,一般用于做数字签名,我们要了解的是,这个rpm包的确是我们认为的作者制作的。

*加密过程--à数字签名:用单向加密算法计算出rpm包特性码,然后用rpm包作者的私钥加密这个特性码,并将得到的加密数据附加到此rpm包后面。

*验证过程---à用公钥解密rpm包附带的加密数据,如果可以就说明的确是作者本人加密的,因为只有作者有私钥(完成验证rpm包合法性)。  这样就得到了解密后的特性码,然后,使用同样的加密算法单向计算出rpm包的特性码,然后比较2个特性码是否相同,如果相同,就说明rpm包的完整性没有问题。(验证rpm包完整性完成)

原理部分:记忆起来太麻烦了,运维工程师没必要知道的这么详细,这次记住了这些原理,以后也会忘记,主要学习怎么验证软件包就可以了。个人看法

验证过程:

1)  从网上下载软件包

2)  通过ssl访问软件包项目官网找到公钥,解密数据(rpm附带的),解密成功后得到特性码。

3)  用同样的算法单向加密自己下载的rpm包,得出特性码,对比两个特性码是否为一致。

Redhat系列OS官方公钥:/etc/pki/rpm-gpg/R….

验证光盘上的包(1)#rpm  --import  /etc/pki/rpm-gpg/R…

(2)#rpm  –K zsh..rpm

验证选项语法#rpm (-K或--checksig)另外(--nodigest不检测完整性—nosignature不检测合法性,马哥建议:最好都检查,用-K来查)  rpm包名

**官方公钥一般安装光盘上也有。

Rpm包的安装(语法格式如下):

Rpm -I  /path/to/rpmfile

-i|--install          (安装)

-v|-vv|-vvv (详细模式,v越多,显示的信息越详细)

-h                        (以#显示安装进度,一个#代表2%的进度)

常用的安装组合选项  -ivh

*)如果安装时遇到报错:“error:Faileddependencies”可以几个包一起安装,

--nodeps            忽略依赖关系

--test                  测试安装

--replacepkgs   重新安装

Rpm包的卸载

Rpm -e  rpm包名(如果因为依赖关系无法卸载,可以几个包一起卸载)

--nodeps            忽略依赖关系

--test                  测试卸载

*)warning:/…/…/XXX  saved as  /…./…./xxx.rpmsave  (保存相关配置文件为xxx.rpmsave,安装卸载时都有可能出现这种警告)

Rpm包的查询

Rpm -q  rpm包名(这个包名不包含这些内容-version-release.arch.rpm)

查询所有已安装的包:rpm  -qa  包名 或者 rpm  -qa |grep  包名

查询rpm包的摘要信息:rpm –qi  包名(这些信息由rpm包的制作者提供)

查询rpm包生成的文件:rpm –ql  包名

查询rpm包生成的配置文件:rpm –qc  包名

查询rpm包生成的帮助文件:rpm –qd  包名

查看软件包安装卸载时执行的脚本:rpm  -q --scripts  包名(*脚本格式有4段:preinstall:安装前脚本;Postinstall:安装后脚本;preuninstall:卸载前脚本;postuninstall:卸载后脚本)

查询尚未安装的软件包的信息:

Rpm -qpi  /path/to/rpmfile(查询摘要信息)

Rpm -qpl  /path/to/rpmfile(查询安装后生成的文件列表)

Rpm  -qpd /path/to/rpmfile(查询安装后生成的帮助文件列表)

Rpm  -qpc /path/to/rpmfile(查询安装后生成的配置文件列表)

rpm   --scripts 包名(查看软件包安装卸载时会执行的脚本)

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

Rpm  -qf  /path/to/somefile  扩展选项 –qfi |-qfl

例如:Rpm  -qf  /etc/passwd; Rpm  -qf  /etc/inittab

Rpm包的升级:

-U:升级或安装(已安装则升级,未安装则安装)

-Uvh

-F:只升级,如果未安装老版本的包则不会升级。

-Fvh

--force:如果有依赖性冲突(例如X程序需要老版软件的库文件),则强行升级。

--nodeps:不关心依赖关系,升级。

***内核不应该被升级,应尽可能安装,内核应该允许多版本并存,如果升级后与现有环境不兼容无法退回老内核版本!!!

Rpm包校验(检验是否rpm包安装时生成的文件在安装后有没有被改动):

Rpm -V  包名(没有任何输出说明没有被改动过,尝试修改一下软件包生成的文件再校验一下,S表示大小变了,T表示时间戳变了,5表示md5校验和变了,U属组变了,G属主变了,有需要的话可以man  rpm查一下具体的显示值对应的具体的含义)

Rpm包的数据库(redhat下的大多数程序的数据库都在/var/lib/下)文件,如果数据库损坏,rpm查询将无法进行,需要重建rpm数据库。   #ls  -lh  /var/lib/rpm

*)重建rpm数据库(2中方式,其中第一种方式用的比较多): (1) #rpm  --rebuilddb   (会覆盖原有数据库内容,遍历当前系统安装的每个rpm包,抽出其信息,生成数据库,时间较长)

(2)#rpm  --initdb (不会覆盖原有数据库内容)

***1)rpm可依次安装多个包(2)在生产环境安装需要校验rpm包的来源合法性以及完整性,导入公钥后,在安装时可自动完成校验。

源码格式的rpm包介绍(后缀名.src.rpm)

打包:rpm包的制作过程是根据spec文件来完成的,在镜像站上这种包所放置的的目录一般是/SRPMS/。

目的:可以在用户自己的特定平台上编译安装,可以提高安装后程序的执行性能,以及可以跨平台安装。

linux软件包的安装之----rpm软件包管理工具

时间: 2024-07-30 10:17:26

linux软件包的安装之----rpm软件包管理工具的相关文章

13个演示实例搞定RPM包管理工具

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. RPM是个什么东西? RPM以前是"RedHat Package Manager"的简称,现改为"RPM is Package Manager".在Linux/Unix操作系统上,RPM包管理工具允许系统管理员安装.更新.卸载.查询.验证和管理RPM包.下图为RPM包管理工具所具备的基本功能. 准备工作 为了更好的演示RPM包管理工具,我们需要将光盘镜像挂载到文件系

《Linux学习并不难》使用RPM软件包(3):安装RPM软件包

14.3  <Linux学习并不难>使用RPM软件包(3):安装RPM软件包 RPM软件包的安装流程如图9.1所示,如果软件包满足依赖条件则允许安装,如果不满足依赖关系则需要先安装其它软件包. 使用rpm命令可以在Linux系统中安装.删除.刷新.升级.查询RPM软件包. 命令语法: rpm [选项] [RPM软件包文件名称] 命令中各选项的含义如表所示. 选项 选项含义 -i 安装软件包 -v 输出详细信息 -h 安装软件包时打印哈希标记 --replacepkge 无论软件包是否已被安装,

Linux下oracle11g安装所需要软件包的检测与安装

Linux下oracle11g安装所需要软件包的检测与安装 1 首先在执行脚本之前,你需要把所有需要的包提出出来,然后放到一个名为patch的文件夹下,这个文件夹要和脚本程序在同一个目录下就可以 2 把下面的脚本内容copy到linux下,新建一个脚本文件,然后执行就可以了, 脚本的内容如下: #!/bin/sh count=0 arr=( binutils-2* compat-libstdc++-33* elfutils-libelf-0.* elfutils-libelf-devel-0.*

Linux基本命令——RPM包管理工具

WHAT?什么是RPM? RPM是一种软件包格式,文件的扩展名为".rpm",其管理机制最早由Red Hat公司提示,后来随着版本升级,融入更多的优秀特性,先已成为众多Linu发行版中公认的软件包管理标准. WHY?为什么要使用它? RPM包管理器通过建立统一的文件数据库,对在Linux系统中安装.卸载.升级的各种.rpm软件包进行详细的记录,并能够自动分析软件包之间的依赖关系,保持各应用程序在一个协调.有序的整体环境中运行. WHERE?在哪里使用? 很多Linux主流的软件都有.r

LINUX&amp;nbsp;软件安装(rpm详解)

转自:http://www.51testing.com/?uid-227476-action-viewspace-itemid-99651 在使用Linux系统的过程中,软件包的安装是避免不了的,在Linux下,软件安装程序的种类很多,安装方法也各式各样,(舒适性自然比不上windows :-))不过我们常见的软件包有两种: 1)含有软件的源代码的压缩包,解压后需要手动编译.这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz). ./configure (配置) make (编

Linux下RabbitMQ安装、运行与管理

Linux下RabbitMQ安装.运行与管理 安装erlang 安装参考官网 RabbitMQ的安装需要Erlang的基础环境,必须按照RabbitMQ Erlang版本要求进行安装. 关于Erlang官方的安装方式有三种: 官方制作的依赖软件包 Erlang Solutions的软件包(这个可以自定义yum库安装,本人自己下载安装) EPEL(“Enterprise Linux的额外软件包”) cd /usr/local/src/ mkdir rabbitmq cd rabbitmq //下载

linux/centos下安装nginx(rpm安装和源码安装)详细步骤

Centos下安装nginx rpm包                                                                                                                            www.169it.com 1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/en/download.html wget http://nginx.org/packages/c

搭建KVM环境——07 带GUI的Linux上安装KVM图形界面管理工具

清空yum源缓存,并查看yun源 [[email protected] ~]# yum clean all Loaded plugins: fastestmirror, langpacks Cleaning repos: vcd Cleaning up everything Cleaning up list of fastest mirrors [[email protected] ~]# yum repolist Loaded plugins: fastestmirror, langpacks

RPM包管理工具详解

RPM是Red Hat 和centos下的一个软件包管理机制,可使用yum安装,自动解决依赖关系. dpkg是Ubuntu下的一个软件包管理的工具,可使用apt-get 安装软件包,自动解决依赖关系. RPM是以数据库记录的方式将软件安装到linux系统上的.官方站点:http://rpm.org/ SRPM(source rpm)  ,这个软件包含有源代码,提供了参数配置文件(configure和makefile) 扩展名是以  .src.rpm格式来命名的. RPM软件命名格式: 软件名-软