在SUSE 10.3中安装http apache2的依赖问题解决
在SUSE 10.3系统上安装Apache2时,很多人都会遇到一个典型的依赖错误。系统会明确提示你缺少几个关键的库文件,具体信息通常是这样:
libapr1 >= 1.0 is needed by apache2-2.2.3-16.21.i586
libapr1 < 2.0 is needed by apache2-2.2.3-16.21.i586
libapr-1.so.0 is needed by apache2-2.2.3-16.21.i586
libaprutil-1.so.0 is needed by apache2-2.2.3-16.21.i586
别担心,这个问题其实很常见。其根源在于Apache的运行依赖于APR(Apache Portable Runtime)库。解决起来也直接,只需要把下面这四个对应的rpm包安装上即可:
libapr-util1-1.2.2-13.7.i586.rpm
libapr-util1-devel-1.2.2-13.7.i586.rpm
libapr1-1.2.2-13.2.i586.rpm
libapr1-devel-1.2.2-13.2.i586.rpm
补全这些依赖后,再安装Apache2应该就能顺利进行了。
SUSE 10上的另一个经典案例:循环依赖
话说回来,在更早的SUSE 10版本上,安装Apache时可能会碰到另一个棘手的问题,那就是经典的“循环依赖”。当你尝试安装一个包时,它会告诉你需要另一个包;而当你去安装那个包时,它又说需要最初的这个包。这就形成了一个死循环。
比如,执行安装命令时:
rpm -ivh apache2-2.0.54-10.i586.rpm
系统会报错:
error: Failed dependencies:
apache2-MPM is needed by apache2-2.0.54-10
经验表明,这里的 `apache2-MPM` 通常指的就是 `apache2-prefork` 这个包。于是你顺藤摸瓜去安装它:
rpm -ivh apache2-prefork-2.0.54-10.i586.rpm
结果又出现了新的错误:
error: Failed dependencies:
apache2 = 2.0.54 is needed by apache2-prefork-2.0.54-10
看,问题来了:安装A需要B,安装B又需要A。这种情况下,标准的单包安装命令是行不通的。那么,正确的解法是什么?
答案是:利用RPM工具支持多包同时处理的特性,将它们放在同一个命令里安装,让安装器自己解决这个循环依赖。命令如下:
rpm -ivh apache2-2.0.54-10.i586.rpm apache2-prefork-2.0.54-10.i586.rpm
这样操作,两个包就能一次性成功安装。
如何应对类似的删除问题
值得注意的是,这种紧密的相互依赖关系不仅在安装时体现,在卸载时同样会成为障碍。如果你想单独删除其中一个,系统会阻止你。
尝试删除apache2主包:
rpm -e apache2
error: Failed dependencies:
apache2 = 2.0.54 is needed by (installed) apache2-prefork-2.0.54-10
尝试删除prefork模块包:
rpm -e apache2-prefork
error: Failed dependencies:
apache2-MPM is needed by (installed) apache2-2.0.54-10
道理和安装时一样,既然它们“同生”,卸载时也得“共死”。解决卸载循环依赖的方法和安装时如出一辙,将两个包在同一命令中指定即可:
rpm -e apache2 apache2-prefork
这才是关键所在。理解并妥善处理这种包管理中的依赖关系,尤其是在一些较旧的发行版上,能帮你省去不少折腾的时间。