linux软件包的管理

    linux下软件有几类:二进制软件包  、源码包

            二进制:有通用二进制,

            源码包:可以定制、可跨平台 但安装比较麻烦,通常需要编译安装

            

程序包管理器的两大主流
       dpkg: 是由 Debian Linux 社群所开发出来的, 只要是衍生版 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括B2D, Ubuntu 等等,其前端工具有apt-get。
         RPM: 由 RedHat 公司所研发开始名为(RedHat Package Manager),后因被纳为标准包管理器,后改名为(RPM is Package Manager)包括 Fedora, CentOS, SUSE 等等,其前端工具有yum。


包管理器的基本功能:
    打包
    安装
    查询
    升级
    卸载
    校验
    数据库管理


rpm包命名的格式:

        源程序:name-version.tar.{gz|bz2|xz}
            version分为三个部份: major.minor.release  主版本.次版本号.发行号

        rpm包:name-version-release.arch.rpm
            release:通常包含rpm的制作发行号,还包含适用的OS
                bash-4.3.2-2.el6.x86_64.rpm

                    OS:操作系统平台及板本
                            el6:代表 redhat enterprise linux 6
                            el5:代表 redhat enterprise linux 5                           
                    arch:cpu架构
                        x86_64
                        i386, i586, i686
                        ppc
                        noarch

                nginx-1.4.16-5.noarch.rpm  (如果arch位没写或写成noarch这种一般是通用格式)

下图是一个包格式说明,(引用)

rpm 命令使用,包格式_第1张图片


在有些时候安装包里不是所有的功能都能用到的,包制作者这一点早就想到了。如:

    一个源码:有10个功能,大多数用户只用其6个功能,余下的4个呢?这个时候这个包可能会分包

            分包制作:把一个大的程序打包制作成多个包
                    主包:bash-4.3.2-2.el6.x86_64.rpm
                           支包:bash-hello-4.3.2-2.el6.x86_64.rpm
                                      bash-world-4.3.2-2.el6.x86_64.rpm

                例如  DNS:bind, bind-devel, bind-libs, bind-utils


来源合法性验正:
            源程序:通过md5或sha1校验码验正;
            rpm包:发行商提供的合法性是可信的
                验正包完整性:校验码
                验正来源合法:公钥


获取rpm包的途径:
        1、发行商的光盘或站点服务器
            以CentOS为例:
                http://mirrors.163.com
                http://mirrors.sohu.com
        2、http://rpmfind.net
        3、http://rpm.pbone.net


注意RPM包获取路径(相对安全的方式实在没有在到以上查找):
        1、发行商,发行光盘中的包,需要升级时,官方释放出升级包;
        2、Fedora EPEL(googole搜索EPEL)


rpm 命令使用

    格式: rpm [option]  package_name ...

    

    option:

         安装

            -i ,--install   安装

            -v   显示安装信息

            -vv

            -vvv

            -h :   hash, 以#号的个数显示安装进度,-个#号为2%。

            --test:   仅测试安装,不真正安装;

            -ivh --replacepkgs :重新安装

                原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件


        卸载

            -e ,--erase 卸载  

                     --nodeps 忽略依赖关系            
                    如果卸载被其它程序所依赖的包有三种解决方法:1、把依赖者一同卸载; 2、忽略依赖关系;   3、不再卸载     

   

        查询(己安装包)

            -q  package_name :查询单个包是否己经安装

            -qa : 查询所有己经安装的包

            -qi package_name:查询包的描述信息

            -ql package_name:查询安装包生成的文件及路径

            -qf /path/to/somefile: 查询某个文件是哪个包提供的

            -qc package_name :查询安装包生成的配置文件

            -q --scripts  package_name: 查询安装包相关的脚本

                        脚本有四类:

                                    preinstall: 安装前脚本
                                    postinstall: 安装后脚本
                                    preuninstall: 卸载前脚本
                                    postuninstall: 卸载后脚本     

        查询(未安装的包,在以上的基础上加上-p参数) 

              rpm -qpl /path/to/package_file    查询安装后会生成的文件列表    

              rpm -qpi /path/to/package_file   查询其简单描述信息

                              
        升级:

            -U:升级(没有安装就安装)

            -F:只做升级(包如果没有安装,就不做操作)

                        rpm {-Uvh|-Fvh} /path/to/package_file
                            --nodeps:忽略依赖关系
                            --force: 强行安装

                    注意:不要对内核执行升级操作;
                            多版本内核可并存,因此,建议执行安装操作;       
        
          
        校验:

                检查包安装后生成的文件是否被修改过;
                rpm -V package_name

                   S file Size differs    文件大小发生改变
                   M Mode differs (includes permissions and file type)  文件权限发生改变
                   5 digest (formerly MD5 sum) differs     文件的MD5码发生改变
                   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    能力发生改变,

            

rpm包管理:检验来源合法性和软件包完整性
        包完整性:通过单向加密机制(md5|sha1)
        来源合法性:通过公钥加密机制(RSA)

        命令:gpg(加密工具), pgp(加密规范)   gpg使用pgp加密规范

        检查顺序:
                1、导入制作者的公钥,CentOS发行版的公钥在iso文件中;
                2、导入命令:rpm --import /path/to/gpg-key-file

                3、检查:rpm -K /path/to/package_file
                        rpm --checksig /path/to/package_file
                        --nosignature: 不检查来源合法性
                        --nodigest: 不检查完整性,只检查来源合法性。

rpm包管理:数据库重建
        数据库路径:/var/lib/rpm/
    
    重建:
                rpm --initdb: 初始化
                    如果事先不存在一个数据库,则新建之;
                rpm --rebuilddb: 重建
                    直接重建数据库,会覆盖原有的库;