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)
上一篇 2016-09-01 08:50
下一篇 2016-09-01 08:50

相关推荐

  • N22-第五周博客作业

    1、显示当前系统上root、fedora或user1用户的默认shell; [root@bogon ~]# grep -E  "^(root|fedora|user1)" /etc/passwd  | cut -d: -f1,7r…

    Linux干货 2016-09-26
  • mysql备份还原

    一、前言 数据对于一个公司来说有多重要这点不说大家也知道,数据还在,服务崩溃还可重建。为什么要备份?很简单,天灾人祸。比如硬件故障,软件故障,自然灾害,黑客攻击或自身误操作等因素。这时候备份,恢复数据就显得至关重要了。 二、基础概念 由于备份与恢复需要用到一些必要的知识,故在此先讲解下 2.1二进制日志 myql日志有多种,其中二进制日志文件对数据恢复有很大…

    Linux干货 2015-11-30
  • 第六周作业 bash编程学得好痛苦啊,啊啊啊~~需要挺住!

    请详细总结vim编辑器的使用并完成以下练习题 VIM很强大,但是万变不离其宗,最核心的三模式以下图表示: 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s/^[[:blank:]]\+.*/\0#/g 2、复制/boot/grub/grub.conf至/…

    Linux干货 2016-12-19
  • RAID常见级别及特性

    磁盘阵列(Redundant Arrays of Independent Disks,RAID),通过软件或者硬件的手段将多个磁盘整合成一个磁盘来使用,以此来提高磁盘的性能,并提供数据冗余的功能。 目前常见的RAID等级: raid0,被称为条带卷。 条带卷,我们可以通过名字来想象:RAID0通过把文件切割之后把数据像一条带子一样平铺在每个磁盘之上。 由于文…

    Linux干货 2016-01-05
  • 第九周

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;   1 #!/bib/bash   2 #   3 a=0   4 x=0   5 y=…

    Linux干货 2017-05-25
  • Linux基础之部分命令使用实例一

    1、 Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 常用有:cp、mv、rm  cp [OPTION] SOURCE DEST //复制    option:      -i:交换式,用来提醒用户是否覆盖,当将源文件复制并粘贴到目的路径时,如果目的路径…

    Linux干货 2016-11-08