Skip to content

安装librdkafka-devel 遇到的yum源优先级问题

Posted on:July 19, 2022 at 08:00 AM

安装librdkafka-devel 遇到的yum源优先级问题

事情起因

公司有个golang项目依赖confluent-kafka-go

这个包是 librdkafka(c++) 项目的golang绑定,所以需要在机器上安装正确的librdkafka包项目才能编译成功

我们服务是aws linux 2的机器,相当于centos7。 按照文档说明配置yum 源:

sudo rpm --import https://packages.confluent.io/rpm/7.2/archive.key

#创建/etc/yum.repo.d/confluent.repo,内容如下:
[Confluent]
name=Confluent repository
baseurl=https://packages.confluent.io/rpm/7.2
gpgcheck=1
gpgkey=https://packages.confluent.io/rpm/7.2/archive.key
enabled=1

[Confluent-Clients]
name=Confluent Clients repository
baseurl=https://packages.confluent.io/clients/rpm/centos/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.confluent.io/clients/rpm/archive.key
enabled=1

aws linux 2 的 $releasever 是2,需要手动改为7(centos7)

配置好后,执行yum list librdkafka-devel 没有发现最新的1.9.0的包,很疑惑。

confluent-kafka-go的依赖是1.9.0,必须安装librdkafka-devel 1.9.0才能编译成功。 aws 自带的librdkafka-devel 版本太低

排查过程

成功,悲喜交加,搞了2个小时解决了。

但yum list 或 yum search 为什么没找到 librdkafka-devel 包的问题还是找到

追查问题并找到原因

看着yum备忘录上的命令,尝试执行yum repoinfo Confluent-Clients/x86_64命令查看repo的信息。

突然注意到了提示信息:yum 68 packages excluded due to repository priority protections

在google搜了这个报错,找到了问题的原因: yum源的优先级 —— 如果yum中多个源都包含同一个包时,它只会取最高优先级的源的包

/etc/yum.repo.d/confluent.repo添加 priority=1,设置第一优先级(priority N越大优先级越小,取值1到100)

执行 yum list librdkafka-devel-1.9.0-1.cflt.el7.x86_64.rpm1.9.0-1 版本可以找到了

.修改priorities的配置文件/etc/yum/pluginconf.d/priorities.conf,enabled=0 可以禁用priorities插件。也可以解决优先级问题 (不过我没试过)