使用 Redhat、Fedora 的 Linuxer 肯定都为 RPM 著名的 dependency hell 而头疼。foo is needed by bar,bar is needed by foo,要装卸个软件,还得辛辛苦苦地梳理清楚所有依赖性问题,RPM 的几个搜索站点成了时常光顾的场所,如果不幸碰到循环依赖,那就只有干瞪眼的分了。有时加个 --nodeps 参数,倒是眼不见心不烦,但这样装上的软件,你能保证正常使用吗?这样卸载软件,你能保证不影响其它软件工作吗?恐怕谁也不能给出肯定的答案。每到这时,帽子们只有看着 Debian 的 apt 暗自羡慕了。
好在,这些都已经成为过去时了。基于 RPM 的发行版现在也有了像 apt 那样自动解决依赖关系的包管理工具了。其中一个著名的就是 apt4rpm,这基本上是 debian 系统 apt 的在 RPM 发行版的移植。但是使用 Redhat 和 Fedora 的 Linuxer 你们知道吗,还有一个与 apt 功能类似的 RPM 包管理系统,那就是 yum。Fedora 系统已经自带,Redhat 也有相应的 RPM 下载。与 apt 相比,yum 的功能一点也不弱,甚至还有许多胜过 apt 之处。比如说,yum 是 Fedora 系统自带的,因此它能使用 Fedora 官方的软件源,完成各种官方发布的各种升级。对于第三方软件源的支持,yum 也不差,大多数支持 apt 的 Repository 也能支持 yum,比如说 freshrpms,fedora.us,livna 等等。此外 yum 有一个比较详细的 log,可以查看何时升级安装了什么软件包等。另外,yum 的代码较 apt 更为精简。
下载了 Chrome 的 RPM 包,安装时发现依赖 lsb 和 wget。而安装 lsb 时,发现其依赖居然有好几十个。如果一个个 RPM 包去找来安装,简直要疯掉,更别提这几十个 RPM 包是否会有其它的依赖。而直接使用 yum install redhat-lsb.x86_64 就全部搞定,那个爽哇!
一. yum 是什么
yum = Yellow dog Updater Modified 主要功能是更方便的添加/删除/更新 RPM 包。它能自动解决包的依赖问题,便于管理大量系统的更新。
yum 解决依赖的原理是,需要配置资源库,对于被依赖的其它包,可以自行下载并安装。所以,如果资源库配置不全,导致找不到某些被依赖的包时,仍然有可能无法正确安装。
注:为什么要使用 yum 而不用 apt,最简单的原因:Fedora 自带。
二. yum 特点
*自动解决增加或删除 RPM 包时遇到的倚赖性问题
*简洁的配置文件(/etc/yum.conf)
*可以同时配置多个资源库(Repository)
三. yum 安装
Fedora 自带
#rpm -ivh yum-2.0.4-2.noarch.rpm
四. yum 配置
yum 的默认配置文件在 /etc/yum.conf:
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
tolerant=1
exactarch=1
[fedora-us-1]
name=Fedora Core 1 -- Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/os
[fedora-us-1-updates]
name=Fedora Core 1 updates -- Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/updates
[fedora-us-1-stable]
name=Fedora Linux (stable) for Fedora Core 1 -- Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/stable
[freshrpms]
name=Fedora Linux $releasever - $basearch - freshrpms
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms
可以将新的 Repository 直接配置在 yum.conf 中,也可以放在 /etc/yum.repos.d/ 目录下,推荐后者。yum 的 repodir 变量默认指向 /etc/yum.conf 和 /etc/yum.repos.d/ 目录,会自动加载以上文件。
五. yum 指令详解
注:当第一次使用 yum 或 yum 资源库有更新时,yum 会自动下载所有所需的 headers 放置于 /var/cache/yum 目录下,所需时间可能较长。
1. 检查可更新的 RPM 包
#yum check-update
2. 更新所有的 RPM 包
#yum update
3. 更新指定的 RPM 包,如更新 kernel 和 kernel source
#yum update kernel kernel-source
4. 大规模的版本升级,与 yum update 不同的是,连旧的淘汰的包也升级
#yum upgrade
5. 安装 RPM 包,如 xmms-mp3
#yum install xmms-mp3
6. 删除 RPM 包,包括与该包有依赖性的包
#yum remove licq
注:同时会提示删除 licq-gnome,licq-qt,licq-text
7. 系统更新(更新所有可以升级的 RPM 包,包括 kernel)#yum -y update
8. 每天定期执行系统更新
#chkconfig yum on
#service yum start
9. 清除暂存中 RPM 包文件
#yum clean packages
10. 清除暂存中 RPM 头文件
#yum clean headers
11. 清除暂存中旧的 RPM 头文件
#yum clean oldheaders
12. 清除暂存中旧的 RPM 头文件和包文件
#yum clean 或 #yum clean all
注:相当于 yum clean packages + yum clean oldheaders
13. 列出资源库中所有可以安装或更新的 RPM 包
#yum list
14. 列出资源库中特定的可以安装或更新以及已经安装的 RPM 包
#yum list mozilla
#yum list mozilla*
注:可以在 RPM 包名中使用匹配符,如列出所有以 mozilla 开头的 RPM 包
15. 列出资源库中所有可以更新的 RPM 包
#yum list updates
16. 列出已经安装的所有的 RPM 包
#yum list installed
17. 列出已经安装的但是不包含在资源库中的 RPM 包
#yum list extras
注:通过其它网站下载安装的 RPM 包
18. 列出资源库中所有可以安装或更新的 RPM 包的信息,比 list 更详细
#yum info
19. 列出资源库中特定的可以安装或更新以及已经安装的 RPM 包的信息
#yum info mozilla
#yum info mozilla*
注:可以在 RPM 包名中使用匹配符,如列出所有以 mozilla 开头的 RPM 包的信息
20. 列出资源库中所有可以更新的 RPM 包的信息
#yum info updates
21. 列出已经安装的所有的 RPM 包的信息
#yum info installed
22. 列出已经安装的但是不包含在资源库中的 RPM 包的信息
#yum info extras
注:通过其它网站下载安装的 RPM 包的信息
23. 搜索匹配特定字符的 RPM 包
#yum search mozilla
注:在 RPM 包名、包描述等中搜索
24. 搜索有包含特定文件名的 RPM 包
#yum provides realplay