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

相关推荐

  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@UncleZ ~]# who | cut -d' ' -f1 | uniq -c 2、取出最后登录到当前系统的用户的相关信息。 [roo…

    Linux干货 2016-12-17
  • Linux哲学思想以及自己的理解

    Linux哲学思想: #1 一切接文件 #2  单一目的小程序 #3 组合小程序完成复杂任务 #4 文本文件保存配置信息 #5 尽量避免捕获用户接口 #6 提供机制,而非策略 自己的理解:(玩Linux时间比较短,没什么太深刻的理解) #1 一切皆文件 我们说“Linux中一切皆文件”直观地可以这样理解:所有的东西,设备、内存都模拟成文件,我们可以…

    Linux干货 2016-08-15
  • web service之http协议

    一.概述 1.web应用的核心是http协议(HyperText Transfer Protocol),http协议的由两部分组成,客户端程序和服务器端程序,通过交换http报文进行会话。web页面则是由对象(也叫资源)组成的,对象直白的说就是一个个的文件,而这些对象可以通过URL引用,URL由两部分组成,存放对象的主机名和对象的文件路径,而这些对象都存储在…

    Linux干货 2016-11-03
  • 设计模式(五)适配器模式Adapter(结构型)

    1. 概述:          接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。         例子1:iphone…

    Linux干货 2015-06-25
  • 马哥教育网络班21期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@centos ~]# mke2fs -t ext4 -b 2048 -m 2&…

    Linux干货 2016-08-01
  • LAMP分离环境的搭建(最新版本的mysql+php+http源码编译安装)

    实验者:FrankStar      实验日期:20150628 任务:主要是实现在Linux环境下配置LAMP环境,利用VMware+centos6.4实现,将LAMP分离为多台主机; 附注:由于大家的环境不一样,可能有些人已经安装了这个包或者那个软件,所以调试的环境结果也不一样,为了尽量能模拟到 可能出现的所有问题,在编译会…

    Linux干货 2015-06-30