RPM软件包管理

             

                              RPM 软件包管理

1、rpm软件包管理:

       本章内容:

           软件运行环境

           软件包基础

           rpm包管理

           yum管理

           定制yum仓库

           编译安装

  Linux程序包管理:

       API:Application program interface (应用编程接口)

       ABI:Application binary interface  (应用二进制接口)

           API:Application program interface

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

             静态编译 和 共享编译

              ABI:Application binary interface

                 windows 和 Linux 不兼容

                 Windows PE

                 Linux ELF

                 库级别的虚拟化:

                 Linux:wine

                 Windows:cywin

      2、包管理器:

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

                  二进制文件;

                  库文件;

                  配置文件;

                  帮助文件;

              程序包管理器:

                  debian:deb文件,dpkg包管理器

                  redhat:rpm文件,rpm包管理器

                  S.U.S.E:rpm文件,rpm包管理器

                  gentoo:ports文件

     3、包命名:

              使用rpm机制封装的软件包文件一般使用“软件名-软件版本-发布次数.硬件平台类型.rpm”的文件名形式:

              例如:bash-4.2.46-12.el7.x86_64.rpm

                    basesystem-10.0-7.el7.centos.noarch.rpm

              其中硬件平台通常为“i386 i586 i686 X86_64 或 noarch(不区分硬件平台)”

       4、包命名和工具:

                主包:libasyncns-0.8-7.el7.x86_64.rpm

                支包:libasyncns-devel-0.8-7.el7.i686.rpm

                支包命名:function  devel  utils libs

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

                解决依赖包管理工具:

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

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

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

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

         5、库文件:

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

               ldd  /PATH/TO/BINARY_FILE

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

               ldconfig

               /sbin/ldconfig -p 显示本机已经缓存的所有可用库文件;

           6、程序包管理器:

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

                 (1)程序包的组成清单(每个程序包都单独实现);

                       文件清单

                       安装或卸载时运行的脚本

                  (2)数据库(公共)

                       程序包的名称和版本

                       依赖关系

                       功能说明

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

                       /var/lib/rpm:rpm包的数据库文件存放路径;

                  示例:

                  rpm包的数据库文件

                    [root@centos7 rpm]# ll

                    total 70248

                    -rw-r–r–. 1 root root  4120576 ago 19 05:55 Basenames

                    -rw-r–r–. 1 root root    16384 ago 19 05:43 Conflictname

                    -rw-r–r–. 1 root root   311296 ago 23 06:59 __db.001

                    -rw-r–r–. 1 root root    90112 ago 23 06:59 __db.002

                    -rw-r–r–. 1 root root  1318912 ago 23 06:59 __db.003

                    -rw-r–r–. 1 root root  1130496 ago 19 05:55 Dirnames

                    -rw-r–r–. 1 root root    32768 ago 19 05:55 Group

                    -rw-r–r–. 1 root root    24576 ago 19 05:55 Installtid

                    -rw-r–r–. 1 root root    81920 ago 19 05:55 Name

                    -rw-r–r–. 1 root root    40960 ago 19 05:55 Obsoletename

                    -rw-r–r–. 1 root root 61956096 ago 19 05:55 Packages

                    -rw-r–r–. 1 root root  2154496 ago 19 05:55 Providename

                    -rw-r–r–. 1 root root   536576 ago 19 05:55 Requirename

                    -rw-r–r–. 1 root root   135168 ago 19 05:55 Sha1header

                    -rw-r–r–. 1 root root    81920 ago 19 05:55 Sigmd5

                    -rw-r–r–. 1 root root     8192 ago 19 05:55 Triggername

                    [root@centos7 rpm

                  

            7、获取rpm程序包的途径:

                    (1)系统发行版的光盘或官方的文件服务器(或镜像站点):

                          http://mirrors.aliyun.com

                          http://mirrors.sohu.com

                          http://mirrors.163.com

                     (2)项目的官方站点

                     (3)第三方组织:

                            搜索引擎:

                              http://pkgs.org

                              http://rpmfind.net

                              http://rpm.pbone.net

                      (4)自己制作rpm包:

  8、rpm包管理:

   centos系统上使用rpm命令管理程序包:

       安装、卸载、升级、查询、校验、数据库维护等;

   rpm  [options]  PACKAGE_FILE …

   安装: -i 在当前系统中安装(install)一个新的rpm软件包;

     rpm  -ivh  PACKAGE_FILE……

   -U:检查并升级系统中的某个软件包,若该软件包原来未安装,则等同于-i选项;

   -e:卸载指定名称的软件包;

   -F:检查并更新系统中的某个软件包,若该软件包原来并未安装,则放弃安装;

   –force 强制安装某个软件包,当需要替换现在已安装的软件包及文件、或者安装一个比当前使用的软件版本更旧的软件时,可以使用此选项;

   –nodeps在安装、升级或卸载一个软件包时,不检查与其他软件包的依赖关系;

   -h:在安装或升级软件包的过程中,以“#”号显示安装进度;

   -v:显示软件安装过程中的详细信息;

   -vv:显示软件安装过程中更详细的信息;

   -V:校验安装后的文件有没有被篡改;

   –test:测试安装,但不真正执行安装;

   –nosignature:不检查来源合法性;

   –nodigest:不检查包完整性;

   –nosciptis:不执行程序包脚本片段;

         %pre:安装前脚本:–nopre

         %post:安装后脚本:–nopost

         %preun:卸载前脚本:–nopreun

         %postun:卸载后脚本:–nopostun

   –oldpackage:降级程序包;

  升级:

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

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

     -U:升级或安装;

     -F:升级;

     rpm -Uvh PACKAGE_FILE

     rpm -Fvh PACKAGE_FILE

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

     (2)如果某源程序包的配置文件安装后曾被修改,升级时,新版的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版的配置文件重命名(FILENAME.rpmnew)后提供;

卸载:

    rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–test] PACKAGE_NAME …

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

          –nodeps:忽略依赖关系;

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

rpm查询:

   rpm命令的查询功能主要通过“-p”选项实现,主要针对当前系统中的已经安装的软件包;

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

   [select-options]

     PACKAGE-NAME:查询指定的程序包是否已经安装,及其版本;

       -qa:–all 查询所有已经安装过的rpm包;

       -qf:file 查询指定的文件是由哪个程序包安装的;

       -qi:info 查询指定软件包的名称、版本、许可协议、用途描述等详细信息;

       -ql:list 显示指定的软件包在当前系统中安装的所有目录、文件列表;

       -qc:configfile 显示指定软件包在当前系统中安装的配置文件列表;

       -qd:docfiles 显示指定软件包在当前系统中安装的文档文件列表;

   使用“-qp”选项时,需要使用rpm包文件作为参数,主要查询系统中未安装的软件包信息;

        -qpi:查询指定软件包的名称、版本、许可协议、用途描述等详细信息;

        -qpl:查询指定的软件包在当前系统中准备安装的所有目录、文件列表;  

        -qpc:查询定软件包在当前系统中准备安装的配置文件列表;

        -qpd:查询指定软件包在当前系统中准备安装的文档文件列表; 

校验rpm包:

       包来源合法性验证和完整性验证:

       来源合法性验证:

       完整性验证:

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

          对于centos发行版来说导入公钥的方法:

          [root@centos7 ~]# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

          验证:

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

            手动验证:rpm -k PACKAGE_FILE

            [root@centos7 Packages]# rpm -K zsh-5.0.2-7.el7.x86_64.rpm 

            zsh-5.0.2-7.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

rpm数据库重建:

    rpm 管理器数据库路径:/var/lib/rpm

    获取帮助:

        centos6:man rpm   

        centos7:man rpmdb  

        rpm {–initdb|–rebuilddb} [-v] [–dbpath DIRECTORY] [–root DIRECTORY]

             –initdb :初始化数据库,当前无任何数据库可初始创建一个新的,当前有时不执行任何操作;

             –rebuilddb :重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;

             rpm  –initdb

             rpm  –rebuilddb

   yum创建:

        centos : yum dnf

        yum repository : yum repo

        存储了众多rpm包,以及包的相关的元数据文件(放置于特定的目录下:repodata):

        文件服务器:

            ftp://

            http://

            nfs://

            file:///

         yum客户端:

            配置文件:

            /etc/yum.conf  :yum主配置文件为所有仓库提供公共配置

            /etc/yum.repos.d/*.repo :为仓库的指向提供配置

           yum仓库指向的定义:

            [repositoryID]

            name=some name for this repository

            baseurl=url://path/to/repository

            enabled={1|0}

            gpgcheck={1|0}

            enabedgroups={1|0}

            failovermethod={roundrobin|priority}

                 默认为:roundrobin,意为随机挑选;

            cost=

                默认为:1000

       示例:

             1 [base]

             2 name=base

             3 baseurl=http://10.1.0.1/cobbler/ks_mirror/7/

             4         file:///mnt

             5 enabled=1

             6 gpgcheck=1

             7 gpgkey=http://10.1.0.1/cobbler/ks_mirror/7/

             8 

             9 

            10 [fedora]

            11 name=fedora

            12 baseurl=http://10.1.0.1/fedora-epel/7/x86_64/

            13 enabled=1

            14 gpgcheak=0

            15

     yum命令的用法:

            yum [options] [command][package…..]

          yum-config-manager  –disable “仓库名”  禁用指定的仓库

          yum-config-manager  –enable  “仓库名” 启用指定的仓库

          示例:

          [root@centos7 yum.repos.d]# yum-config-manager –disable base

          [root@centos7 yum.repos.d]# yum-config-manager –enable base

          显示仓库列表:

          repolist [all|enable|disable]

          [root@centos7 yum.repos.d]# yum repolist

          Loaded plugins: fastestmirror, langpacks

          repo      repo name                 status

          base        base                    9.007

          fedora       fedora                     0

          repolist: 9.007

          [root@centos7 yum.repos.d]# 

          显示所有程序包:

          list

          示例:

          [root@centos7 yum.repos.d]# yum list

          yum安装程序包:

          install 

          reinstall 重新安装;

          示例:

         升级程序包:

          update

          检查可用升级:

          check-update

          卸载程序包:

          remove 

          查看程序包information

          info

          查看指定的特性(可以是某文件)是由哪个程序包所提供;

          provides

          清理本地缓存:

          clean

          构建缓存:

          makecache

          搜索:

          search  string1 string2

          以指定的关键字搜索程序包名及summary信息;

          查看指定包所依赖的capabilities

          deplist package1

          查看yum事物历史

          history

          安装及升级本地程序包:

          localinstall

          localupdate

          包租管理的相关命令:

          groupinstall

          groupupdate

          grouplist

          groupremove

          groupinfo

编译安装:

      解包、配置、编译、安装

第一步:configure脚本

        选项:指定安装位置、指定启用的特性

              –help:获取其支持使用的选项

        选项的分类:

             安装路径设定:

               –prefix=/path:指定默认安装位置,默认为/usr/local

               –sysconfdir=/path:配置文件的安装路径

                system types :支持交叉编译;

          optional features :可选特性

                 –disable-feature

                 –enable-feature[=arg]

          optional packages:可选包

                 –with-packsge[=arg]依赖包

                 –without-package禁用依赖关系

  第二部:make

  第三部:make  install

  安装后的配置:

       (1)二进制程序目录导入至path环境变量中

            编辑文件/etc/profile.d/NAME.sh

            export PATH=/path/to/bin:$PATH

        (2)导入库文件路径

              编辑/etc/ld.so.conf.d/name.conf

              添加新的库文件所在目录至此文件中

           让系统重新生成缓存

              ldconfig  -v

         (3)导入头文件

               基于链接的方式实现:

                  in -sv

          (4)导入帮助手册

               编辑/etc/man.config|man_db.conf文件

                  添加一个MANPATH

       

     

             

 

     

  

       

      

  

         

        

    

    

      

     

        

       

       

       

    

           

       

     

     

 

            

   

    

     

 

            

   

    

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

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

相关推荐

  • ldd 的一个安全问题

    我们知道“ldd”这个命令主要是被程序员或是管理员用来查看可执行文件所依赖的动态链接库的。是的,这就是这个命令的用处。可是,这个命令比你想像的要危险得多,也许很多黑客通过ldd的安全问题来攻击你的服务器。其实,ldd的安全问题存在很长的时间了,但居然没有被官方文档所记录来下,这听上去更加难以理解了。怎么?是不是听起来有点不可思议?下面,让我为你细细道来。 首…

    Linux干货 2016-05-05
  • 优云Monitor:开启数据中心主机运维的上帝视角

    常常有这么一句话在激励每一位运维人员,“不以故障多为耻,而以恢复快为荣。”运维人员就是要快速定位问题,分析问题,排除故障,快速恢复来保障生产业务不受中断。然而,现代大型数据中心,运维人员要管理的系统节点比以前繁多,为了掌控数据中心的实时运行情况与定位问题,需要花的时间成本已经长得无法接受。 而优云Monitor给运维人员提供了极好的可视化手段,能够让运维人员…

    系统运维 2017-01-09
  • 编程命名中的7+1个提示

    前几天Neo写过《编程中的命名设计那点事》,这里也有另外一篇和程序命名的文章,可以从另一个角度看看。 1.- 变量应该是尽可能的望文知意。千万不要使用教材中的命名方式。 好的变量: daysDateRange, flightNumber, carColor. 坏的变量: days, dRange, temp, data, aux… 在我们…

    Linux干货 2015-04-03
  • Centos6.5基于SSL密码认证部署ELK(Elasticsearch+Logstash+kibana)

    1       简介 本章我们来介绍Centos6.5基于SSL密码认证部署ELK(Elasticsearch 1.4.4+Logstash 1.4.2+kibana3),同时为大家介绍如何集合如上组件来收集日志,本章的日志收集主要为大家介绍SYSTEM日志收集. 集中化日志收集主要应用场景是在同一…

    Linux干货 2015-06-18
  • 6个变态的C语言Hello World程序

    下面的六个程序片段主要完成这些事情: 输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。 hello1.c  #define _________ }     #define ______…

    Linux干货 2016-05-08
  • SElinux管理

                                                      &nbsp…

    系统运维 2016-09-26