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

相关推荐

  • 初识正则表达式

    正则表达式是个什么东东? 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。在很多文本编辑器里、命令中,通常要使用检索、替换、放行和拒绝那些符合某个模式的文本。而正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。  摘自《正则表达式之…

    Linux干货 2015-03-27
  • rpm包管理

    一、什么是RPM     RPM全称为“RedHat Package Manager”,看名字就知道这是RedHat公司搞出来的,后来因为RPM发展的很好,逐渐成为了一种通用的标准,就更名为“RPM is Package Manager"。     RPM最大的特点就是…

    Linux干货 2015-05-11
  • LVS NAT + Keepalived HOWTO

    LVS NAT + Keepalived HOWTO   这篇文章主要讲解了,基于LVS/NAT,安装,运行与检测keepalived 目录     1、什么是keepalived?     2、规划你的网络 &nbsp…

    Linux干货 2015-09-21
  • 使用Storm实现实时大数据分析

    摘要:随着数据体积的越来越大,实时处理成为了许多机构需要面对的首要挑战。Shruthi Kumar和Siddharth Patankar在Dr.Dobb’s上结合了汽车超速监视,为我们演示了使用Storm进行实时大数据分析。CSDN在此编译、整理。 简单和明了,Storm让大数据分析变得轻松加愉快。 当今世界,公司的日常运营经常会生成TB级别的数据。数据来源…

    Linux干货 2015-04-04
  • HDFS写入和读取流程

    一、HDFS HDFS全称是Hadoop Distributed System。HDFS是为以流的方式存取大文件而设计的。适用于几百MB,GB以及TB,并写一次读多次的场合。而对于低延时数据访问、大量小文件、同时写和任意的文件修改,则并不是十分适合。 目前HDFS支持的使用接口除了Java的还有,Thrift、C、FUSE、WebDAV、HTTP等。HDFS…

    Linux干货 2015-05-12
  • 手动编译内核+busybox+dropbear+nginx

    我们需要先在宿主机上添加一个磁盘,然后,把这个磁盘做好分区和文件系统: fdisk /dev/sdb 创建第一个分区: n p 1 +512M 创建第二个分区: n p 2 +10G 保存退出: w 为分区提供文件系统: kpartx /dev/sdb 为分区提供文件系统: mke2fs -t ext4 /dev/sd…

    Linux干货 2015-09-24