码迷,mamicode.com
首页 > 其他好文 > 详细

总结rpm和yum实现程序包的管理功能

时间:2015-09-16 23:37:45      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:linux   源代码   程序   二进制   

程序包的管理器,其功能有打包、后续的包管理(安装,升级,卸载,查询及校验)  
    deb:debian系列系统    
    rpm:功能的提升使得rpm包管理器成为linux主流的标准    
       
    程序包的组成四部分:    
        1.二进制程序:程序的源代码存放/bin, /sbin,/ /usr/bin, /usr/sbin,    

        2.库文件:某些         二进制程序可能会被多个程序包调用,将这些被多个调用的称               之为库文件存放在/lib64,/usr/lib64    
        3.配置文件: 大型程序执行过程中需要许多命令选项,通过配置文件确定大型程序的工作特性         存放在/etc    
        4.帮助文件:获得程序的使用帮助 manual, info


    包管理器功能:  
        打包:将程序包组成部分打包成一个单一的归档文件中;    
        安装:将程序包展开,将每个部分存放到相应的路径供系统使用该程序;    
        卸载    
        升级    
        查询    
        校验:查询程序包安装完以后相关内容是否被修改    
       
       
    rpm包管理器    
        打包工具rpmbuild:基于为每个应用文件提供的specs文件打包    
   
        应用程序包根据应用程序的功能常用否分为    
            核心包:testapp-VERSION 
            支包:testapp-devel-VERSION    
                VERSIOND的格式:major.minor.release    
       
        rpm包的命名机制:    
            包名-应用程序自己的版本号-rpm包自己的release.ARCH(适用的平台架构).rpm    
            rpm包是通过rpm打包工具将应用程序包打包所得    
           
        包和包之前存在依赖关系。因为一个大型程序由若干小的程序组成    
   
    获得rpm包的途径:    
        1、发行版的提供镜像中有一个存放rpm包的文件夹    
        2、Fedora-EPEL    
        3、某些项目的应用程序官方网站提供项自己做的的RPM包    
        4、4、搜索引擎    
            http://rpmfind.net    
            http://rpm.pbone.net    
            http://pkgs.org    
       
    最安全可靠的RPM包获取方法为挂载各发行版提供的镜像中RPM包文件    
        centos识别光盘的文件/dev/cdrom为标准路径    
       
       
    RPM命令的使用 实现程序包管理:    
        安装:rpm { -i | install} 【install-options】 PACKAGE_FILE。。。    
                    -v:实现详细过程    
                    -h:显示过程的进度(用#表示)               
                   
                    常用的install-options    
                    --nodeps:忽略包之间的依赖关系安装rpm包,在包安装完后可能无法使用    
                    每个RPM包都提供一个或多个capabilities,某些RPM包的安装需要别的包所提供                     的capabilities。称之为RPM包之间的依赖    
                    --replacepkgs:实现包的重装

                    示例1:rpm包的安装和重安装  
                    技术分享

                   示例2:忽略包的依赖关系安装rpm包

                   技术分享    
        升级:    
               rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...    
               rpm {-F|--freshen} [install-options] PACKAGE_FILE ...    
                    -Uvh:如果已旧版本的RMP包,则升级到新版本的RPM包;如果没有安装过,则安                     装新版本的。过程和进度都显示出来    
                    -Fvh:如果已旧版本的RMP包,则升级到新版本的RPM包;如果没有安装过,就不                     做任何操作。过程和进度都显示出来    
                    
                    升级常用到的install-options

                    --nodeps:忽略依赖关系  
                    --oldpackage:将已安装的新版本的RPM包降级到老版本的    
                    --force:强制升级,升级的RPM包被其他包所依赖会被拒绝升级需要强制升级

                    示例:包的存在的前提条件下使用-FVH升级包  
                    

           技术分享

                    

           技术分享  

                    示例:对已安装的包降级

                    

          技术分享

                    
        卸载:    
                rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test]                           PACKAGE_NAME ...      卸载只需要指定包名即可    
                    --nodeps:卸载一个被依赖的包后 依赖该包的包会失去作用    
                    

         技术分享    
        查询:    
                rpm {-q|--query} [select-options] [query-options]    
                    -qa:查询已安装的所有rpm包    
                    -qf /PATH/TO/SOMEFILE:查询此路径的文件是由哪个包安装生产的    
                    -qc:查询指定rpm包安装生产了哪些配置文件    
                    -qd:查询指定rpm包安装生产了哪些帮助文档    
                    -qi:显示指定rpm包的相关信息    
                    -ql:查询指定rpm包安装生产了哪些的所有文件列表    
                    -qR::查询指定rpm包依赖那些个数据包    
                    -p:查询对象为未安装的rpm包

        

         技术分享    
                    
        校验:检测rpm包安装后生产的文件是否有被修改的

       包校验:  

               验证包完整性:通过单向加密(md5|sha1)效验码

               验证来源合法:公钥加密(RSA)

 

            导入制作者的公钥:CentOS发行商的公钥在ISO文件 “RPM-GPG-KEY-CentOS-6”  
            rpm --import 导入秘钥能进行包校验(秘钥必须是来源可靠的)    
            rpm -K /PATH/TO/RPM_FILE

YUM:  
    工作原理是因为他抽取了包与包之间依赖关系。依赖外在的yum的rpm包仓库    
   
    本地运行yum程序,它寻找rpm包仓库(不止一个),在仓库中找到后下载回本地    
   
    仓库中有大量rpm包 有元数据文件记录包名 有多少包 以及包的依赖关系。yum程序会先把仓库的元     数据文件缓存在本地,方便查看。    
   
    yum程序的配置文件:    
        /etc/yum.conf 
            定义全集配置:对所有仓库都适用的配置    
        /etc/yum.repos.d/*.repo    
            一个.repo文件对应一个或一组rpm包功能相近或相依赖的仓库    
                       
        定义一个仓库指向:    
            [REPO]    
            name=指定名字    
            baseurl=指定路径  路径可以多个随机抽取每个必须一样    
                    使用路径中有定义仓库指向可用变      

                               $releasever: 引用当前系统的主版本号;  
                               $basearch: 当前系统的基本架构;

                               方便指定路径根据自身当前的系统选择合适的版本  
            #mirrorlist    
            enabled 1代表启用0不启用    
            gpgcheck 1代表启用0不启用                                

            cost指明仓库的开销,开销越小越先采取    
            

     yum程序的配置文件指定对应服务器访问方式:

         ftp    ftp://server/path/to/repo

         http   http://server/path/to/repo

         nfs    nfs://server/nfs_path

         file   file:///path/to/repo


    yum命令    
       
        常用选项    
        安装:install 所依赖的包一并安装    
        卸载:remove  那些依赖要被卸载包的包会被询问是否卸载    
        升级:update   yum check-update检查系统已安装的包有那些包可以升级    
        查询:    
                info    无论安装与否都可以查询rpm包的简要信息    
                search KEYWORD 基于包名的关键字进行搜索查询    
                list all|installed|avail    查询所有包|已安装|可以安装的    
                provids /path/to/somefiel: 查询指定文件是由哪个包安装生成的    
        重新安装 reinstall    
        降级:downgra    
        清理缓存:清理对象可以指定    
        手动生成缓存:makecache    
        包组:    
                groupinfo “指明包组名” 查询一个包组的信息    
                groupinstall “指明包组名”整组的安装包

        仓库:  
            repolist:列出可使用的包仓库    
           
    使用光盘当做本地仓库:    
        1.挂载光盘    
        2.创建指向光盘挂载路径的本地仓库(为了优先使用可以设置较低的开销值)    
       
    DNF:下一代的包管理器功能接近yum,功能更强大

创建本地源

        技术分享

        使用yum安装解决包之间的依赖关系  
        技术分享

       列出可用的yum源

       技术分享

总结rpm和yum实现程序包的管理功能

标签:linux   源代码   程序   二进制   

原文地址:http://5489884.blog.51cto.com/5479884/1695500

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!