zoukankan      html  css  js  c++  java
  • Linux程序包管理之rpm

    rpm简介

    rpm( Red Hat Package Manager )是一个开放的软件包管理系统。它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准。

    rpm将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作

    rpm维护一个所有已安装的软件包和文件的数据库,可以让用户进行功能强大的软件包查询和验证工作。

     

    rpm的功能

    安装:-i, --install

    卸载:-U, --update, -F, --freshen

    升级:-e, --erase

    查询:-q, --query

    验证:-V, --verify

    数据库维护:--builddb, –initdb

     

    rpm软件包命名格式

    rpm包的命名格式一般分两大部分组成。

    第一部分是源代码版本号,比如:

    name-VERSION.tar.gz

    name: 源代码包的名称

    VERSION分为:

    • major: 主版本号,一般程序功能有重大改变才会变动
    • minor: 次版本号,程序功能某个小的分支有变动,才会变动
    • release: 发行号,修正了某个BUG或升级了某段代码,才会变动

    第二部分是rpm打包制作的版本。

    如果用源代码比作面粉,rpm包比作馒头,它们的区别在于: 面粉有不同的工艺,拿面粉又做出了各种可口的馒头。

    这样最终的软件包格式就构成了:

    name-VERSION-release.arch.rpm

    其中

    name-VERSION仍然沿用源代码包的命名

    release : 是rpm包打包制作的发行号

    arch:是指明适用于哪种操作系统平台,有i386, x64(amd64), ppc, noarch等

    获取程序包

    除了系统发行版的光盘自带的rpm软件包外,通常还需要到网上下载,下面是几个可信的获取软件包的途径

    (1) 官方的文件服务器(或镜像站点)

    http://mirrors.aliyum.com

    http://mirrors.sohu.com

    http://mirrors.163.com

    (2) 项目的官方站点

    (3) 第三方组织:

    (a) EPEL

    (b) 搜索引擎

    http://pkgs.org

    http://rpmfind.net

    http://rpm.pbone.net

    (4) 自己动手编译。

    下载后建议检查程序包的合法性和完整性。

    rpm命令使用

    安装

    命令格式:

    rpm {-i|--install} [install-options] PACKAGE_FILE … 

    通用选项

      -v : verbose ,详细信息

      -vv : 更详细的信息

    [install-options]:

      -h:hash marks输出进度条,每个#表示2%的进度

      --test:测试安装,检查并报告依赖关系及冲突消息等

      --nodeps:忽略依赖关系

      --replacepkgs:强制重新安装已经安装的软件包

      --nosignature:不检查包签名信息,不检查来源合法性;

      --nodigest:不检查包完整性信息;

    注意:每一个程序安装时可能会运行脚本,做一些准备操作。rpm包可以自带脚本,这些脚本有四类,分别在不同的时刻被触发,分别是:

    preinstall : 安装过程开始之前运行的脚本,%pre , --nopre

    postinstall : 安装过程完成之后运行的脚本,%post , --nopost

    preuninstall : 卸载过程真正开始执行之前运行的脚本,%preun, --nopreun

    postuninstall : 卸载过程完成之后运行的脚本,%postun , --nopostun

    应用:

    1、下图是正常安装过程

    clip_image002

    2、忽略依赖关系

    clip_image004

    3、强制重新安装

    clip_image006

    升级

    命令格式:

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

    其中

    -U:如果有安装老版本则升级,如果老版本安装不存在,则安装最新版本

    -F:如果有安装老版本就升级,如果老版本安装不存在,则不予理会

    通用选项:

    -v : verbose ,详细信息

    -vv : 更详细的信息

    [install-options]:

    -h:hash marks输出进度条,每个#表示2%的进度

    --test:只进行升级测试

    --oldpackage:降级,如果新版本存在很多问题,就要用到降级

    --force:强制升级,如果新版本不再为其它程序提供依赖服务,这时会报错,可用强制升级

    注意:

    (1) 内核升级可能会有若然隐患问题,所以不要对内核进行升级,如果要测试新版本内核,可用直接安装新版本内核,让与老版本并存。

    (2) 如果某程序包在安装后配置文件曾做过修改,在升级时,新版本程序提供的同名配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名( FILENAME.rpmnew )后提供。

    应用:

    1、-U和-F的区别:

    clip_image008

    2、升级“老版本”

    clip_image010

    卸载

    命令格式:

    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包的changlog,注意非源码包的历史修订

    -l, --list:程序安装生成的所有文件列表

    -i, --info:程序包相关的信息,版本号、大小、所属的包组,等

    -c, --configfiles:查询指定的程序包提供的配置文件

    -d, --docfiles:查询指定的程序包提供的文档

    --provides:列出指定的程序包提供的所有CAPABILITY

    -R, --requires:查询指定的程序包所依赖的CAPABILITY

    --scripts:查看程序包自带的脚本片断

    常用用法:

    -qi PACKAGE //查询程序包information

    -qf FILE //查询文件由哪个程序包生成

    -qc PACKAGE //查询程序包的配置文件

    -ql PACKAGE //查询程序包生成的文件列表

    -qd PACKAGE //查询程序包安装后生成的文档

    -qpi PACKAGE_FILE //查询未安装程序包的information

    -qpl PACKAGE_FILE //查询未安装程序包将要生成的文件列表

    -qpc PACKAGE_FILE, ... //查询未安装程序包将要提供的配置文件

    应用:

    1、查询bash软件包提供的所有CAPABILITY

    clip_image012

    2、查询sed软件包所依赖的CAPABILITY

    clip_image014

    3、查询未安装php-common软件包的配置文件

    clip_image016

    校验

    命令格式:

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

    一般用于对软件包安装后,校验软件包所有的文件有没有发生修改。

    例如:

    # rpm -V zsh       //没有返回任何提示,即校验通过
    
    # vim /usr/share/zsh/4.3.10/scripts/newuser        //在注释行添加一个“#”
    
    # rpm -V zsh
    
    # [root@localhost Packages]# rpm -V zsh
    
       S.5....T. /usr/share/zsh/4.3.10/scripts/newuser        //文件大小发生变化,MD5校验和发生变化,文件修改时间发生变化
    
    

    如果一切都被校验正确,屏幕上就不会显示输出。如果出现有修改,相关信息就会被显示至屏幕。输出的格式中,单用“ . ” 表示测试通过,如果是下列字符则代表某类测试失败:

    5: MD5校验和

    S: 文件大小

    L: 符号链接

    T: 文件修改时间

    D: 设备

    U: 用户

    G: 组群

    M: 模式( 包含权限和文件类型 )

    ?: 不可读文件

    rpm包来源合法性验证和完整性验证

    在上面演示的图片中,在每次安装软件包时都会有一个警告信息。软件包在打包制作时,会附加上用单向加密了的软件包自身的特征码,只有与之对应的公钥才能解密验证包的合法性并得到特征码,再利用特征码验证软件包的完整性。由于在本地没有对应的公钥所以才会出现上面的警告信息。这时需要获取公钥,公钥的获取很关键,直接关系着软件包的来源合法性。

     

    首先要获取并导入信任的包制作者的密钥,对于CentOS发行版来说:

    系统在安装完成后,系统会自动复制一份公钥至/etc/pki/rpm-gpg/ 下,用命令导入公钥,如下:

    [root@localhost ~]# rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    还有一种就是把密钥路径指向发行版光盘:

    [root@localhost ~]# rpm -import /media/RPM-GPG-KEY-CentOS-7

    接下来安装软件包时系统就可以自动验证了。

    还可以在安装软件包前,手动验证:

    clip_image018

    数据库重建

    rpm管理器数据库路径:

    /var/lib/rpm/

    所有的查询操作都是通过此处的数据库进行的。

    命令格式:

    rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]

    其中:

    --initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作

    --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建

    应用:

    clip_image020

  • 相关阅读:
    Java高级之类结构的认识
    14.8.9 Clustered and Secondary Indexes
    14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器
    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构
    14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用
    14.8.1 Creating InnoDB Tables 创建InnoDB 表
    14.7.4 InnoDB File-Per-Table Tablespaces
    14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小
    14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小
    14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB
  • 原文地址:https://www.cnblogs.com/chengtai/p/6235481.html
Copyright © 2011-2022 走看看