码迷,mamicode.com
首页 > 其他好文 > 详细

RPM 与 YUM 相关

时间:2015-07-07 22:42:08      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:

程序包管理是在电脑中自动安装、配制、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用。

在Linux发行版中,几乎每一个发行版都有自己的软件包管理系统。常见有: 管理deb软件包的dpkg以及它的前端apt(使用于Debian、Ubuntu)。 rpm以及它的前端yum(使用于Fedora)、前端ZYpp(使用于openSUSE)、 前端urpmi(使用于Mandriva Linux、Mageia)等。使用软件包管理系统将大大简化在Linux发行版中安装软件的过程。其他软件包管理系统有ArchLinux中使用的Pacman,Gentoo使用的基于源代码的Portage和Mac系统下的Homebrew等。

一、rpm

1.1、rpm程序包的命名规则

技术分享
  • Name:软件包名
  • Major:主版本号,如软件的框架做重大更改后才会修改
  • Minor:次版本号,如软件添加了某些新功能后才会修改
  • 第一个Release:发行号,如软件修复了某些bug后才会修改
  • 第二个Release:修订号,如源码未做过修改,发行商对发行的RPM包进行再次发行后才会修改
  • Arch:硬件平台架构

1.2 rpm程序包管理的主要功能是安装,升级,卸载,查询,验证等。

1.2.1 通用选项
  • -v:显示安装的详细信息
  • -vv:显示安装时的更详细信息
  • -h:通过50个#号来显示安装进度
1.2.2 常用查询选项
rpm {-q|--query} [select-options] [query-options]
  • [select-options]
    • PACKAGE_NAME:包名
    • -a:查询已安装的包
    • -p PACKAGE_FILE:对未安装包的详细信息查询,与[query-options]配合使用
    • -f或--file FILE:查询某文件有哪个包生成
  • [query-options]
    • --changelog:查询RPM包的变更信息
    • -c, --configfiles:显示包的配置文件
    • -d, --docfiles:显示包的帮助文件
    • -i, --info:显示包的信息,包含包名,版本和描述
    • -l, --list:显示包中的所有文件
    • --provides:列出包提供的功能
    • -R或--requires:列出这个包所依赖的功能
    • --scripts:列出包安装和卸载时运行的特定脚本
      • preinstall: 安装前执行的脚本
      • postinstall: 安装后执行的脚本
      • preuninstall: 卸载前执行的脚本
      • postuninstall: 卸载后执行的脚本
查询包生成的配置文件       
  1. [root@C6_6_N1 ~]# rpm -ql cronolog
  2. /usr/bin/cronosplit
  3. /usr/sbin/cronolog
  4. /usr/share/doc/cronolog-1.6.2
  5. /usr/share/doc/cronolog-1.6.2/AUTHORS
  6. /usr/share/doc/cronolog-1.6.2/COPYING
  7. /usr/share/doc/cronolog-1.6.2/ChangeLog
  8. /usr/share/doc/cronolog-1.6.2/NEWS
  9. /usr/share/doc/cronolog-1.6.2/README
  10. /usr/share/doc/cronolog-1.6.2/TODO
  11. /usr/share/info/cronolog.info.gz
  12. /usr/share/man/man1/cronolog.1m.gz
  13. /usr/share/man/man1/cronosplit.1m.gz

查询某包是否安装
  1. [root@rpm Packages]# rpm -q zsh
  2. package zsh is not installed

查询已安装的所有包
  1. [root@rpm Packages]# rpm -qa

查询某文件由哪个包安装生成的
  1. [root@rpm Packages]# rpm -qf /etc/fstab
  2. setup-2.8.14-20.el6_4.1.noarch

查询未安装包的相关信息与与[query-options]配合使用
  1. [root@rpm Packages]# rpm -qpi zsh-4.3.10-7.el6.x86_64.rpm

  2. [root@rpm Packages]# rpm -qpc zsh-4.3.10-7.el6.x86_64.rpm

查询RPM包的变更信息
  1. [root@rpm Packages]# rpm -q zsh --changelog
  2. * Mon Aug 05 2013 James Antill <james.antill@redhat.com> - 4.3.10-7
  3. - Change {NAME:OFFSET:LENGTH} substitution feature to ignore KSH_ARRAYS option.
  4. - Fixup tests.
  5. - Resolves: rhbz#820530

查询所提供的功能
  1. [root@rpm Packages]# rpm -q xz --provides
  2. xz = 4.999.9-0.5.beta.20091007git.el6
  3. xz(x86-64) = 4.999.9-0.5.beta.20091007git.el6

查询所依赖的功能
  1. [root@rpm Packages]# rpm -q xz --requires
  2. /bin/sh
  3. libc.so.6()(64bit)
  4. libc.so.6(GLIBC_2.2.5)(64bit)
  5. libc.so.6(GLIBC_2.3)(64bit)
  6. libc.so.6(GLIBC_2.3.4)(64bit)
  7. libc.so.6(GLIBC_2.4)(64bit)
  8. libc.so.6(GLIBC_2.6)(64bit)
  9. libc.so.6(GLIBC_2.7)(64bit)
  10. liblzma.so.0()(64bit)
  11. libpthread.so.0()(64bit)
  12. libpthread.so.0(GLIBC_2.2.5)(64bit)
  13. rpmlib(CompressedFileNames) <= 3.0.4-1
  14. rpmlib(FileDigests) <= 4.6.0-1
  15. rpmlib(PayloadFilesHavePrefix) <= 4.0-1
  16. rtld(GNU_HASH)
  17. xz-libs = 4.999.9-0.5.beta.20091007git.el6
  18. rpmlib(PayloadIsXz) <= 5.2-1

1.2.3 常用安装选项
rpm {-i|--install} [install-options] PACKAGE_FILE ...
  • [install-options]
    • --test    测试安装 
    • --nodeps    忽略依赖关系
    • --replacepkgs    重新安装RPM包
    • --prefix NEWPATH  指定安装目录
软件包的安装
  1. [root@rpm Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm
  2. warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
  3. Preparing... ########################################### [100%]
  4. 1:zsh ########################################### [100%]

软包重新安装
  1. [root@rpm Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm --replacepkgs
  2. Preparing... ########################################### [100%]
  3. 1:zsh ########################################### [100%]

测试安装
  1. [root@rpm Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm --test
  2. Preparing... ########################################### [100%]
  3. [root@rpm Packages]# rpm -q zsh
  4. package zsh is not installed

忽略依赖关系
  1. [root@rpm Packages]# rpm -ivh gcc-4.4.7-11.el6.x86_64.rpm
  2. error: Failed dependencies:
  3. cloog-ppl >= 0.15 is needed by gcc-4.4.7-11.el6.x86_64
  4. cpp = 4.4.7-11.el6 is needed by gcc-4.4.7-11.el6.x86_64
  5. [root@rpm Packages]# rpm -ivh gcc-4.4.7-11.el6.x86_64.rpm --nodeps
  6. Preparing... ########################################### [100%]
  7. 1:gcc ########################################### [100%]

1.2.4 常用卸载选项
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

卸载程序,如卸载程序的配置文件被修改过,卸载是被更改的配置文件将被重命名为***.rpmsave
  1. [root@rpm Packages]# rpm -e zsh
  2. warning: /etc/zlogin saved as /etc/zlogin.rpmsave

1.2.5 常用升级选项
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... 
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
  • [install-options]
    • --oldpackage:降级安装
    • --force: 忽略冲突,强制执行过程

升级安装,U 选项:如果有较旧版本程序包,则升级安装;否则,则执行安装操作
  1. [root@rpm Packages]# rpm -Uvh zsh-4.3.10-7.el6.x86_64.rpm
  2. Preparing... ########################################### [100%]
  3. 1:zsh ########################################### [100%]
  4. [root@rpm Packages]# rpm -q zsh
  5. zsh-4.3.10-7.el6.x86_64

升级安装, F 选项:如果有较旧版本程序包,则升级安装;否则,中止
  1. [root@rpm Packages]# rpm -q bash
  2. bash-4.1.2-15.el6_4.x86_64
  3. [root@rpm Packages]# rpm -Fvh bash-4.1.2-29.el6.x86_64.rpm
  4. Preparing... ########################################### [100%]
  5. 1:bash ########################################### [100%]
  6. [root@rpm Packages]# rpm -q bash
  7. bash-4.1.2-29.el6.x86_64
  8. [root@rpm Packages]# rpm -Fvh zsh-4.3.10-7.el6.x86_64.rpm
  9. [root@rpm Packages]# rpm -q zsh
  10. package zsh is not installed

1.2.6 常用校验选项
rpm {-V|--verify} [select-options] [verify-options]
  • [select-options]
    • PACKAGE_NAME:包名
    • -a:查询已安装的包
    • -p PACKAGE_FILE:对未安装包的详细信息查询,与[query-options]配合使用
    • -f或--file FILE:查询某文件有哪个包生成
  • [verify-options]
    • --nosignature: 不检查来源合法性
    • --nodigest: 不检查完整性
对程序进行校验,/etc/zlogin更改后,校验信息如下
  1. [root@rpm Packages]# vim /etc/zlogin
  2. [root@rpm Packages]# rpm -V zsh
  3. S.5....T. c /etc/zlogin

开始的9个选项分别表示如下:
  1. S file Size differs
  2. M Mode differs (includes permissions and file type)
  3. 5 digest (formerly MD5 sum) differs
  4. D Device major/minor number mismatch
  5. L readLink(2) path mismatch
  6. U User ownership differs
  7. G Group ownership differs
  8. T mTime differs
  9. P caPabilities differ
后面的c选项位置有如下选项,被更改的文件类型:
  1. c %config configuration file.
  2. d %doc documentation file.
  3. g %ghost file (i.e. the file contents are not included in the package payload).
  4. l %license license file.
  5. r %readme readme file.    

1.3 其他相关

为了验证程序包来源和合法性和完成性,安装的时候需要对程序包进行校验。密钥存放位置/etc/pki/rpm-gpg/
当有warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 提示时,可以导入光盘中的公钥或到官网下在相关公钥。
1.3.1 导入PUBKEY rpm --import PUBKEY ...
  1. [root@rpm Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm
  2. warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
  3. Preparing... ########################################### [100%]
  4. 1:zsh ########################################### [100%]

  5. [root@rpm cdrom]# rpm --import RPM-GPG-KEY-CentOS-6
  6. [root@rpm Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm --replacepkgs
  7. Preparing... ########################################### [100%]
  8. 1:zsh ########################################### [100%]

1.3.2 PUBKEY的查询与删除   
  1. [root@rpm base]# rpm -q gpg-pubkey
  2. package gpg-pubkey is not installed

  3. [root@rpm base]# rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-6

  4. [root@rpm base]# rpm -q gpg-pubkey
  5. gpg-pubkey-c105b9de-4e0fd3a3

  6. [root@rpm base]# rpm -q gpg-pubkey
  7. gpg-pubkey-c105b9de-4e0fd3a3

  8. [root@rpm base]# rpm -e gpg-pubkey-c105b9de-4e0fd3a3

  9. [root@rpm base]# rpm -q gpg-pubkey
  10. package gpg-pubkey is not installed

1.3.3 RPM数据库
为了能有效管理系统上的软件,RPM有一个数据库,存放在/var/lib/rpm文件夹下。RPM文件尝尝会安装,移除,升级等操作,某些动作可能导致RPM数据损坏,可以通过以下来初始化和重建   
  1. [root@rpm ~]# rpm --initdb
  2. [root@rpm ~]# rpm --rebuilddb

二、yum

YUM全名Yellow dog Updater,是一个基于RPM包管理的字符前端软件包管理器。能够从指定的服务器自动下载RPM包并且安装,可以处理依赖性关系(安装A-->B,B-->C,B和C就需要一起安装),并且一次安装所有依赖的软件包,无需繁琐地一次次下载、安装。

2.1 一个程序有这么多的rpm包,为什么不打包在一个中呢?

  1. 为了重复利用既有的软件功能,因此很多软件都会以函数库的方式释放出部分功能,以方便其他软件的调用
  2. 节省磁盘空间,不必为了调用相应的库而把整个软件都安装上
  3. 安全,功能越多,BUG的可能性就越大
    技术分享

2.2 yum的相关命令

选项
  • --enablerepo=  启用repo
  • --disablerepo= 禁用repo    注意:优先级高于/etc/yum.repos.d/*.repo配置文件中定义的属性;
  • -y: 自动回答为yes
  • --nogpgcheck
列出所有仓库,程序包,包组
  1. yum repolist 列出所有仓库

  2. yum list all 列出所有的软件(包含未安装仓库上可用的)

  3. yum list installed 列出所有已安装的软件

  4. yum list available 列出仓库上的软件

  5. yum grouplist 列出包组

安装程序包
  1. yum install PACKAGE_NAME ... 安装程序包
  2. yum install PACKAGE-VERSION 如果要安装指定的版本的程序
  3. yum reinstall PACKAGE_NAME 重装指定的程序包

升级程序包
  1. yum update PACKAGE_NAME 升级程序包
  2. yum update PACKAGE-VERSION 如果有多个版本的升级包可用,且仅期望升级到指定版本:
  3. yum downgrade PACKAGE_NAME 降级
  4. yum check-update 检查可用升级

卸载程序包
  1. yum remove|erase PACKAGE_NAME 卸载程序包依赖于指定程序包的其它包,会被一并卸载

查询程序包
  1. yum list 列出所有包

  2. yum info PACKAGE_NAME 显示包的信息

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

  4. yum provides|whatprovides /path/to/somefile 查询包所提供的功能

包组管理
  1. yum grouplist 显示所有包组
  2. yum groupinfo "GROUP_NAME" 显示某包组的相关信息:
  3. yum groupinstall "GROUP_NAME" 安装包组
  4. yum install @GROUP_NAME
  5. yum groupremove "GROUP_NAME" 卸载包组
  6. yum remove @"GROUP_NAME"
  7. yum groupupdate "GROUP_NAME" 升级包组:

安装本地rpm包
  1. yum localinstall /path/to/rpm_package_file ...

  2. yum install /path/to/rpm_package_file ... CentOS7上使用

yum导入PUBKEY,在/etc/yum.repos.d下新建sohu.repo
  1. [Sohu]
  2. name=SohuRepo
  3. baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch
  4. gpgcheck=1
  5. gpgkey=http://mirrors.sohu.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6
  6. cost=900

  7. Downloading Packages:
  8. zsh-4.3.10-7.el6.x86_64.rpm                                                    
  9. warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
  10. Retrieving key from http://mirrors.sohu.com/centos/6/os/x86_64/RPM-GPG-KEY-CentO
  11. Importing GPG key 0xC105B9DE:
  12. Userid: "CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
  13.  From  : http://mirrors.sohu.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6
  14. Is this ok [y/N]: n

三、yum 客户端相关配置

主配置文件/etc/yum.conf
  • [main]               
  • cachedir=/var/cache/yum/$basearch/$releasever    缓存存放路径,如安装包    
  • keepcache=0    安装成功后是否保存缓存和包,默认1保存,0不保存
  • debuglevel=2    调试级别0-10,默认为2
  • logfile=/var/log/yum.log    日志目录
  • exactarch=1    默认为1,不会更新i686的包到i386的包
  • obsoletes=1   
  • gpgcheck=1    是否检查GPG签名
  • plugins=1    是否支持插件,0关闭,1启用
  • installonly_limit=5   
  • bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
  • distroverpkg=centos-release

接下来就是定义软件仓库位置的配置文件,目录为/etc/yum.repos.d,可以有1个或多个,文件由以下主要参数构成
  • [repository_ID]:在所有配置文件中必须唯一
  • name:一个通俗易懂的名字
  • baseurl:指向YUM仓库的链接
    • $releasever   This is replaced with the package‘s version, as listed in distroverpkg. This defaults to the version of the redhat-release package.
    • $arch  This is replaced with your system‘s architecture, as listed by os.uname() in Python.
    • $basearch   This is replaced with your base architecture. For example, if $arch=i686 then $basearch=i386.
    • $YUM0-9    This is replaced with the value of the shell environment variable of the same name. If the shell environment variable does not exist, then the configuration file variable will not be replaced.
    • enabled:是否启用YUM仓库,0启用,1禁用
    • gpgcheck:GPG签名检查,1启用,0不检查    http://mirrors.sohu.com/centos/6/os/x86_64/
    • gpgkey:Public Key存放位置
    • cost:开销默认为1000,越小优先级越高

RPM 与 YUM 相关

标签:

原文地址:http://www.cnblogs.com/kwstars/p/4628531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!