首页 > 代码库 > 《Linux程序包管理之RPM及YUM》

《Linux程序包管理之RPM及YUM》

一、RPM和YUM简介

RPM,全称RPM Package Manager是由Red Hat推出的软件包管理系统,现在在各个发行版普遍使用。

RPM包管理器,将编译好的程序打包成一个文件或有限的几个文件,可用于实现便捷地安装、卸载、升级、查询、校验等程序管理;通常用与RHEL,红帽衍生系统,如CenOS等系统,用来实现对Linux程序包进行快捷管理。

RPM包命名格式:

技术分享

Yum,全称Yellow dog Updater, Modified , 由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于 RPM 包管理的字符前端软件包管理器。能够从指定的服务器自动下载 RPM 包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。


二、程序包安装路径

系统相关:

配置文件路径:/etc

二进制文件路径:/bin /sbin

库文件路径:/liblib64 /usr/lib/usr/local/lib

系统提供功能服务相关:

配置文件路径:/etc

二进制文件路径:/usr/bin   /usr/sbin

库文件:/usr/liblib64 /usr/lib/usr/local/lib

第三方软件:

配置文件路径/usr/local/etc/etc/DIR

二进制文件路径:/usr/local/bin  /usr/local/sbin

库文件:/usr/local/lib

软件说明相关文档主要都存放在/usr/share/man/usr/local/share/man

 

三、使用详细介绍

3.1 RPM软件包使用介绍

3.1.1 RPM安装相关

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

         rpm -ivh PACKAGE_NAME

                   -i  :安装

                   -v:显示安装过程

                   -h:以#显示安装进度,每个#代表2%进度。

                   --replacepkgs:替换安装,如果该该包提前安装过,需要再次替换安装使用;

                   --nodeps:不检查依赖关系

    --oldpackage:降级安装;

    --force: 忽略冲突,强制执行过程;

          --test:测试整个安装过程,测试完毕,并不安装;

         例子:### rpm -ivh vsftpd-2.2.2-12.el6_5.1.x86_64.rpm

 

3.1.2 RPM升级

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

如果有较旧版本程序包,则升级安装;否则,则执行安装操作;

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

如果有较旧版本程序包,则升级安装;否则,中止;

               # rpm -Uvh  PACKAGE_FILE ...

               # rpm -Fvh  PACKAGE_FILE ...

         例子: ### rpm -Uvh vsftpd-2.2.2-12.el6_5.1.x86_64.rpm

                ### rpm -Fvh vsftpd-2.2.2-12.el6_5.1.x86_64.rpm

 

3.1.3 RPM卸载

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

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

         rpm -e PACKAGE_NAME ...

--nodeps: 忽略依赖关系

            --test:卸载测试

注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会删除,而是被重命名(原文件加.rpmsave后缀)并保留.

         例子: ### rpm -e vsftpd

                ### rpm -e mysql-libs --nodeps

 

3.1.4 RPM查询

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

         [select-options]:

         1、查询某包是否安装:

                   rpm -q PACKAGE_NAME ...

                   ### rpm -q bind

         2、查询已安装的所有包:

                   rpm -qa

                   ### rpm -qa | less

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

                   rpm -qf /path/to/somefile

                   ### rpm -qf /bin/bash

         4、查询尚未安装包的相关信息:

                   rpm -qpl PACKAGE_FILE

                   rpm -qpi PACKAGE_FILE

                   ### rpm -qpl httpd-2.2.15-39.el6.centos.x86_64.rpm

                   ### rpm -qpi httpd-2.2.15-39.el6.centos.x86_64.rpm

[query-options]

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

                   rpm -qi PACKAGE_NAME

                   ### rpm -qi bash

         2、查询某包安装后生成的所有文件的列表

                   rpm -ql PACKAGE_NAME

                   ### rpm -ql bash

         3、查询某包安装后生成的所有配置文件的列表

                   rpm -qc PACKAGE_NAME

                   ### rpm -qc bash

         4、查询某包安装后生成的所有帮助文件的列表

                   rpm -qd PACKAGE_NAME

                   ### rpm -qd bash

         5、查询某rpm包制作时随版本变化的changelog列表信息

                   rpm -q --changelog PACKAGE_NAME

                   ### rpm -q --changelog bash

         6、查询某包提供的capabilities(能力),列出软件包提供的特性

                  rpm -q --provides PACKAGE_NAME

                   ### rpm -q --provides passwd

         7、查询某包所依赖的capabilities(能力),列出软件包依赖的其他软件包

                  rpm -q --requires PACKAGE_NAME

                   ### rpm -q --requires passwd

         8、查询某包安装卸载时的脚本

                   rpm -q --scripts

                   安装卸载脚本有四种:

                            preinstall:安装前执行的脚本

                            postinstall:安装后执行的脚本

                            preuninstall:卸载前执行的脚本

                            postuninstall:卸载后执行的脚本

                   ### rpm -q --scripts bash

         9、显示软件包的修改信息

                   rpm -q --changelog PACKAGE_NAME

                   ### rpm -q --changelog bash

         10、显示转储文件信息

                   rpm -q --dump PACKAGE_NAME

                   ### rpm -q --dump bash |less

 

3.1.5 RPM包校验

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

检查包安装之后生成的文件是否发生了改变

常用用法:rpm -V PACKAGE_NAME

   S file Size differs                               # 文件大小不一致

   M Mode differs (includes permissions and filetype)  #模式不一致 (包括许可和文件类型)

   5 digest (formerly MD5 sum) differs MD5 # MD5 校验和不一致

   D Device major/minor number mismatch # 主从设备号不匹配

   L readLink(2) path mismatch                     # readLink(2) 路径不匹

   U User ownership differs                        #属主不一致

   G Group ownership differs                       # 属组不一致

   T mTime differs                                 # 修改时间不一致

   P caPabilities differ                           # 提供的功能有变化

### rpm -V httpd

 

3.1.6包来源合法性及完整性验正

rpm --import PUBKEY ...

rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE ...

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

--nodigest: 不检查完整性

         ### rpm -K httpd-2.2.15-39.el6.centos.x86_64.rpm


3.1.7 重建yum数据库公共数据库

     rpm {--initdb|--rebuilddb}

    初始化:--initdb

            如果事先不存在数据,则会新之;否则,不执行任何操作

    ### rpm --initdb

     重新构建:--rebuilddb

            无论当前是否已经存在数据库,都会直接重建并覆盖现有数据库

    ### rpm --rebuilddb

 

3.1.8 扩展讲解     

   [1] yum仓库下载RPM软件包

    yumdownloader --resolve PACKAGE_FILE …

--destdir DIR

  指定下载目标目录。默认为当前目录。

--urls

          而不是下载RPM包,列出将要下载的网址。

--resolve

          当下载RPM包,解决依赖关系,并下载所需的软件包。

--source

          而不是下载的二进制RPM包,下载源RPM

      例子:### yumdownloader --resolve lrzsz    ### 下载该软件包,以及依赖包


        

   [2] rpm2cpio使用

    如果下载一个 RPM,需要检查它的内容而不是安装它,可以使用 rpm2cpio 命令把内容转换为 cpio 存档,然后通过 cpio 命令提取出包中的某些或所有文件。对 bind 包执行转换,然后显示提取出的文件(和目录)。关于 rpm2cpio 和 cpio 命令的更多信息参见它们的手册页。            

      ### yumdownloader bind

      ### mkdir bind && cd bind

      ### rpm2cpio ../bind-9.8.2-0.17.rc1.el6.x86_64.rpm| cpio -idv

 

3.2YUM软件包使用介绍

3.2.1 YUM安装

         安装一个软件包或多个软件包

         # yum install package1 [package2] [...]

         安装软件包组

         # yum groupinstall groupinstall group1 [group2] [...]

         # yum install @group1 [group2] [...]

              例子:   # yum install bind

                       # yum groupinstall ‘MySQL Database server‘

                       # yum install @‘MySQL Database client‘

         本地安装一个rpm软件包

         # yum localinstall rpmfile1 [rpmfile2] [...]

         本地安装

         如果要安装指定的版本的程序:

             yum install PACKAGE-VERSION

         重装指定的程序包

             yum reinstall PACKAGE_NAME ...


3.2.2 YUM 升级

         升级某个包或多个软件包

         # yum update [package1] [package2] [...]

         升级某个包组

         # yum groupupdate group1 [group2] [...]

                  例子: ### yum update bind

                         ### yum groupupdate ‘MySQL Database server‘

                         ### yum update @‘MySQL Database client‘

         本地升级安装某个rpm软件包

         # yum localupdate rpmfile1 [rpmfile2] [...]

         软件包yum降级:

    # yum downgrade PACKAGE_NAME

   检查可用升级:

    ###  yum check-update 


3.2.3 YUM 卸载

         卸载某个软件包

         # yum remove | erase package1 [package2] [...]

         下载某个软件包组

         # yum groupremove group1 [group2] [...]

         # yum remove @‘ group_name‘

         例子:### yum remove bind

               ### yum groupremove ‘MySQL Database server‘

               ### yum remove @‘MySQL Database client‘

 

3.2.4 YUM查询

         查询已安装和可以安装的软件包清单,或查询某个特定的软件包

         # yum list [PACKAGE_NAME]

         查询软件包信息

         # yum info [PACKAGE_NAME]

         # yum info installed      ### 列出已安装的软件包信息

         # yum info available      ### 列出可安装的软件包信息

         查询软包提供的功能或者命令

         # yum provides | whatprovides feature1 [feature2] [...]

         查询包组已安装和可以安装的软件包组清单,或查询某个特定的软件包组

   # yum grouplist[hidden] [groupwildcard] [...]

   查询某个软件包组信息

         # yum groupinfo group1 [...]

         根据关键字模糊查询包名或包的sumary信息包含此KEYWORD的相关列表;

         # yum search string1 [string2] [...]

         查询所有可用YUM仓库都有那些或启用或关闭某个仓库

         # yum repolist [all|enabled|disabled]

         例子:

###  yum list httpd

###  yum info ftp

###  yum provides *bin/sz

###  yum grouplist | less

###  yum groupinfo ‘ServerPlatform Development‘

###  yum search ‘vsftp‘

###  yum repolist

 

3.2.5 YUM仓库缓存数据

         YUM仓库缓存数据清理

         yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

         ### yum clean all

         重新生成yum仓库缓存数据

         ### yum makecache

 

四、YUM扩展讲解

4.1 YUM客户端配置

4.1.1 YUM配置文件的具体格式

[Local-YUM]是仓库名repository_ID,名字可以随便取

    nameyum的名称也可以随便取“=”两边不能有空格

    baseurl:指定rpm包的路径,该路径下必须有repodata这个文件

    enabled:默认为1,表示启动此仓库,0表示不启用

    gpgcheck:默认也是11表示检查公钥,0表示不检查,当检查公钥时要指定gpgkey的地址

    cos:t默认是1000,越小越优先访问


4.1.2 YUM配置服务器

         YUM服务器基于httpftpnfsfile访问格式

相对应的baseurl路径,例如:

       http://

       ftp://

       nfs://

       file:///

   本地光盘yum例子:

cat >> /etc/yum.repos.d/CentOS-Local.reop <<END

[YUM-Local]

name=CentOS 6.6 Local YUM

baseurl=file:///media/cdrom

enabled=1

gpgcheck=0

END

         公网http yum例子:


cat >> /etc/yum.repos.d/CentOS-sohu.reop <<EOF

[sohu]

name=Sohu for CentOS 6.x YUM

baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch

enabled=1

gpgcheack=1

gpgkey=http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6

EOF



4.1.3 搭建YUM仓库服务器

      # yum install httpd -y             # http的方式向外提供yum仓库服务

      # yum install createrepo -y        # 安装创建yum仓库的工具

      # mkdir -p /var/www/html/centos6.6       #创建yumhttp服务提供的路径      

      # mkdir -p /media/cdrom                  # 创建光盘挂载点

# mount -r /dev/cdrom /media/cdrom/      # 以只读方式挂载光盘

# cp -r /media/cdrom/Packages/ /var/www/html/centos6.6   # 拷贝rpm(最好将两个光盘的包都拷贝)

# cd /var/www/html/centos6.6

# createrepo Packages/ -o .              # 创建Packages软件包目录的元数据信息

# service httpd restart                  # 启动httpd,以便于提供YUM仓库

YUM仓库配置完毕的baseurl如下:

### baseurl=http://172.16.249.165/centos6.6

本文出自 “心静梵音” 博客,请务必保留此出处http://masters.blog.51cto.com/6516495/1592529

《Linux程序包管理之RPM及YUM》