程序包管理之----rpm

程序是什么?指令+数据也好,算法+数据结构也罢。它的存在形式有两种:node

    1.源代码:包含了整个应用程序的编程语言的全部代码的文本文件linux

    2.二进制:将源代码通过一系列转换以后获得的直接执行的文件算法

其中,使用源代码安装的过程以下:数据库

  预处理(用到预处理器) --> 编译(编译器) --> 字节码Bitcode 进行汇编(汇编器) --> systemcall直接运行;libcall须要连接(连接器);最终获得可执行的二进制程序文件apache

  汇编时,不同的硬件每每不能兼容互通。所以诞生了一个国际化标准:编程

  POSIX:Portable Operating System  可移植操做系统。至于IX是向unix致敬一下下ruby

  最终二进制文件到底能不能执行,取决于计算机的ABI接口。在不一样OS上有着明显的差别,类unix系统上,ABI每每是ELF格式,若是是Windows系列 ;通常是exe或者msi格式.服务器

咱们再来回顾一下编程语言的分类数据结构

应用级编程语言:架构

    Java(作应用程序很强,作系统菜鸡)

      hadoop2-大数据处理平台,hbase-数据库,ELK-日志查询和分析检索系统

      这些软件运行环境须要专有的一个环境叫:JVM

    Python(离底层硬件距离太远,刚开始太消耗系统资源。如今来讲,消耗已经能够忽略了 )

      Openstack--云栈,saltstack--自动化运维管理工具 运行环境:PVM

    perl、ruby(日本流行,开发不少曾经的经典游戏。)

    PHP、go

    而JVM PVM 和其余应用级语言所须要的解释器,都是由C语言开发的;

系统级编程语言:

    C/C++

      Linux、Unix的内核编程语言

      编译开发环境:预处理器、编译器、头文件、开发库文件(可以让编译库运行的库)

    (而像Java或者Python等应用级语言的开发环境:预处理器、编译器、开发库文件;)

一般状况下,源代码文件有多个,这些文件之间存在着必定的关联关系;咱们称之为依赖关系;


软件项目构建工具:

  C/C++:make

  Java:maven

  Python:buildout

尽管有了这些构建工具,编译源代码仍是十分困难,所以有一些人把经常使用的代码打包封装成程序包,发布开源社区,方便使用


程序包的管理器:


不一样的linux发行版本,有着不一样的程序包管理器

  Debian:dpt-Debian Package Toolkits。全部软件包封装成.deb后缀名的包文件,命令行工具 dpkg

  Redhat:rpm-Redhat Package Manager ,rpm工具,.rpm后缀名

    rpm称为linux的程序包管理器的行业标准

    开始使用的是perl语言编写,后来用C语言重写了rpm,公布后更名为rpm is package manager。

  Slackware(S.u.S.e):用的是rpm,可是对rpm进行了修改,以致于获得Redhat承认


  Gentoo:从内核开始,能够供用户任意选择挑选软件;

          采用的包管理器 : FreeBSD 的 portage的程序包管理机制,emerge工具

  Archlinux:pacman


以CentOS为例,介绍下rpm程序包管理器的相关内容:

 1.程序包的命名规则:

  源代码包:software_name-VERSION.tar.gz

    VERSION:major.minor.release

      major:主版本号,一般表明重大功能改进的版本分支;

      minor:次版本号,表明在某个版本的分支中的某个功能发生变化;

      release:发行版本号,修复了某些BUG或者对某段代码进行了优化;

  rpm程序包:  

    源代码包:software_name-VERSION.src.rpm

    二进制文件包:

      software_name-VERSION-[release].[os].arch.rpm

        VERSION:major.minor.release

        [release]:rpm包的发行版本号

        [os]:软件所支持的操做系统版本信息,el六、el七、suse十一、fedora22...

        arch:硬件架构类型:i386 i686 x64(amd64) ppc sparc noarch...

        例如 gcc-4.8.5-4.el7.x86_64.rpm

在制做rpm程序包的时候,一般其制做者会采用分包技术来构建rpm程序包:根据程序的不一样功能,构建多个程序包;被分包的通常分为两类

    1.主程序包:

      software_name-VERSION-[release].[os].arch.rpm

    2.附属功能包:

      software_name-function-VERSION-[release].[os].arch.rpm

    通常来说,主程序包和附属功能包具备相同版本号 发行版本号 操做系统要求和硬件架构类型

    因此 主程序包每每被全部的附属程序包所依赖;依赖关系:A --> B -->C D --> A 构成一个依赖黑洞 所以rpm存在着诸多'不与人为善'的弊端


获取程序包的途径:

  1.系统发行版的光盘,或镜像

  2.官方的文件服务器或者镜像站点:

    http://mirrors.aliyun.com

    http://mirrors.sohu.com

    http://mirrors.163.com

    http://mirrors.tuna.tsinghua.edu.cn

    http://mirrors.hust.edu.cn

    ...

  3.某项目的官方站点 例如apache

  4.第三方组织制做的rpm程序包站点

    Fedora EPEL:红帽官方的社区组织,在镜像站点中也包含EPEL镜像

    搜索引擎:

      http://pkgs.org  基本能够搜索到全部

      http://rpmfind.net 法国的一个站点

      http://rpm.pbone.net

  5.本身制做 咯

  建议:在得到程序包以后实施校验,完整性检查:

    1.来源合法性

      经过程序提供者的数字签名加密的数据,咱们能够经过其公钥进行解密验证;

    2.程序包完整性

      sha-1校验码

rpm命令行工具:

  安装 卸载 升级(降级) 查询 文件校验

  【通用选项】:

    -v --verbose:显示安装历程详情,仅仅显示安装软件名

    -vv  显示很是详细的操做信息

  安装:

    rpm {-i|--install} [install-options] PACKAGE_FILE ...

    [install-options]

     -h --hash      用50个“#”来表示安装进度

     --test:      并非真正的安软件包,仅仅是测试是否在安装时可以正常完成,dry run

     --nodeps :    忽略由于依赖关系致使的安装错误,不建议使用

     --replacefiles  安装软件包时,软件包中的文件会直接将原来安装的文件替换

     --replacepkgs   不卸载软件包 而是从新装一遍

     --noscripts    不运行任何脚本

     --nopre

     --nopost

     --nosignature   不考虑软件包的来源是否合法

     --nodigest     不考虑软件包是否完整

  升级:

    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

      能够升级也能够全新安装

    rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

      仅仅是对已经安装的低版本的程序包进行升级安装

      经常使用选项与安装相同

      特殊的选项:

        --oldpackage   降级安装

        --force      强制升级

  注意:

    1.强烈建议:不要对内核进行升级操做;linux支持多内核

    2.升级后带来文件的变化,系统默认不会直接更改以前的配置文件,新程序包的配置文件会被重命名,一般是:FILENAME.rpmnew

  卸载:

   rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

     --allmatches:卸载全部匹配指定名称的程序包的各个版本

     --nodeps:忽略依赖关系

     --test:测试卸载

     --nopreun 

     --nopostun

  查询:

    rpm {-q|--query} [select-options] [query-options]

      [select-options]

        -a,--all:查询全部已安装的程序包名

 

        -f,--file FILE 查找指定的文件是由哪一个程序包提供的

        -p,--package PACKAGE_FILE : 对还没安装的程序包文件中执行查询操做

        --whatprovided CAPABILITY 查询指定的 CAPABILITY是由哪一个程序包提供的

        --whatrequires CAPABILITY

      [query-options]

        -c,--configfiles:  查看相关配置文件

        -i,--info          查询程序包相关信息,包括版本号,发行号,等等

        -l,--list          列表显示安装程序包会生成哪些文件

        --providers:       列出指定程序包提供的全部的 CAPABILITY;

        -R,--requires      查询指定的程序包的依赖关系

        --scripts:        查询程序包的脚本

  校验:

    rpm {-V|--verify} [select-options] [verify-options]

    [select-options] 与查询的[select-options]相同

  认证:

   --import PUBKEY ...导入相应的/PATH/TO/KEY_FILE

   {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE ...

    手动测试 验证软件包的合法性

  数据库管理:

    数据库的初始化和重建:/var/lib/rpm

      rpm {--initdb|--rebuilddb}

        [--dbpath DIRECTORY]

相关文章
相关标签/搜索