Linux程序包管理:

  • 包管理器功能:打包,包管理(安装,升级,卸载,查询,校验)

  • 目前Linux中最常见有两种常用工具

    • deb:debian Linux使用 包括ubuntu

    • rpm:Redhat Package Manager ,Centos等在使用

  • 程序包的组成:

    • 二进制程序:/bin,  /sbin,  /usr/bin, /usr/sbin

    • 库文件: /lib64, /usr/64

    • 配置文件:/etc

    • 帮助文件:manual, info

  • 包管理器:

    • 打包:将源文件,一个一个单一的归档文件中

    • 安装:将文件释放到相应路径下

    • 卸载:收集所有相关文件删除

    • 升级:更新相关文件

    • 查询:查询程序包相关信息

    • 校验:程序包的来源合法性,完整性

  • rpm数据库/var/lib/rpm

       rpm通过数据库记录rpm文件的相关参数,用于软件的升级,删除,查询和验证;若数据库损坏,可通过命令rpm --rebuilddb 重建数据库




rpm包:

  • rpm打包:打包rpmbuild工具 基于specs文件按照各种规则完成打包。

  • 分包机制:一个程序包含各种功能,其中可能只有几种功能常用,几种功能偶尔用,几种功能很少用,将程序功能分开打包,分为核心包和支包。

    • 核心包:software-Version

    • 支包:software-devel-Version

  • rpm包命名机制:

    • name-Version-Release.ARCH.rpm

      5个字段

      name:包名

      Version:版本信息

         major.minor    主版本号.次版本号

      Release:发布版本次数

      ARCH:适合的硬件平台 i386, i586, i686, x86_64

包与包之间:有可能存在依赖关系    例如安装A之前需要先安装B,安装B之前需要先安装C等等。rpm数据库:/var/lib/rpm

    记录包名,安装生成文件,校验信息,依赖关系等等。



如何获取rpm包

  • 发行版提供的程序包,在光盘中一般在Packages目录中

  • fedora-EPEL ,组织收入rpm包,正式,权威,安全

  • 项目的官方站点, 比如tomcat,SVN官方站点

  • 搜索引擎:第三方提供,注意安全问题

    http://rpmfind.net

    http://rpm.pbone.net

    http://pkgs.org





rpm命令实现程序包管理

  • 安装

    •  rpm {-i|--install} [install-options] PACKAGE_FILE ...

           -i :install

           -v:查看详细的安装信息;-vv,-vvv更加详细的安装信息

           -h:显示安装进度

    • install-options
         [--allfiles] [--badreloc] [--excludepath OLDPATH]
         [--excludedocs] [--force] [-h,--hash]
         [--ignoresize] [--ignorearch] [--ignoreos]
         [--includedocs] [--justdb] [--nocollections]
         [--nodeps] [--nodigest] [--nosignature]
         [--noorder] [--noscripts] [--notriggers]
         [--oldpackage] [--percent] [--prefix NEWPATH]
         [--relocate OLDPATH=NEWPATH]
         [--replacefiles] [--replacepkgs]
         [--test]

      --nodeps:忽略依赖关系,强制安装

      --replacefiles:当某程序已经安装了,使用该命令直接覆盖安装

      --replacepkgs:重新安装某个软件

      --test:测试软件是否可以安装到系统中

 示例:

#安装一个软件
[root@localhost Packages]# rpm -ivh NetworkManager-adsl-1.0.0-14.git20150121.b4ea599c.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:NetworkManager-adsl-1:1.0.0-14.gi################################# [100%]

#安装openstack 存在依赖关系,不能安装
[root@localhost packages]# rpm -ivh openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm 
warning: openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8e1431d5: NOKEY
error: Failed dependencies:
    openstack-ceilometer-common = 2014.2.2-1.fc22 is needed by openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch
    python-ceilometerclient is needed by openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch
#
#使用--nodeps选项 忽略依赖关系,可以安装,但是不能使用
[root@localhost packages]# rpm -ivh openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm --nodeps
warning: openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8e1431d5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:openstack-ceilometer-alarm-2014.2################################# [100%]

#同时安装多个软件
[root@localhost packages]# rpm -ivh 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm  openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm --nodeps
warning: 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
warning: openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8e1431d5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:openstack-ceilometer-alarm-2014.2################################# [ 50%]
   2:2048-cli-0.9-4.git20141214.723738################################# [100%]
   
#通过网络安装
[root@localhost packages]# rpm -ivh ftp://rpmfind.net/linux/centos/5.11/os/x86_64/CentOS/centos-release-notes-5.11-0.x86_64.rpm
Retrieving ftp://rpmfind.net/linux/centos/5.11/os/x86_64/CentOS/centos-release-notes-5.11-0.x86_64.rpm
warning: /var/tmp/rpm-tmp.he2qSD: Header V3 DSA/SHA1 Signature, key ID e8562897: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:centos-release-notes-5.11-0      ################################# [100%]



  • 升级:

    • rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
      rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

         -Uvh:如果安装过旧版本程序包,则更新至新版本;如果没有,则直接安装

         -Fvh:如果安装过旧版本程序包,则更新至新版本;如果没有,则不安装

      此处选择[install-options] 同安装时的选项

          --oldpackage:对程序进行降级安装




  • 查询

    • rpm {-q|--query} [select-options] [query-options]

            -qa:查询本机已经安装的所有软件

            -q :只查询指定软件是否安装

            -qi : 查询指定软件的详细信息,开发商,版本等

            -ql:查询软件安装生成的所有文件列表

            -qc:查询指定程序包安装生成的配置文件

            -q --scripts:查询程序包相关的脚步

                preinstall:安装前脚本

                postinstal:安装后脚本

                preuninstall:卸载前脚本

                postuninstall:卸载后脚本

          -qp[icdl] :查询未安装软件的信息,参数作用和上面一样

示例:

#确认软件是否安装成功
[root@localhost Packages]# rpm -q NetworkManager-adsl
NetworkManager-adsl-1.0.0-14.git20150121.b4ea599c.el7.x86_64

#查询已安装软件的详细信息
[root@localhost Packages]# rpm -qi NetworkManager-adsl
Name        : NetworkManager-adsl
Epoch       : 1
Version     : 1.0.0
Release     : 14.git20150121.b4ea599c.el7
Architecture: x86_64
Install Date: Wed 16 Sep 2015 06:24:35 PM CST
Group       : System Environment/Base
Size        : 28480
License     : GPLv2+
Signature   : RSA/SHA256, Sat 14 Mar 2015 04:19:28 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : NetworkManager-1.0.0-14.git20150121.b4ea599c.el7.src.rpm
Build Date  : Fri 06 Mar 2015 12:19:16 PM CST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem 
Vendor      : CentOS
URL         : http://www.gnome.org/projects/NetworkManager/
Summary     : ADSL device plugin for NetworkManager
Description :
This package contains NetworkManager support for ADSL devices.

#查询安装相关脚本
[root@localhost Packages]# rpm -q --scripts zlib
postinstall program: /sbin/ldconfig
postuninstall program: /sbin/ldconfig

 


  • 卸载

    •  rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
                 [--notriggers] [--test] PACKAGE_NAME ...

示例


[root@localhost packages]# rpm -ivh 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm 
warning: 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:2048-cli-0.9-4.git20141214.723738################################# [100%]

#卸载软件 Package_name 软件名
[root@localhost packages]# rpm -e 2048-cli
[root@localhost packages]# rpm -q 2048-cli
package 2048-cli is not installed



  • 校验

    •  rpm {-V|--verify} [select-options] [verify-options]

        -V:后面加软件名,若该软件中文件被修改了,就会被列出

        -Va:列出系统上所有被改动过的文件

        -Vf:勒出某个文件是否被改动过

        S file Size differs 文件大小被修改
        M Mode differs 权限和文件类型被修改
        5 digest (formerly MD5 sum) differs MD5内容发生变化
        D Device major/minor number mismatch 设备的主/次代码已经改变
        L readLink(2) path mismatch Link路径发生变化
        U User ownership differs 文件属主被修改
        G Group ownership differs 文件属组被修改
        T mTime differs 文件创建时间被修改
        P caPabilities differ 依赖关系发生改变

示例

#查询/etc/fstab的变化
[root@localhost Packages]# rpm -Vf /etc/fstab 
S.5....T.  c /etc/bashrc



  • 包校验

      验证

        来源合法性校验:非对称加密 (公钥)

        完整性验证:单向加密

#该路径下存放了密钥 公钥文件
[root@localhost Packages]# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Debug-7  RPM-GPG-KEY-CentOS-Testing-7

     导入密钥命令:

          rpm --import  /path/to/Key_file

[root@localhost Packages]#rpm --import RPM-GPG-KEY-CentOS-7

     手动校验:

            rpm -K /path/to/rpm_file

[root@localhost Packages]# rpm -K zlib-1.2.7-13.el7.x86_64.rpm 
zlib-1.2.7-13.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
#此时再次安装时 就没有了警告消息
[root@localhost Packages]# rpm -ivh NetworkManager-adsl-1.0.0-14.git20150121.b4ea599c.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:NetworkManager-adsl-1:1.0.0-14.gi################################# [100%]


注意:

    使用rpm管理软件,无论是安装,卸载总要面临包依赖关系问题,忽略依赖关系安装软件,安装后的软件不能使用,忽略依赖关系的卸载,造成其他相关软件不能使用。







YUM:Yellowdog Updater Modified

CentOS7 yum 源的配置与使用


如有错误,敬请指正!

谢谢!