No package xxx available 的根本原因是 yum 未启用匹配的仓库源,需先运行 yum repolist 检查 base、updates 和 epel 是否启用,CentOS 7 必须使用 epel-release-7 并配置阿里云等国内镜像源,再执行 yum clean all 和 yum makecache。

依赖包找不到:检查源是否启用且匹配系统版本
报错常见形式是 No package xxx available 或 Nothing to do,本质是 yum 根本没看到你要的包。不是你打错了名字,而是源里压根没有它。
先运行 yum repolist 看当前启用的仓库列表。如果输出里没有 base、updates 或 epel(需要时),说明源没开或配置失效。
- CentOS 7 必须有
base和updates,路径通常指向http://mirror.centos.org/centos/7/...;若已停更,需手动换国内镜像(如阿里云、清华源)并更新/etc/yum.repos.d/CentOS-Base.repo - EPEL 源必须与系统大版本一致:CentOS 7 装
epel-release-7,装成epel-release-8就会报依赖错,且后续所有安装都可能失败 - 第三方源(如 remi、ius)要确认是否启用了对应模块,比如
remi-php74需显式启用:yum-config-manager --enable remi-php74
ERROR: XZ COMPRESSION NOT AVAILABLE:缓存损坏导致解压失败
这个错误不是缺依赖,而是 yum 读取元数据时连 .xz 压缩格式都不认了——说明底层 liblzma 或相关插件被破坏或版本不兼容,多见于强制卸载/混装 epel 后。
直接删掉残留缓存比修环境更快:
- 执行
yum remove epel-release(如果之前装过) - 删干净缓存目录:
rm -rf /var/cache/yum/x86_64/7/epel/(注意路径中的7要和你的系统版本一致) - 再跑
yum clean all,然后yum makecache
别跳过 rm -rf 这步——yum clean all 有时清不干净损坏的 xz 元数据索引。
依赖冲突或版本不满足:用 deplist 和 debugsolver 定位真实瓶颈
当提示 package A requires B >= 2.0, but B-1.9 is installed,不要急着 --skip-broken。yum 默认只选“安全升级”,但冲突常来自隐藏的 Obsoletes 或模块流切换。
- 查真实依赖链:
yum deplist xxx,重点看provider:行,确认哪个 repo 提供了你想要的版本 - 模拟安装过程:
yum install xxx --assumeno --debugsolver,输出里会标出第一个卡点(比如某包被obsoleted by yyy-3.0) - 临时放宽策略:
yum install xxx --setopt=strict=0,让 yum 尝试降级或替换而非硬性拒绝
注意:CentOS 7 默认用 yum 3.x,不支持 dnf module;若误启用了模块化仓库,反而会触发不可逆的依赖断裂。
Permission denied 或 lock 被占:别 kill -9,先看进程和锁文件状态
Another app is currently holding the yum lock 不一定真是另一个 yum 在跑,也可能是上次异常退出留下的 /var/run/yum.pid 或 /var/lib/rpm/.rpm.lock。
- 先查进程:
ps aux | grep -E 'yum|dnf',真有进程再 kill - 删 pid 文件:
rm -f /var/run/yum.pid - 更关键的是 rpm 锁:
rm -f /var/lib/rpm/.rpm.lock,否则即使 yum 解锁了,rpm 层仍会拒绝写入 - 最后补一记:
rpm --rebuilddb(仅在怀疑 rpm db 损坏时用,耗时较长)
很多“依赖错”其实是 rpm db 卡在中间状态,表现为依赖检查结果错乱——此时清理缓存没用,必须重建 rpm 数据库或至少释放锁。


















