Linux系统程序包管理—rpm

 概述:

     本章内容:软件的运行环境,软件包基础,rpm包管理,yum管理,定制yum仓库,编译安装

一、软件运行环境

    1.□API:Application Programming Interface (应用程序开发接口)

            POSIX:Portable OS(国际标准)

       程序源代码–> 预处理–> 编译–> 汇编–> 链接

            静态编译:

            共享编译:.so

       ABI:Application Binary Interface(应用二进制程序接口)

          Windows与Linux不兼容

               linux:文件格式:ELF(Executable and Linkable Format)

               win:文件格式:exe,msl PE(Portable Executable)

        □库级别的虚拟化

              Linux: WINE(提供模拟windows的库,运行win环境)

              Windows: Cywin(提供linux的运行环境)

     2.开发语言

        □系统级开发

            C/C++(依赖于c库);

            httpd,nginx,vsftpd,go

        应用级开发

            java(依赖于jvm虚拟机)

            Python(openstack云站),php,perl(依赖于per解释器),ruby

     3.程序格式:

       ▷c/c++

          源代码:文本格式的程序代码;

          编译开发环境:编译器,头文件,开发库

          二进制格式:文本格式的程序代码–>编译器–>二进制格式(二进制程序、库文件、配置文件、帮助文件)

      ▷java/Python

           源代码:编译能够在其虚拟机(jvm/pvm)运行的格式;

           开发环境:编译器、开发库

           二进制

      ▷项目构建工具

             c/c++:make      jave:maven

二、包管理

     1.二进制应用程序的组成部分:

           二进制文件、库文件、配置文件、帮助文件

   2.程序包管理:

      ▷源代码–>目标二进制格式(二进制程序、库文件、配置文件、帮助文件)–>组织成为一个或有限几个“包文件”(安装,升级,卸载,查询,校验)

      ▷程序包管理器:

            deblan: dpt,dpkg  以".deb"后缀

            redhat: rpm (redhat package manager) 以 ".rpm"后缀 

            S.u.S.E:rpm, ".rpm"命令

     3.包命令格式

        □源代码

            name-VERSION.tar.gz|bz2|xz

                VERSION: major(主版本号).minor(次版本号).release(发行号)

        rpm包命名格式

             name-VERSION-release.arch.rpm

              VERSION: major.minor.release(rpm包发行号)

             changelog文档(内容修复改进的相关文档)

包.png

        例:bash-4.2.46-19.el7.x86_64.rpm

               release:release.OS

             常见的arch:

               x86: i386, i486, i586, i686

               x86_64: x64, x86_64, amd64powerpc: ppc

               跟平台无关:noarch (适用于所有平台)

     4.包:分类和拆包

             Application-VERSION-ARCH.rpm: 主包

             Application-devel-VERSION-ARCH.rpm  开发子包

             Application-utils-VERSION-ARHC.rpm  其它子包

             Application-libs-VERSION-ARHC.rpm   其它子包

主支包.png

      包之间:可能存在依赖关系,甚至循环依赖

      自动解决依赖包管理前端工具

            yum:rpm包管理器的前端工具

            apt-get:deb包管理器前端工具

            zypper: suse上的rpm前端管理工具

            dnf: Fedora 18+ rpm包管理器前端管理工具

    5.库文件

      □查看二进制程序所依赖的库文件:

            ldd /PATH/TO/BINARY_FILE

      管理及查看本机装载的库文件:

            ldconfig

            /sbin/ldconfig-p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系

            配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

            缓存文件:/etc/ld.so.cache

     6.包管理器

      □程序包管理器

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

      程序包的组成清单(每个程序包单独实现)

             RPM包内的文件清单

             RPM的元数据,如名称,版本,依赖性,描述等

             安装或卸载时运行的脚本

      数据库(公共)  路径:/var/lib/rpm 

             程序包名称及版本

             依赖关系

             功能说明

             包安装后生成的各文件路径及校验码信息

   7.程序包的来源

      □管理程序包的方式:

            使用包管理器: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 Enterprise Linux

                Rpmforge:RHEL推荐,包很全

                搜索引擎:

                     http://pkgs.org

                     http://rpmfind.net

                     http://rpm.pbone.net

                     https://sourceforge.net/

            (4) 自己制作

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


三、CentOS 系统上rpm命令管理程序包

  1.安装、升级、卸载、查询和校验、数据库维护  (都是通过rpm命令来实现的)

      rpm命令:rpm [OPTIONS] [PACKAGE_FILE]

            安装:-i,–install

            升级:-U,–update,-F,–freshen

            卸载:-e,–erase

            查询:-q,–query

            校验:-V,–verify

            数据库维护:–builddb,–initdb

     2.安装

         □ rpm {-i|–install} [install-options] PACKAGE_FILE…

                   -v: verbose 显示详细信息

                   -vv: 更详细的输出

            rpm -ivh PACKAGE_FILE(真正安装执行操作使用的命令)

安装.png

         □[install-options]

                -h: hash marks 输出进度条;每个#号表示2%的进度

                –test: 测试安装,检查并报告依赖关系及冲突关系,但不真正执行安装;称为dry run(干跑)模式

test.png

                –nodeps:忽略依赖关系,不建议;

                –replacepkgs:替代原来的包,重新安装(先把由原来的包删除再重装)

                –nosignature: 不检查包签名信息,不检查来源合法性

                –nodigest:不检查包完整性

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

                    注意:rpm自带四类脚本

                          %pre:安装前脚本;   –nopre

                          %post:安装后脚本;  –nopost

                          %preun:卸载前脚本; –nopreun

                          %postun:卸载后脚本;–nopostun

    3.升级

      □rpm {-U|–upgrade} [install-options] PACKAGE_FILE…

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

              -U(upgrade):安装有旧版程序包,则“升级”

                               如果不存在旧版程序包,则“安装”

              -F(freshen):安装有旧版程序包,则“升级”

                               如果不存在旧版程序包,则不执行升级操作

      □升级命令:

         rpm -Uvh PACKAGE_FILE …

         rpm -Fvh PACKAGE_FILE …

              –oldpackage:降级(回滚操作)

              –force: 强行升级

      注意:

        (1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,可以直接安装新版本内核;

        (2) 如果源程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留。

   4.卸载

       移除已安装的程序包

       rmp {-e|–erase}[–allmatches][–nodeps][–test] PACKAGE_NAME

      (注意:卸载和查询是包的名,因为包已经存在了;而安装和升级,包是不存在的,所以是包的文件路径)

          简单用法:rpm -e PACKAGE_NAME…

       –allmatches:卸载所有匹配名称的程序包各版本

       –nodeps:忽略依赖关系

       –test:测试卸载,dry run 模式

      5.查询

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

        ▷[select-options]

              -q PACKAGE_NAME :查询某包或某些包是否安装

              -qa: 查询已安装的所有包

-a.png

              -qf FILE: 查看指定的文件由哪个程序包安装生成

-f.png

              -p PACKAGE_FILE:针对尚未安装的程序包文件做查询操作

              –whatprovides CAPABILITY(能力):查询指定的CAPABILITY由哪个包所提供

              –whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

          ▷rpm2cpio 包文件|cpio–itv预览包内文件

          ▷rpm2cpio 包文件|cpio–id “*.conf”释放包内文件

      □[query-options]查询选项

              –changelog:查询rpm包的changelog(变更记录)

              -c: 查询指定的程序包的配置文件

-qc.png

              -d: 查询程序包安装完成后所生成的帮助文档

-qd.png

              -qi,-info: information  程序包相关的信息,版本号,大小,所属的包组等

-qi.png

              -l,–list: 查看指定的程序包安装后生成的所有文件列表;

              –scripts:查看程序包自带的脚本片断

              -R,–requires: 查询指定的程序包所依赖的CAPABILITY;

              –provides: 列出指定程序包所提供的CAPABILITY

-pro.png

    □用法:

          -qi PACKAGE; -qf FILE; -qc PACJAGE; -ql PACKAGE; -qd PACKAGE

          -qpi PACKAGE_FILE; -qpl PACKAGE_FILE; -qpc PACKAGE_FILE,.. 

    6.校验:     

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

        常见用法:rpm -V PACHAGE_NAME

        当没有输出结果时表示软件包完整ok,当有相应的结果输出表明对应的内容有修改,及具体如下:

          S:file Size differs(文件的容量大小是否被改变)

          M:Mode differs (includes permissions and file type)文件的类型或属性是否被改变;

          5:digest (formerly MD5 sum) differs  这是一种指纹内容已经不同;

          D:Device major/minor number mismatch 装置的主/次代码已经改变;

          L:readLink(2) path mismatch  路径已被改变

          U: User ownership differs  文件的属主已被改变

          G:Group ownership differs  文件的属组已被改变

          T:mTimediffers 文件的创建时间已被改变

          P:capabilities differ 

    □包来源合法性验正及完整性验正

           完整性验正:SHA256

           来源合法性验正:RSA

         ▷获取并导入信任的包制作者的秘钥

                对于CentOS发行版来说:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 

         ▷验证:

                 (1)安装此组织签名的程序时,会自动执行验证;

                (2)手动验证:rpm -K PACKAGE_FILE

验证.png

    公钥加密:

           对称加密:加密、解密使用同一密钥;

           非对称加密:密钥是成对儿的

                public key: 公钥,公开所有人

                secret key: 私钥, 不能公开

     导入所需要公钥:

           rpm -K |checksigrpmfile检查包的完整性和签名

           rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

           CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7

           rpm -qagpg-pubkey*

     7.数据库重建

      rpm数据库路经:/var/lib/rpm

            查询操作:通过此处得到数据库进行

     rpm {–initdb|–rebuilddb}

数据库.png

            获取帮助:CentOS6 man rpm

                         CentOS7 man rpmdb 

             –initdb: 初始化数据库。当前无任何数据库,则新建之;当前有时不执行任何操作。

             –rebuilddb:重新构建。无论当前存在与否,都会直接重新创建数据库。

原创文章,作者:zhumengxiaotao,如若转载,请注明出处:http://www.178linux.com/37717

(0)
zhumengxiaotaozhumengxiaotao
上一篇 2016-09-01
下一篇 2016-09-01

相关推荐

  • Linux网络管理之网卡别名及网卡绑定配置

    在日常的运维工作当中,有时候需要在一块物理网卡上配置多个IP地址,这就是网卡子接口的概念,以及多块网卡实现网卡的绑定,通俗来讲就是多块网卡使用的一个IP地址,下面我来详细说明实现的过程。 &创建网卡子接口 在CentOS系统当中网络是由NetworkManager这个服务来管理的,它提供了一个图形的界面,但此服务不支持物理网卡子接口的设置,所以在配置网卡子接…

    系统运维 2016-09-02
  • bash功能特性二 命令别名和历史命令

    一、历史命令     bash提供存储历史命令的功能,下面来详细介绍一下。     1、history命令         命令格式:history [options]   &nb…

    Linux干货 2015-04-21
  • CentOS进程管理

    CentOS进程管理 笔记 Linux系统中的基本运行单位是进程,通过对系统系统中的进程的管理能够对系统的实时运行状态进行了解和调度。Linux中提供了用于查看、调整和停止进程的命令。本文仍然以RHEL6说明Linux系统的进程管理。 CentOS进程管理 一、进程概述 二、查看进程 1、使用ps命令 2、top命令 一、进程概述 程序是保存在存储介质中的可…

    Linux干货 2017-05-15
  • lvs–各类型的原理及实现—(原理篇)

    前言:    LVS即是linux虚拟服务器,是一个虚拟的服务器集群系统,目的是使用集群技术和linux操作系统实现一个高性能、高可用的服务器。采用IP负载均衡技术和基于内容请求分发技术,将请求负载均衡地转移到不同的服务器上执行,从而将一组服务器构成一个高性能、高可用的虚拟服务器。此篇的内容只包含两种较为常用的LVS技术,分别是LVS-N…

    Linux干货 2016-10-27
  • N26第一周博客作业

    1.       计算机的组成及其功能 计算机由以下5部分组成: 控制器:控制器是计算机的中枢神经,功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各个部分工作及内存与外存的访问等。 运算器:运算器功能主要是对数据进行各种算术和逻辑运算,即对数据进行加工处理。…

    Linux干货 2016-12-28
  • 程序包管理初步

    升级:       rpm {-U|–upgrade} [install-options] PACKAGE_FILE …                -U:升级或安装;       rpm {-…

    Linux干货 2016-12-31