3

我在 CentOS 5.1 上使用 yum - 我从源代码手动编译 PHP 5.2.8,但使用 yum 安装了其他软件包。我需要通过 pecl 安装一个 PHP 扩展,它也需要安装 phpize。但是,执行以下操作会产生依赖错误:

sudo yum install php-devel

错误:缺少依赖项:php-devel 包需要 php = 5.1.6-20.el5_2.1

由于我实际上已经安装了更新版本的 PHP,我如何强制 yum 忽略它?我需要从源代码手动编译 pecl/phpize 吗?诚然,我以前从未遇到过问题,这似乎只是因为编译和 yum 安装的组合。

有什么想法吗?

谢谢,凯尔

4

3 回答 3

4

一般来说:

如果你自己构建它,它会进入/usr/local,并且只能被/usr/local.

如果你从 RPM/Yum 安装,它会进入/usr,并且可以被/usr和访问/usr/local

因此,如果您想使用家庭编译的 PHP 安装 PHP 工具,请将它们/usr/local也安装到:通常,对于 GNU 类型的软件,它类似于:

   ./configure --prefix=/usr/local && make && sudo make install

或者

   make prefix=/usr/local all && sudo make prefix=/usr/local install

…尽管大多数软件应该默认为,/usr/local除非您覆盖其前缀设置。

如果你想“手工构建”基于 RPM 的包,你可以使用

   yumdownloader --source WHATEVER-PACKAGE
   rpm -i WHATEVER-PACKAGE.rpm
   rpmbuild -bp ~/rpm/SPECS/WHATEVER-PACKAGE.spec

(您的等效路径~/rpm可能会有所不同;rpmbuild --showrc会告诉您在哪里)

这会下载.src.rpm包,其中包含上游(原作者的)源(通常是 tarball)以及特定于操作系统的补丁;将源安装到~/rpm(或您的 rpmbuild 前缀);然后解压缩源并将补丁应用到~/rpm/BUILD/WHATEVER-PACKAGE/

从那里,您可以自己执行配置/制作步骤,带有/usr/local前缀

当然,仅从 RPM 安装要容易得多 :-)

于 2012-02-22T15:40:31.423 回答
3

yum对您手动编译的 php 版本一无所知。您可以通过使用安装包来绕过 RPM 的依赖关系解析,rpm --nodeps并希望它能正常工作。

或者将你自己编译的php版本安装在另一个目录中,这样它就可以和yum的旧版本共存,所以每个人都很高兴(不确定这是否可能,我想这取决于你的应用程序是否使用硬编码的php路径) .

或者,如果幸运的话, EPELRPMForge等第三方存储库可能有更新的 php 包,因此您不必自己编译。

于 2009-03-23T19:20:21.753 回答
2

根据经验,最好在系统中有一个包管理,因此最好将所有内容打包在 RPMS 中并通过 yum 进行管理。从长远来看,它将为您节省大量时间。

如果您绝对想从源代码中手动获得某些东西(fe PHP)编译器,请使用 stow/checkinstall/... 或任何其他解决方案,使您能够对源代码编译的东西进行基本的包管理。

Regerding 您的问题,您可以尝试通过下载所需软件包的 RPM 并执行“rpm -i --force file.rpm”来覆盖依赖性检查,因为 yum 没有任何强制安装选项

于 2009-03-18T23:10:21.580 回答