Linux rpm总结

Linux程序包管理
    
    API:Application Program Interface
    ABI:Application Binary Interface
        Unix-like
            ELF
        Windows
            exe,msi
        
        库级别的虚拟化
            Linux:WinE
            Windows:Cywin
            
    系统级开发:
        C/C++: http,vsftpd,nginx
    应用级开发:
        java/Python/perl/ruby/php
            java:hadoop,hbase(jvm)
            Python: openstack(pvm)
            perl:(perl)
            ruby:(ruby)
            php:(php)
            
    程序格式:
        源代码:文本格式的程序代码
        二进制格式:文本格式的程序代码--> 编译器-->二进制格式(二进制程序、库文件、配置文件、帮助文件)
        
    java/Python程序格式:    
        源代码-->目标二进制格式(二进制程序、库文件、配置文件、帮助文件)-->组织成为一个或有限几个""文件
            安装、升级、卸载、查询、校验
            
        程序包管理器:
            debian:dpt,dpkg, ".deb"
            redhat:redhat package manager,rpm ".rpm"; rpm is package manager
            S.u.S.E:rpm, ".rpm"
            
            Gentoo:ports
            Archlinux
            
        源代码:name-VERSION.tar.gz
            VERSION: major,minor,release
        rpm包命令格式:
            name-VERSION-release.arch.rpm 
                VERSION: major.minor.release
                release.arch:rpm包的发行号
                    release.os: 2.el7.i386.rpm 
                    archetecture:i386,x64(amd64),ppc,noarch
                    
                redis-3.0.2.tar.gz-->redis-3.0.2.1.centos7.x64.rpm
            
            拆包:主包和支包
                主包:name-VERSION-release.arch.rpm 
                支包:name-function-VERSION-release.arch.rpm包命令格式:    
                    function:devel,utils,libs,...
                    
        依赖关系:
            X,Y,Z
                X-->Y,Z
                    Y-->A,B,C
                    C-->Y 
                    
            前端工具:自动解决依赖关系:
                yum:rhel系列系统上rpm包管理器的前端工具
                apt-get(apt-cache): deb包管理器的前端工具
                zypper:suse的rpm管理器的前端工具
                dnf:Fedora22+系统上的rpm包管理器的前端工具
                
         程序包管理器:
            功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作
            
            1、程序的组成清单(每个程序包都单独实现)
                文件清单
                安装或卸载时运行的脚本
            2、数据库(公共)
                程序包的名称和版本:
                依赖关系
                功能说明
                安装生成的各文件的文件路径及校验码信息
                ...
                
                /var/lib/rpm/
        
        获取程序包的途径:
            (1)系统发行版的光盘或官方的文件服务器(或镜像站点)
                http://mirrors.allyun.com 
                http://mirrors.sohu.com 
                http://mirrors.163.com 
            (2)项目的官方站点
            (3)第三方组织:
                EPEL:
                搜索引擎
                    http://pkgs.org 
                    http://rpmfind.net
                    http://rpm/pbone.net 
            (4)自己动手,丰衣足食
            
            建议:检查其合法性
                来源合法性
                程序包的完整性
                
        CentOS系统上rpm命令管理程序包:
            安装、升级、卸载、查询、校验和数据库维护
            
            rpm命令:rpm [OPTION] [PACKAGE_FILE]
                安装: -i,--install
                升级: -U,--update,-F,--freshen
                卸载: -e,--erase
                查询: -q,--query
                校验: -V,--verify
                数据库维护:--builddb,--initdb

            安装:
                rpm {-i|--install} [install-options] PACKAGE_FILE ...
                    GENERAL OPTIONS:
                        -v:verbose,详细信息
                        -vv:更详细的信息
                        
                    [install-options]
                        -h:hast marks输出进度条:每个#表示2%的进度
                        --test:测试安装,检查并报告依赖关系及冲突消息等
                        --nodeps:忽略依赖关系,不建议
                        --replacepkgs:重新安装
                        
                        注意: rpm可以自带脚本:
                            四类:--noscripts
                                preinstall:安装过程开始之前运行的脚本,%pre,--nopre
                                postinstall:安装过程开始之后运行的脚本,%post,--nopost
                                preuninstall:卸载过程开始之前运行的脚本,%preun,--nopreun
                                postuninstall 卸载过程开始之后运行的脚本,%postun,--nopostun
                        -nosignature:不检查包签名信息,不检查来源合法性
                        -nodigest:不检查包完整性信息
                        
            升级:
                rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
                rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
                    
                    -U:升级或安装
                    -F:升级
                    
                    rpm -Uvh PACKAGE_FILE...
                    rpm -Fvh PACKAGE_FILE...
                    
                        --oldpackage:降级
                        --force:强制升级
                        
                    注意:(1)不要对内核做升级操作,Linux支持多内核版本并存,因此,直接安装新版本内核
                          (2)如果某原程序的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把版本的配置文件重命名(FILENAME.rpmnew)后提供
            
            卸载:
                rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
                    --allmatches:卸载所有匹配指定名称的程序包的各版本
                    --nodeps:忽略依赖关系
                    --test:测试卸载,dry run模式
                    
            查询:
                rpm {-q|--query} [select-options] [query-options]
                
                [select-options]
                    PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本
                    -a,--all: 查询所有安装的所有包
                    -f FILE: 查询指定的文件由哪个程序包安装生成
                    
                    -p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作
                    
                    --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供
                    --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个程序包所依赖
                    
                [query-options]
                    --changelog:查询rpm包的changelog
                    -l,--list:程序安装生成的所有文件列表
                    -i,--info:程序包相关的信息,版本号、大小、所属的包组,等;
                    -c,--configfiles:查询指定的程序包提供的配置文件;
                    -d,--docfiles;查询指定的程序包提供的文档;
                    --provides:列出指定的程序包提供的所有的CAPABILITY
                    -R,--requires: 查询指定的程序包的依赖关系
                    --scripts:查看程序包自带的脚本片断
                    
                用法:
                    -qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
                    -qpl PACKAGE_FILE,-qpi PACKAGE_FILE,-qpc PACKAGE_FILE,...
            
            校验:
                rpm {-V|--verify} [select-options] [verify-options]
                
                如果变动,变动类型表示的意思
                    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 mTime differs
                    P caPabilities differ
        
        包来源合法性验证和完整性验证:
            来源合法性验证:
                数字签名:
            完整性验证:
            
            获取并导入信任的包制作者的密钥:
                对于CentOS发行版:rpm --import /etc/pki/rpm-gpg/RPM-RPG-KEY-CentoOS-7
                
            验证:
                (1)安装此组织签名的程序时,会自动执行验证
                (2)手动验证,rpm -K PACKAGE_FILE
        
        数据库重建:
            rpm管理数据库路径:/var/lib/rpm/
                查询操作:通过此处的数据库进行
                
            获取帮助:
                CentOS 6man rpm 
                CentOS 7man rpmdb
                
                rpm {--initdb|--rebuilddb}
                    --initdb:初始化数据库,当前无任何数据库可初始化创建一个新的,当前有时不执行任何错作; 
                    --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建
                    
        博客作业:rpm包管理功能全解

 

posted @ 2019-08-16 20:28  兜儿~  阅读(256)  评论(0编辑  收藏  举报