前言:常用RPM的朋友们都知道,RPM简单易用,但是它的依赖关系是最头疼的!
有时候比方说A包需要B包,B包需要C包,C包需要A包,好了。这就是最常见的死锁了(类似数据库有木有?)。
这个时候有以下几种方式可以解决:
A、强制安装 ----暴力型
# rpm -ivh--force --nodepsgcc-c++-4.1.2-42.el5.i386.rpm
warning: gcc-c++-4.1.2-42.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:gcc-c++ ########################################### [100%]
使用rpm -ivh --force --nodeps 强制安装。忽略依赖关系。这种方法你可以先装A包,再装B包,再装C包。这样还是有点隐患的,感觉不是很踏实(虽然其实目前没发现什么不好)。安装后使用成功的前提是:你要搞清楚依赖关系,并且把这些包都装好。好处是:不用管它们的具体依赖关系先后顺序。
B、一次性全装上--- 一网打尽型
可以把依赖的几个包拷出来放在同一个文件夹里 然后 rpm -ivn *.rpm 这样也可以 前提也是一个都不能少。
#rpm -ivn *.rpm
# yum -y localinstall *.rpm
C、 使用yum技术安装 --使用服务器方式
yum是一个服务器资源技术。通过在线下载服务器资源的方式。
缺点:太繁琐。要设置一堆的东西。优点:设置以后,很方便,需要的大多数资源都可以从服务器上找到。
yum deplist PACKAGE_NAME 列出一个包所有的依赖
如果没有yum源,我们要离线在一台服务器上安装httpd,那么可以把所有依赖打包:
#export LANG=en_US.utf-8
# yum deplist httpd | grep provider | awk '{print $2}' | sort | uniq
# yumdownloader $(yum deplist httpd | grep provider | awk '{print $2}' | sort | uniq)
#yumdownloader httpd
然后在安装服务器上:
#yum -y localinstall httpd
注:注意软件包的版本
检查系统是否已安装某个软件包:
#rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' PACKAGE_NAME
D、自建仓库
# yum -y install createrepo
#mkdir -p /var/ftp/pub/localrepo
#mv -f oracle_depspackage/*/var/ftp/pub/localrepo
#touch /etc/yum.repos.d/localrepo.repo
#echo "[localrepo]" >> /etc/yum.repos.d/localrepo.repo
#echo "name=Unixmen Repository" >> /etc/yum.repos.d/localrepo.repo
#echo "baseurl=file:///var/ftp/pub/localrepo" >> /etc/yum.repos.d/localrepo.repo
#echo "gpgcheck=0" >> /etc/yum.repos.d/localrepo.repo
#echo "enabled=1" >> /etc/yum.repos.d/localrepo.repo
#createrepo -v /var/ftp/pub/localrepo
#yum clean all