由于 libevent 依赖关系,gearmand 安装失败

由于 libevent 依赖关系,gearmand 安装失败

我已经安装了 PostgreSQL yum repo 并且 PostgreSQL 已经运行了一段时间,但是现在当我尝试安装时gearmand出现以下错误:

Transaction Check Error:
  file /usr/bin/event_rpcgen.py from install of compat-libevent14-1.4.13-1.rhel6.x86_64 conflicts with file from package libevent-devel-2.0.12-1.rhel6.x86_64
  file /usr/lib64/libevent_core.a from install of compat-libevent14-1.4.13-1.rhel6.x86_64 conflicts with file from package libevent-devel-2.0.12-1.rhel6.x86_64
  file /usr/lib64/libevent_core.so from install of compat-libevent14-1.4.13-1.rhel6.x86_64 conflicts with file from package libevent-devel-2.0.12-1.rhel6.x86_64
  file /usr/lib64/libevent_extra.a from install of compat-libevent14-1.4.13-1.rhel6.x86_64 conflicts with file from package libevent-devel-2.0.12-1.rhel6.x86_64
  file /usr/lib64/libevent_extra.so from install of compat-libevent14-1.4.13-1.rhel6.x86_64 conflicts with file from package libevent-devel-2.0.12-1.rhel6.x86_64

这是因为 libevent 来自 postgresql 存储库,所以我想我只需禁用 postgresql 存储库并再试一次:

yum --disablerepo=pgdg91 install gearmand

Error: Package: gearmand-0.14-3.el6.2.x86_64 (epel)
       Requires: libevent-1.4.so.2()(64bit)
       Available: libevent-1.4.13-1.el6.x86_64 (base)
           libevent-1.4.so.2()(64bit)
       Installed: libevent-2.0.12-1.rhel6.x86_64 (@pgdg91)
           Not found

有没有办法保留 postgresql 使用的 libevent 版本,同时安装 gearmand(使用正确的 libevent 版本)?还是我忽略了某些东西,还有其他(也许更好的)方法?

答案1

通过使用 postgresql yum 存储库,您破坏了 CentOS/RHEL 系统上的二进制兼容性。这意味着该存储库升级/替换的某些软件包(例如 libevent)一旦安装,就会与 CentOS/RHEL 提供的其他软件包不兼容。

具体来说,您的 postgresql repo 已将 RHEL 附带的 libevent-1.4 替换为 postgresql 提供的 libevent-2.0,并且 postgresql 提供的 1.4 兼容库已损坏。

这个特定的包,gearmand,来自 epel 存储库,因此您可以尝试使用以下命令从其源 RPM 重建它:

yumdownloader --source gearmand
rpmbuild --rebuild gearmand-0.14-3.el6.2.src.rpm

然后安装生成的 RPM。

请记住,这可能需要做更多的工作来修改源 RPM 以接受新版本的库,或者可能会导致其他问题,但这是一个起点。如果失败,您可以手动构建源包,但之后卸载或升级会变得困难,因此如果可以的话,请构建源 RPM。

答案2

我猜测最好按照以下方式手动编译 gearmand:1)编译并安装 libevent 到非标准目录中:

wget --no-check-certificate https://github.com/downloads/libevent/libevent/libevent-2.0.19-stable.tar.gz
tar xvfz libevent-2.0.19-stable.tar.gz
cd libevent-2.0.19-stable
./configure --prefix /opt/libevent && make && make install

2) 使用类似以下命令编译 gearmand:

wget https://launchpad.net/gearmand/trunk/0.33/+download/gearmand-0.33.tar.gz
tar xvfz gearmand-0.33.tar.gz
cd gearmand-0.33
export LDFLAGS='LDFLAGS=-L/opt/libevent'
./configure && make && make install

请让我知道这可不可以帮你。

相关内容