天天看点

软件包管理RPM与yum

    程序包管理器的基本功能是:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作。其组成一般分为两个部分:

    1)、程序的组成组成清单 (每个包独有)

    文件清单、安装或卸载时运行的脚本

    2)、数据库(公共)

    程序包名称及版本、依赖关系;功能说明;安装生成的各文件的文件路径及校验码信息。

    在软件安装后,其个文件的存放位置一般是:

可运行程序文件

/usr/bin、/usr/sbin、/usr/local/bin、

/usr/local/sbin

程序可使用的动态库

/usr/lib

软件使用手册与说明文档

/usr/share/doc

一些man帮助文件

/usr/share/man

2、RPM命令的介绍

    RPM 全名是『 RedHat Package Manager ,RPM is Package Manager』。

    具体命令的使用方法:

安装:

    rpm -i /PATH/TO/PACKAGE_FILE

        -h: 以#显示进度;每个#表示2%; -v:显示详细过程

        -vv: 更详细的过程-i:--install

        --test: 测试安装,但不真正执行安装过程;dry run模式;

    rpm -ivh /PATH/TO/PACKAGE_FILE

        --nodeps: 忽略依赖关系;--replacepkgs: 重新安装,替换原有安装;

        --force: 强行安装,可以实现重装或降级--nosignature: 不检查来源合法性;

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

        --noscipts:不执行程序包脚本片断;

        %pre: 安装前脚本;--nopre    %post: 安装后脚本;--nopost

        %preun: 卸载前脚本;--nopreun    %postun: 卸载后脚本--nopostun

卸载:

    rpm -e PACKAGE_NAME--nodeps忽略依赖关系

查询:

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

    rpm -q PACKAGE_NAME:查询指定的包是否已经安装

    rpm -qi PACKAGE_NAME: 查询指定包的说明信息;

    rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表;

    rpm -qc PACEAGE_NEME:查询指定包安装的配置文件;

    rpm -qd PACKAGE_NAME: 查询指定包安装的帮助文件;

    rpm -q --scripts PACKAGE_NAME: 查询指定包中包含的脚本

    rpm -qf /path/to/somefile: 查询指定的文件是由哪个rpm包安装生成的;

查询尚未安装的rpm包文件的相关信息:

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

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

升级:

    rpm -Uvh  /PATH/TO/NEW_PACKAGE_FILE: 如果装有老版本的,则升级;否则,安装;

    rpm -Fvh  /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,退出;

        --oldpackage:降级;--force: 强行升级;

    rpm --oldpackage: 降级

注意:

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核;

(2) 如果原程序包的配置文件安装后曾被修改,升级时新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;

检查包安装后生成的文件是否被修改:

    rpm -V PACKAGE_NAME

检验来源合法性和软件包完整性

    来源合法性:通过公钥加密机制(RSA)

    包完整性:通过单向加密机制(md5|sha1)

        rpm --import /PATH/FROM/GPG-PUBKEY-FILE导入所需要公钥:

        rpm -K /PAPT/TO/PACKAGE_FILE

        dsa, gpg: 验正来源合法性,也即验正签名; --nosignature,略过此项

        sha1, md5: 验正软件包完整性;           --nodigest,略过此项

重建数据库:

    rpm--initdb:初始化数据库,没有才建立,有就不用建立;

    rpm--rebuilddb: 重建数据库,强制重新建立;

3、YUM介绍与命令使用

    YUM是一个前端管理器,其组成可以分成两部分。文件服务器与yum客户端。

    所谓文件服务器就是共享rpm包的服务端,其可以通过FTP、http、nfs服务提供,还可以直接在本地直接file建立.

    YUM客户端的作用:

        1、配置文件:指定各可用的yum仓库;

        2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地; 

        3、分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息;

        4、执行具体操作:即使用yum命令

    本地客户端的配置文件有:

        /etc/yum.conf:为所有仓库提供公共配置

        /etc/yum.repos.d/*.repo:为仓库的指向提供配置

    配置文件的基本格式:由两段组成,各字段的含义

        [main] :主配置段

        [repo] :仓库配置段

        [repo_ID]        仓库的配置名,注意各个配置文件中的配置名不能出现重复

        name=String  仓库名称 

        baseurl=仓库的访问路径

        enabled={1|0}    是否使用仓库

        gpgcheck={1|0}  是否进行来源合法性检查 

        gpgkey=公钥文件(可以在本地,也可是服务器端路径)

        cost=定义此仓库开销,默认为1000

YUM命令的使用:yum [options] [command] [package ...]

Optinon:  

       --nogpgcheck:禁止进行gpg check;-y: 自动回答为“yes”;-q:静默模式;

       --disablerepo=repoidglob:临时禁用此处指定的repo;

       --enablerepo=repoidglob:临时启用此处指定的repo;

       --noplugins:禁用所有插件;

Command:

    repolist [all|enabled|disabled]: 列出所有可用yum repo

    clean [all|packages|metadata|expire-cache|rpmdb|plugins]: 清理缓存

    list [all|installed|available]: 列出rpm包

    info package_name: 列出包的描述信息

    grouplist: 列出所有包组

    groupinfo "package_group_name":显示包组信息

    install package_name ...: 安装指定的程序包

    reinstall package_name ...: 重新安装指定的程序包

    check-update: 检查可升级的包

    update package_name ...: 升级指定的程序包

    downgrade package_name:降级

    whatprovides|provides /path/to/somefile: 查询某文件是由哪个包安装生成的

    erase|remove  package_name ...:卸载

    groupinstall "group_name":安装指定的包组

    groupremove "group_name": 卸载指定的包组

安装本地包:

    install /path/to/package_file

手动禁止检查来源及完整性:--nogpgcheck

    yum install /tmp/zsh-2.3.1-2.el6.x86_64.rpm --nogpgcheck

4、自建YUM仓库

1、准备文件服务器;使用httpd为例,在这里我对阿里云中的openstack-juno所有安装包做镜像

3、创建yum仓库

4、使用另一台机器配置使用自建的yum仓库

5、关闭其他可用源,测试配置epel的yum源

6、此时就可以与其他的源一起配合使用了

    本文转自 梦想成大牛 51CTO博客,原文链接:http://blog.51cto.com/yinsuifeng/1844212,如需转载请自行联系原作者