Linux软件包管理之--rpm
网络操作系统都是架构在底层硬件之上的,目前内核有Linux系列,UNIX系类,Windows系列等,再向上是程序库调用,程序的实现方式在不同的操作系统中实现的方式也不尽相同。操作系统向外输出供用户使用的接口称之为API(Application Programming Interface),向用户输出统一的调用接口,这样当一个文件使用调用接口后就可以在不同的操作系统中按照统一的格式输入输出了。(如下图)
ABI(Application Binary Interface)即应用二进制接口,我们知道Windows和Linux系统是不兼容的,但是如果我们想实现不同系统的相同应用,就需要使用库级别的虚拟化,在Linux操作系统中有WINE系统,在Windows操作系统中有Cywin系统,都可以实现在各自的操作系统中运行非各自操作系统原生的应用程序,从而实现了操作系统应用的扩展。
系统级的开发语言有C、C++,而应用级的开发语言有Java、Python、php、perl以及ruby等。其中二进制应用程序的组成部分包含:(1)二进制文件(2)库文件(3)配置文件(4)帮助文件。
在程序包的管理器中现行的有Debian发行版下的deb、dpt管理器等,RedHat发行版下有rpm管理器。
RPM是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放的,现在包括OpenLinux、SUSE以及Turbo Linux等的Linux发行版都有采用,可以算是公认的行业标准了。RPM是一种用于互联网下载包的打包及安装工具,它包含在某些Linux发行版中。它生成具有.RPM扩展名的文件。
RPM主要功能:
*安装、卸载、升级和管理软件
*组件查询功能
*验证功能
*软件包GPG(来源合法性)和MD5数字签名(完整性)的倒入、验证和发布
*软件包依赖处理
*选择安装
*网络远程安装功能
什么是程序包管理器:
将编译好的应用程序的各个组成文件打包称一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作。主要包含两个部分,首先是程序包的组成清单,这是每个包独有的,包含文件清单,安装或卸载时运行的脚本;其次是公共的数据库,主要有程序包的名称及版本,依赖关系,功能说明和安装生成的各文件的文件路径及校验码信息。
由于程序包之间会存在依赖关系(例如三个文件:X,Y,Z),所以程序包管理器需要前端管理工具来解决关联文件之间的依赖关系。
yum:是rpm包管理器的前端管理工具
apt-get:deb包管理器的前端管理工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 22+rpm包管理器前端管理工具
软件源代码命名格式:
源代码:name-VERSION.tar.gz
VERSION:major.minor.release
major:主版本号
minor:次版本号
release:发行号
RPM包的命名格式:
RPM包的命名格式是依赖并延续软件源代码的命名格式的,格式如下
RPM包:name-VERSION-ARCH.rpm
VERSION:major.minor.release
ARCH:release.os.arch
示例:
zlib-1.2.7-13.el7.i686.rpm
RPM包的文件组织结构:
由于一个应用程序可能包含数十种不同的功能,这个时候如果对所有功能都进行RPM包统一格式的制作,对大部分的用户来说都是不合适的,这个时候需要将应用程序的功能进行分类,制作成可以由用户自由定制的拆包模式来进行软件的安装,如下所示。
testapp:拆包
testapp-VERSION-ARCH.rpm:主包
testapp-devel-VERSION-ARCH.rpm:支包1
testapp-testing-VERSION-ARCH.rpm:支包2
示例:
yum-langpacks-0.4.2-3.el.noarch.rpm:主包
yum-plugin-aliases-1.1.31-29.el7.noarch.rpm:支包
获取程序包的途径:
(1)系统发行版的光盘或官方服务器:
CentOS镜像:
(2)项目官方站点
(3)第三方组织:
Fedora-EPEL社区
专业搜索引擎:
CentOS系统上rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护。
(1)安装:
rpm {-i|--install} [install-options] PACKAGE_FILE
-v:verbose
-vv:显示更详细的安装信息
-h:以“#”显示程序包管理执行进度,每个“#”表示2%的进度
rpm -ivh PACKAGE_FILE
--test:测试安装,但不真正执行安装过程,属于dry run模式
--nodeps:忽略依赖关系
--replacepkgs:重新安装
--nosignature:不检查来源合法性
--nodigest:不检查包完整性
--noscipts:不执行程序包脚本片段
%pre:安装前脚本:--nopre
%post:安装后脚本:--nopost
%preun:卸载前脚本:--nopreun
%postun:卸载后脚本:--nopostun