• 程序安装之前,来认识下程序的组成部分:

    • 二进制程序

    • 库文件

    • 配置文件

    • 帮助文件(手册、文档)

    • 。。。

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

    • 库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64,/opt/lib,/opt/lib64

    • 配置文件:/etc/,/etc/DIR,/usr/local/{etc,conf}。。

    • 帮助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/doc

    • 注:有些特殊的程序会将执行文件放置于libexec目录;

    • 编译之前:源代码

    • 编译之后:


  • 程序包管理器


    • 安装、卸载、升级、查询

    • 实现应用程序打包,有特定格式

    • 对兼容的程序包进行管理


    • 注:制作成的二进制格式程序与平台有相关性,故通常需要制作各种流行平台所兼容的版本

  • 编译:


    • 源代码(文本) --> 预处理 --> 编译 --> 汇编 --> 链接

    • 编译时,根据是否将被调用的库文件直接打包进生成的二进制程序文件,编译方式可分为两类:


    • 动态链接:不将被调用的库文件打包进来,而是运行时去装载它

    • 静态链接:将被调用的库文件打包进来,将来运行时,可自己完全独立运行,而无需外部库文件支持运行

    • c程序包;


  • 程序包:


    • appneme-VERSION-RELEASE.ARCH.rpm 

    • 源代码:appnema-VERSION.tar.gz,appname-VERSION.tar.gz2,appname-VERSION.tar.xz

    • 包管理器(rpm)格式:


  • 常见的包管理器:


    • deb:Debian

    • rpm:Red hat Package Manager,RPM is Package Manager

  • rpm包命名格式:


    • VERSION:


    • RELEASE:包自身的修订号,有时会有适用于os的信息

    • ARCH:使用的平台


    • major:主版本号

    • minor:次版本号

    • release:发型号

    • x86:i386,i486,i586,i686

    • x86_64:amd64,x86_64

    • powerpc:ppc

    • noarch:与平台无关

    • appname-VERSION-RELEASE.ARCH.rpm


  • 分包机制:



    • 核心包,主包:命名与源项目名称一致;

    • 子包(支包):命名为源项目名称后附加支包中的文件提供的功能组成

  • 获取包途径:


    • 来源合法

    • 包的完整性

    • http://rpmfind.net

    • http://rpm.pbone.net

    • http://pkgs.org

    • 教室:http://172.16.xx.xx/fedora-epel/6/

    • 光盘挂载

    • lrwxrwxrwx 1 root root           3 Apr  9  2015 cdrom -> sr0

    • lrwxrwxrwx 1 root root           3 Apr  9  2015 dvd -> sr0

    • 光盘放入光驱

    • mkdir /media/cdrom

    • mount -o ro -t iso9660 /dev/cdrom  /media/cdrom

    • 系统的发型光盘镜像或官方站点(或站点镜像服务器)


    • 程序包的官方站点

    • 第三方组织:epel


    • 搜索引擎


    • 建议:安装前验证其合法性


  • CentOS系统上程序rpm包管理:


    • 安装、升级、卸载、查询、检验

    • 通过rpm命令完成

  • 安装


    • --relocate

    • --force

    • --replacepkgs 相关配置文件就没了=.=!

    • 副作用:能安装成功,未必可以成功运行

    • 由众多目的单一的小程序组成,结果程序包之间存在相关性,甚至有循环依赖

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

    • -h:hash,以#来表示安装进度。100个#表示安装完成

    • -v,--verbose:显示安装过程中的详细信息

    • 安装时常用的组合:-ivh,-ivvh

    • --test,测试安装。不执行真正的安装过程,仅报告依赖关系及冲突信息等

    • 程序包之间存在的依赖关系:


    • 忽略依赖关系:--nodeps


    • 覆盖安装:重新安装并覆盖原有文件


    • 强制安装:


    • 重新定位程序包的安装位置


  • 升级:


    • 一定不要对内核进行升级(兼容性)。Linux允许多内核共存,故可直接安装多个不同版本内核

    • 若程序包的配置文件安装后曾被修改,升级时,新版本的配置文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存

    • -U:升级或安装。没有安装会安装目标程序

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


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

    • --test

    • --nodepkgs

    • --force

    • --oldpackage:降级

    • 注:


  • 卸载:移除已安装的包


    •  rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]

    •  [--notriggers] [--test] PACKAGE_NAME ...

  • 简单用法:rpm -e PACKAGE_NAME

  •  --nodeps:忽略依赖关系

  • --test:仅做测试卸载:dry-run模式

  • --allmatches:如果一个程序包同时安装多个版本,则此选项一次全部卸载之

  • 注:


    • 如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会删除,而是被重命名(加后缀.rpmsave)后保存

  • 查询:


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

    • [select-options]:


    • [query-options]:

    • rpm -qf  /etc/fstab

    • rpm -qa 

    • rpm -q PACKAGE_NAME

    • rpm -q --scripts PACKAGE_NAME

    • rpm -q --requires PACKAGE_NAME

    • rpm -q --provides PACKAGE_NAME

    • rpm -q --changelog PACKAGE_NAME

    • rpm -qd PACKAGE_NAME

    • rpm -qc PACKAGE_NAME

    • rpm -ql PACKAGE_NAME

    • rpm -qi PACKAGE_NAME

    • 查询某包是否已经安装,以及检查安装的所有包,还可以查看特定包的详细信息


  1. rpm -qpi PACKAGE_FILE

  1. 查询某包或某些包是否安装:

  2. 查询已安装的所有包

  3. 查询某文件是由哪个包安装生成:

  4. 查询尚未安装的包文件的相关信息;



  1. preinstall:安装过程开始之前执行的脚本

  2. postinstall:安装过程完成后执行的脚本‘

  3. preuninstall:卸载开始之前执行的脚本

  4. postuninstall:下载过程完成之后执行的脚本

  1. 脚本有四类:

  1. 查询某包的简要说明信息:

  2. 查询某包安装后生成的文件列表:

  3. 查询某包安装后生成的配置文件:

  4. 查询某包安装后生成的帮助文件:

  5. 查看某包制作时随版本变化的changelog信息:

  6. 查询某包提供的capabilities(包和其他功能):

  7. 查询某包所依赖的capabilities:

  8. 查询某包安装或卸载时会执行的脚本;

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

  • 常见用法:rpm -V PACKAGE_NAME


  •  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


  • 查询安装之后生成的文件是否发生了改变(被改动)


程序包的合法性验证:
  • rpm --import /PATH/TO/RPM-GPG-KEY-GILE

  • 验证:rpm {-K|--checksig}  PACKAGE_FILE


  • --nosignature:不检查来源合法性

  • --nodigest:不检查完整性

  • 包未被二次修改,完整性校验成功

  • 依赖于:制作者提供的程序特征码


  • 验证方式:安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较

  • 由信任的制作者提供

  • 依赖于:制作者的数字签名:签名是作者使用自己的私钥加密程序包的特性码进行的

  • 来源合法


  • 内容合法


  • 验证其光盘中程序包的来源及完整性


rpm管理器数据库:/var/lib/rpm
  • rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]


  • --initdb:初始化数据库,即数据库完全不存在时,可新建之

  • --rebuild:无论当前数据存在与否,都会直接重建此库