You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu/Debian从源码编译Git生成Deb安装时依赖报错求助

问题分析与解决办法

问题根源

你遇到的依赖冲突是Debian/Ubuntu系包管理的**版本纪元(epoch)**特性导致的。系统里的官方Git包版本号带有前缀1:(比如1:2.1.3),这个前缀就是epoch,用来解决版本号回溯或格式变更时的版本比较问题。

而你通过checkinstall生成的Git包版本是2.16.2-1,没有这个epoch前缀。dpkg在比较版本时,会优先判断epoch:没有epoch的版本会被视为比任何带epoch的版本更低,哪怕后面的数字数值更大。所以libcgi-pm-perlBreaks: git (<< 1:2.1.3)规则会错误地认为你的2.16.2-1版本低于1:2.1.3,进而触发依赖阻断,导致安装失败。

至于Ubuntu14.04和CentOS7能正常安装的原因:

  • Ubuntu14.04的libcgi-pm-perl可能没有设置这个针对Git版本的Breaks规则,或者官方Git包也没有使用epoch前缀;
  • CentOS使用RPM包管理系统,版本号规则和Debian系完全不同,不存在epoch这个概念,自然不会有这类冲突。

解决步骤

1. 清理系统残留的错误状态

首先把之前安装失败的Git包移除,修复系统依赖:

sudo dpkg -r git
sudo apt --fix-broken install

执行完后,确保系统回到没有未配置包的干净状态。

2. 重新生成带epoch的deb包

在执行checkinstall时,通过--pkgversion参数指定带epoch的版本号,和官方包格式对齐:

# 回到Git源码目录(如果之前的编译产物还在,可跳过make步骤,直接执行checkinstall)
sudo checkinstall --install=no --pkgversion=1:2.16.2-1

这个命令会生成版本号为1:2.16.2-1的deb包,dpkg就能正确识别它的版本高于1:2.1.3,不会触发libcgi-pm-perl的阻断规则。

3. 安装修复后的deb包

最后安装新生成的包即可:

sudo dpkg -i git_1:2.16.2-1_amd64.deb

这时应该能顺利完成安装,后续的apt-get upgrade也不会再出现依赖问题。

内容的提问来源于stack exchange,提问作者Alex.Volodin

火山引擎 最新活动