RPM总结(一)

软件包基础
软件包运行环境
硬件、内核、应用程序的关系
包管理器
程序包管理器
Linux不同系统上的包管理器
RPM的优点
rpm包命名方式
一般源代码的命名
rpm包的命名
rpm包的分类与拆包
包管理工具
RPM包管理器:
程序包管理器:
获取程序包的途径:
rpm包管理
CentOS系统上使用rpm
命令管理程序包:
安装
升级:
降级
降级实例
more

软件包基础

包管理过程中,最常用的操作有:安装、卸载、检查

软件包运行环境

硬件、内核、应用程序的关系

  • 应用程序运行在内核之外,其中/bin/bash就是各种应用程序之一。

  • 内核运行在计算机硬件与应用程序直接。主要工作就是CPU进程、内存的管理,磁盘输入输出等工作。

  • 应用程序和内核直接的沟通需要接口。 
    区分以下两种接口:

  • API:应用程序接口。

    • 现成的开发包的工具,其动态的库以so结尾,静态的库以a结尾。这种接口中包含C语言中的stdio.h或者math.h这种文件,开发者在math.h中定义了sin()函数,所以在写C程序时,可以直接引入math.h文件,之后直接调用sin()函数。

  • ABI:应用程序二进制接口(application Binary interface)。

    windows系统和linux系统在数据存储等方面,都存在差异性。所以如果想在windows上模拟linux环境,或者是在linux系统上模拟windows环境,需要编写模拟的是ABI的应用程序。也就是库级别的虚拟化:

    • 它定义了一组在PowerPC系统软件上编译应用程序所需要遵循的一套规则。主要包括基本数据类型,通用寄存器的使用,参数的传递规则,以及堆栈的使用等等。它涵盖了各种细节:如数据类型、大小和对齐;调用约定(控制着函数的参数如何传送以及如何接受返回值);系统调用的编码和一个应用如何向操作系统进行系统调用;以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等。 
      API与ABI的不同

1.PNG

Java的代码可以在各个平台转移。这是因为java的代码是二次编译。

二进制文件hello.class可以在win或linux上运行。主要依靠jvm。jvm将windows命令转化成它同一的,在linux上也是。 
所以二进制文件hello.class可以转移


包管理器

二进制应用程序的组成部分 
二进制文件 
库文件 
配置文件 
帮助文件 
库文件:共用的程序模块(可无)

程序包管理器

Linux不同系统上的包管理器

系统名 包文件类型 包管理器 使用命令 线上升级机制(命令)
debian/Ubuntu deb文件 dpkg包管理器 dpkg APT(apt-get)
redhat rpm文件 rpm包管理器(RPM Package Manager) rpm,rpmbuild,rpmdb(centos7) YUM(yum)

RPM的优点

  • rpm包是通过预先编译并打包而成的,所以免除了重新编译的困扰

  • 避免错误安装:rpm包安装前,会检查系统的硬盘容量,操作版本等。

  • 更了解软件:该包本身提供软件版本资讯、依赖性软件名称、软件用途说明、软件所含文件等资讯

  • 数据库。RPM的管理方式使用数据库记录RPM文件的相关参数,便于升级、移除、查询与验证。

rpm包命名方式

  • 实例:yum-plugin-security-1.1.30-37.el6.noarch.rpm 
    其中:

    • noarch和硬件平台无关

    • i686支持32位(也可以装在64位)

    • x86支持64位

一般源代码的命名

一般源代码名:name-VERSION.tar.gz|bz2|xz 
其中,VERSION=major.minor.release

rpm包的命名

rpm包命名方式: 
– name-VERSION-release.arch.rpm 
其中 
– VERSION=major.minor.release 
– release:release.OS 
– OS:上例中,el7是表示OS的,代表RHEL7 
– 常见的arch有:

架构系列 常见架构 说明
x86系列 i386,i486, i586, i686 i针对的是intel兼容的CPU的意思,后面的XXX表示不同的等级,不同的等级的CPU在针脚等方面或许会有不同
x86_64系列 x64, x86_64, amd64 针对64位的CPU进行最佳化编译配置。包括Intel Core2以上等级,AMD Athlon64以上等级,都是这类。
powerpc ppc
noarch 没有硬件等级上的限制(跟平台无关) 一般来说,这类型的RPM文件,里面应该没有二进制文件的存在,较常出现的就是属于Shell Script方面的软件

4.png

  • 软件版本号:

    主版本号,此版本号,修正版本号:在主版本的架构下,更动部分原始码内容,而释放出一个新的版本,就是次版本号。在此版本中,修正一些bug等,就是修正版本号。

  • 软件的编译次数:

    为何会有重新编译?因为某些原因(比如某些bug或者安全上的考虑),必须要进行小幅度的打补丁或重设一些编译参数。配置完成后重新编译打包,形成了新的rpm包。不同的打包数就出现了。

  • 硬件平台

    RPM可以适用在不同的操作平台上,但是不同的平台配置的参数还是有所差异的。针对性能比较高的CPU进行最佳化参数的配置,这样才能够适用高性能CPU所带来的硬件加速功能。这就是不同的arch。

rpm包的分类与拆包

如果将所有的功能与模块,放在同一个包中,不利于后来的管理和排错。所以最好将包按照功能等分类或拆开:

Application-VERSION-ARCH.rpm: 主包 
Application-devel-VERSION-ARCH.rpm:开发子包 
Application-utils-VERSION-ARHC.rpm:其它子包 
Application-libs-VERSION-ARHC.rpm:其它子包

包管理工具

在包与包之间,若是有循环依赖的关系,需要有工具来解决以来关系,并安装。这种循环依赖的安装,如果只是一步一步的安装解决依赖关系,那就太耗费人力物力了,这时,就需要使用一些前端工具来自动解决依赖关系。 
解决依赖包管理工具:

工具 作用
yum rpm包管理器的前端工具
apt-get deb包管理器前端工具
zypper suse上的rpm前端管理工具
dnf Fedora 22+ rpm包管理器前端管理工具

RPM包管理器:

程序包管理器:

功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作

  • 1、包文件组成(每个包独有) 
    RPM包内的文件 
    RPM的元数据,如名称,版本,依赖性,描述等 
    安装或卸载时运行的脚本

  • 2、数据库(公共) <===已经安装了的包的详细信息,记录这些东西,以后可能检查会用到。检查现在的程序是否有改变,比如有效用户等。 
    程序包名称及版本 
    依赖关系 
    功能说明包 
    安装后生成的各文件路径及校验码信息

  • 管理程序包的方式:

    • 使用包管理器:rpm 
      使用前端工具:yum,dnf

获取程序包的途径:

(1)系统发版的光盘或官方的服务器; 
CentOS镜像: 
https://www.centos.org/download/ 
http://mirrors.aliyun.com 
http://mirrors.sohu.com 
http://mirrors.163.com 
(2)项目官方站点 
(3)第三方组织:Fedora-EPEL:Extra Packages for EnterpriseLinux 
Rpmforge:RHEL推荐,包很全 
搜索引擎:(专门用于搜索软件包) 
http://pkgs.org 
http://rpmfind.net 
http://rpm.pbone.net 
https://sourceforge.net/

(4)自己制作 
需要对源码分析了解,才能够制作rpm包

** 注意:检查其合法性:来源合法性;程序包的完整性**

rpm包管理

CentOS系统上使用rpm

命令管理程序包:

安装、卸载、升级、查询、校验、数据库维护

安装

rpm {-i|--install} [install  -options] PACKAGE_FILE...
  • -v: verbos

  • -vv

  • -vvv

  • -h:以#显示程序包管理执行进度(50个) 
    常用命令:

rpm  -ivh  PACKAGE_FILE ...

选项:

  • –test:测试安装,但不真正执行安装;dry run模式

  • –nodeps:忽略依赖关系

  • –replacepkgs|replacefiles ##保存原来修改过的配置文件,(除非某配置文件没有,才会写入)

    • replacepkgs:原来损坏的软件和现在要装的包,版本等是相同的。

    • replacefiles:包名都不一样。原来的和现在的,有些库等,会重复,可以用这个。有点类似于升级了。

    • –nosignature:不检查来源合法性 
      RPM总结(一) 1.PNG
      由于现在网络等问题,无法检测signature时,也会说不合法

    • –nodigest:不检查包完整性

    • –noscipts 参数:不执行程序包脚本片断

脚本 名称 对应选项
%pre 安装前脚本 –nopre
%post 安装后脚本 –nopost
%preun 卸载前脚本 –nopreun
%postun 卸载后脚本 –nopostun

升级:

  • 使用格式:

rpm {-U|--upgrade}  [install-options]  PACKAGE_FILE...
rpm {-F|--freshen}  [install-options]  PACKAGE_FILE...
  • 二者区别

  • upgrade:安装有旧版程序包,则“升级”(升级意味着,如果有新版本,老版本就没了) 
    – 如果不存在旧版程序包,则“安装”

    • freshen:安装有旧版程序包,则“升级” 
      – 如果不存在旧版程序包,则不执行升级操作

  • 常用命令

rpm  -Uvh   PACKAGE_FILE ...
rpm  -Fvh  PACKAGE_FILE ...
  • 内核的升级 
    往往不是升级,而是安装新的内核 
    这样新旧内核就可以同时存在,使用新内核过程中出现问题,就继续使用旧内核。

  • 内核也可以降级 
    notes: 
    (1)不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核 
    (2)如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

降级

常在新包不稳定的时候使用降级,获得稳定的版本使用

  • –oldpackage:降级(这个得配置i才能够装的上-i –oldpackage)

  • –force:强行(可以省去好多其他选项:–replacepkgs…..等 )

降级实例

6.8—>6.7 

RPM总结(一) 1.jpg

需要安装的是这两个包 
当前系统内核: 
RPM总结(一) 
RPM总结(一) 1.jpg

1.jpg可以看出,爆出来的这个问题,并不是那么严重 
RPM总结(一) 1.jpg
装完后,系统中同时存在原来的和现在的,这主要是因为原来版本和现在版本安装时,很多文件是相同的,冲突了。所以不会直接覆盖。看/boot启动目录中,都是两个了。 
RPM总结(一)1.jpg

more

rpm -l可以查看包的文件列表,但是看不到脚本 
RPM总结(一)1.jpg

原创文章,作者:m20-吴清玲,如若转载,请注明出处:http://www.178linux.com/39858

(1)
m20-吴清玲m20-吴清玲
上一篇 2016-08-24 21:21
下一篇 2016-08-24 21:21

相关推荐

  • httpd2.2基础安装

    编译安装前,首先要确认开发包组已经装上。 开发包组: Developments tools server platform development(centos 7) 并且将apr 与 apr-unil 装上。这是httpd 可移植运行所必须用到的组件.这里举例说明的是httpd2.2版本。 若是安装httpd2.4以上版本的话,还要安装pcre库。pcre…

    2017-04-24
  • 高性能集群软件Keepalived

    Keepalived的介绍以及安装与配置

    2017-09-18
  • Linux LVM介绍及管理

    什么是LVM? LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性。系统管理员可以通过LVM轻松的管理磁盘分区,如:将若干个磁盘分区或物理磁盘连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以…

    Linux干货 2016-08-30
  • Ubuntu 葵花宝典入门篇——要练此功,可能得自宫?

        此文章给初入ubuntu的小伙伴们写一篇装机篇和使用心得。第二期会给小伙伴介绍软件安装篇。如题目所说,乌班图确实是葵花宝典,练好了天下无敌。只是如果要安装UBUNTU系统,只是在虚拟机上跑跑是不够的,你必须在实际的桌面环境和服务器环境上才能体会到它的运行方式,而桌面环境和服务器环境几乎差不多。所以安装桌面版可以更好的理解…

    Linux干货 2017-03-26
  • Shell脚本-循环基础

    Shell脚本-循环基础 背景: 正在学习Shell脚本之循环,发现Shell的循环和其他编程语言大同小异,逻辑上都是相通的,但在使用格式上却有点不同,在学习完Shell循环后,将学习的心得体会记录下来,以备今后复习。 介绍: 什么是Shell脚本:       shell script是利用shell的功能…

    2017-08-26
  • 8-10 bash变量浅谈

    8-10 作业 一、脚本 1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。 2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中 3、编写脚本/root/bin/disk.…

    Linux干货 2016-08-15