为什么80%的码农都做不了架构师?>>>
CentOS或者RHEL 系统环境下,RPM 的依赖性是个很让人头疼的问题。每次系统安装完成过后,想再装一个软件包,敲下回车之前,都会心惊胆战,生怕跳出个依赖性错误。而在一个依赖性错误的背后,可能还牵连着更多的依赖性。这个问题让很多 Linux 用户望而生畏。
RPM 包的依赖关系说起来是简单的因为它所谓的依赖关系仅仅是一个个简单的如“要安装 A,需要提前准备好 a1, a2, a3”这样的条件。
例如,当我们安装gcc时。找到安装光盘,小心翼翼地挂载上,并找到了gcc-4.1.2-50.el5.i386.rpm 尝试着用
rpm -ivh gcc-4.1.2-50.el5.i386.rpm
进行安装。系统告之缺少 glibc-devel 和 libgomp,当你试着安装 glibc-devel,系统又提示缺少 glibc-headers。继续下去,又发现缺少 kernel-headers。很苦恼,心想如果当初选择了完全安装该有多好!同时也抱怨怎么Linux就这么难用的啊,要是像Windows下面一直next多好啊!最终,按照依赖提示,递归似的完成了 gcc 的安装。很庆幸的完成了这个任务。其实只是因为这个安装任务的依赖关系还不够复杂到把我们吓退罢了。
那我强烈推荐使用yum!
yum 对 RPM 包的处理是一个典型的“空间换时间”过程。通过对源中所有 RPM 包的预处理,生成所有安装包关于包含文件,依赖,冲突等信息的索引,并且以 sqlite 格式存放在 /var/cache/yum 对应目录下面。
用DVD建立本地yum源
既然 yum 已经很好的解决了 RPM 包的依赖问题,要解决的就是速度问题。本地光驱的访问速度甚至快过 100M 局域网,而且在最近一些发行版安装盘中,已经预置好 repo 信息,并存放在名为 repodata 的目录中。可以说安装盘本身就是一个现成的 yum 源。在 CentOS5 中,预置了多个 repo,放在了/etc/yum.repos.d目录中;
首先,把光盘放入光驱,挂载光盘。
# mount /dev/hdc /media/cdrom
mount: block device /dev/hdc is write-protected, mounting read-only
CentOS 5.6中可以自动挂载,所以可以不需要建cdrom文件夹来挂载DVD,可以直接使用CentOS_5.6_Final
如果在本地有安装盘镜像,也通过 loop 方式挂载到相应目录。
# mount -o loop CentOS-5.6-i386-bin-DVD.iso /media/cdrom
然后,编辑 yum 源配置文件,添加一个本地 yum 源。这里是一张 CentOS 5.6的 DVD 安装盘,它的 repo 对应是dvd.repo
如果是RHEL Server,则对应的baseurl是
baseurl=file:///media/cdrom/Server
或者直接在/etc/yum.repos.d目录中新建 dvd.repo
然后使用vi打开,写入如下类容:
[dvd]
name=install CentOS DVD
baseurl=file:///media/cdrom
enable=1
gpgcheck=0
完成本地源配置过后,接下来就可以用 yum 进行 RPM 包的补装了。首先,查看刚刚配置好的 yum 源。
yum list
然后,通过熟知的 yum install 来补装软件包。从输出信息可以看到,yum 会帮我们处理好 RPM 包的依赖关系。同时由于包都在本地,下载的时间几乎可以忽略。
补充说明:常用命令
- rpm -q xxx 查询xxx 软件是否已安装成功
- rpm -ivh xxx.rpm 从本地 xxx软件的rpm包安装xxx软件,软件依赖关系需要手动解决。
- rpm -Uvh http://yy/xxx.rpm 在线更新xxx软件
- yum install xxx 从软件源(可以是本文设立的DVD源)来自动安装软件。软件依赖关系系统自动解决。
- yum list 查看当前系统使用的软件源
- yum search xxx 查找软件源中是否存在 包含xxx名的软件
- yum list xxx 查找软件源中是否存在 包含xxx名的软件
原文地址:http://blog.csdn.net/tsangchoonhsia/article/details/6414780