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

相关推荐

  • 信息论的熵

    1.  前言    熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。    在信息论里则叫信息量,即熵是对不确定性的度量。从控制论的角度来看,应叫不确定性。信息论的创始人香农在其著作《通信的数学理论》中提出了建立在概率统计模型上的信息度量。他把信息定义为“用来消除不确定性的东西”。在信息世界,熵越…

    Linux干货 2016-03-27
  • RHEL6.4 yum访问HTTPS源时出错

    在RHEL6.4上安装OpenStack时,使用epel的源,但源是https的,进行安装时,总报下面的错误。     https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-6/repodata/repomd.xml:  …

    Linux干货 2016-02-28
  • Memcached + MSM 实现Tomcat Session保持

    Memcached + MSM 实现Tomcat Session保持 tomcat memcached 前言 Memcached介绍 MSM介绍 实验拓扑 实验环境 实验步骤 安装配置Tomcat 安装配置Nginx负载均衡 安装配置Memcached + MSM 总结 前言 上篇文章我们实现了session sticky和session clus…

    2016-04-22
  • MySQL系列之一键安装脚本—-单实例/多实例

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1440414       最近在搞MySQL,由于经常测试一些东西。因此,就写了一个一键安装脚本。 脚本用途: 用于在…

    Linux干货 2016-08-15
  • 程序员的相关笑话(二)

    从前,有一个牧羊人,他有很多的羊。一天他赶着他的那群羊到了一条公路边上。突然,有一辆保时洁急驶过来,上面坐着一个年轻人人,穿着Armani的衣服,和Cerutti的皮鞋,Ray-Ban的太阳眼镜,TAG-Heuer的手表,以前Versace的领带。 他走到牧羊人面前问牧羊人:“如果我能说出你有多少只羊,你能给我一只吗?” 牧羊人看了看他那一大群数都数不过来的…

    Linux干货 2016-07-10
  • 程序员小抄大全

    你是否会经常忘记一些CSS中的函数名或是一些属性名,那个时候,你一定觉得,如果手边有一个“小抄”(Cheat Sheet)就好了。当然,这个“小抄”不是给你作弊用的,这个“小纸条”就是可以让你马上知道那个你最想知道的东西。这个“小抄”上也不需要有所有的东西,就需要那些经常用的就行了。现在,网上有很多这样的“小抄”,它们可能是PDF格式的,可能是PNG格式的,…

    Linux干货 2015-04-03