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)
上一篇 2016-08-24 21:21
下一篇 2016-08-24 21:21

相关推荐

  • 磁盘管理

    一、磁盘结构     设备文件         I/O Ports: I/O设备地址         一切皆文件:    &nbs…

    Linux干货 2016-09-01
  • 20160805作业-正则表达式

    http://note.youdao.com/yws/public/redirect/share?id=1e40165dc16523400e14433e71683963&type=false

    Linux干货 2016-08-08
  • N26 – 第二周作业

    1、文件管理类命令和常用使用方法 2、bash命令执行后返回值,和目录展开:     命令执行返回值,存储在“$?”这个特殊变量内。可以使用echo显示或在shell脚本中引用。其中0表示正常执行完成,1-255表示不同的错误类型。     目录展开的特殊符号:  &n…

    Linux干货 2016-12-30
  • 用户和组的简介

     在第二周的学习中,关于用户和组是一个难点,也是重点,本篇博客则是对用户和组的简单阐述,如有错误或不足还请各位大牛指出,在此谢过! 1、用户 # 1.1用户的定义      通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(…

    Linux干货 2017-07-22
  • 用shell脚本实现每天定时收集全网日志到一台服务器

    需求 现在公司有这样一个需求,需要收集每天全网运行业务的设备上的某个特定目录底下的日志到一台服务器(这台服务器我们简称logserver),这并在这台logserver上生成以日期为名字的目录 解决思路: 在logserver的crontab里设置两个脚本,在当日晚上23:30执行脚本1收集当日即将被删除的全网脚本;在并在早上8:30执行脚本2,收集昨日全网…

    Linux干货 2015-07-27
  • sed基本用法详解

    一、sed介绍:        sed是非交互式的编辑器,同时又是面向字符流的,一次处理一行文本。当前输入的行被缓存至一个被称为模式空间(pattern space)的内存空间中,与给定的模式进行比对,若不匹配,则将内容输出至屏幕,之后读取第二行;若匹配,则执行编辑命令,命令执行完成后,将模式空间中…

    Linux干货 2016-08-10