You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04环境下锁定gcc-10-base及liblsan0为10.3.0版本并维持系统正常更新的解决方案咨询

Ubuntu 20.04环境下锁定gcc-10-base及liblsan0为10.3.0版本并维持系统正常更新的解决方案咨询

我完全理解你现在的困境:依赖的Magma AGW和新版liblsan0(10.5.0)存在兼容性问题,不得不降级到10.3.0版本,但单纯使用apt-mark hold导致系统陷入依赖死锁——既没法正常更新其他包,新部署的系统也因为自动拉取新版包而无法正常运行。下面给你几个实用的解决方案,帮你锁定特定版本的同时,保持系统其他组件的可更新性:

方案一:使用APT版本固定(Pinning)——最轻便的解决方式

单纯的apt-mark hold会强制阻止包更新,但无法处理依赖关系;而APT Pinning可以指定特定包的优先级,让APT优先选择你需要的版本,同时允许其他包正常更新,也能解决依赖冲突问题。

操作步骤:

  1. 创建APT偏好配置文件
    在/etc/apt/preferences.d/目录下新建一个配置文件,比如gcc-10-pin:
    sudo nano /etc/apt/preferences.d/gcc-10-pin
    
  2. 写入固定规则
    因为gcc-10-base是核心依赖包,很多相关组件(比如libgomp1、libgcc-s1等)都依赖它,所以需要把整个gcc-10套件的相关包都固定到10.3.0版本,避免依赖冲突:
    Package: gcc-10* libgcc-s1 libgomp1 liblsan0
    Pin: version 10.3.0-1ubuntu1~20.04
    Pin-Priority: 1001
    
    • Pin-Priority: 1001表示强制APT选择指定版本,即使上游有更新也不会升级;数值大于1000就会覆盖默认的更新优先级。
  3. 应用规则并调整现有包
    如果之前已经用apt-mark hold锁定了包,先取消锁定:
    sudo apt-mark unhold gcc-10-base liblsan0
    
    然后更新源并确保包降级到指定版本:
    sudo apt update
    sudo apt install gcc-10-base=10.3.0-1ubuntu1~20.04 liblsan0=10.3.0-1ubuntu1~20.04
    
    完成后,你就可以正常更新其他包了,APT会自动处理依赖,不会再强制升级这些锁定的包。

方案二:搭建本地APT仓库——长期稳定部署的保障

如果担心上游仓库再次删除旧版本包,或者需要确保所有新部署的系统都能获取到相同版本的包,搭建本地APT仓库是更可靠的选择。

操作步骤:

  1. 下载所需的旧版本包
    在一台Ubuntu 20.04机器上,下载所有需要固定版本的包(包括依赖):
    sudo apt download gcc-10-base=10.3.0-1ubuntu1~20.04 liblsan0=10.3.0-1ubuntu1~20.04 libgomp1=10.3.0-1ubuntu1~20.04 gcc-10=10.3.0-1ubuntu1~20.04
    
  2. 创建本地仓库结构并生成索引
    # 创建仓库目录结构
    sudo mkdir -p /var/local/apt-repo/dists/focal/main/binary-amd64
    # 移动下载的deb包到仓库目录
    sudo mv *.deb /var/local/apt-repo/dists/focal/main/binary-amd64/
    # 生成仓库索引文件
    cd /var/local/apt-repo
    sudo dpkg-scanpackages . /dev/null | gzip -9c > dists/focal/main/binary-amd64/Packages.gz
    
  3. 配置所有机器使用本地仓库
    在需要部署的机器上添加本地仓库源:
    sudo echo "deb [trusted=yes] file:///var/local/apt-repo focal main" >> /etc/apt/sources.list.d/local-repo.list
    # 如果是通过网络共享仓库,可以替换为http/ftp地址,比如:
    # sudo echo "deb [trusted=yes] http://your-server-ip/apt-repo focal main" >> /etc/apt/sources.list.d/local-repo.list
    
  4. 结合APT Pinning规则
    按照方案一的步骤添加Pin规则,确保APT优先从本地仓库获取这些固定版本的包。

方案三:配置新部署系统的预锁定流程

对于新安装的Ubuntu 20.04系统,需要在执行apt update和应用安装之前,先配置好Pin规则和仓库源,避免自动拉取新版包:

  1. 在自动化安装脚本中,先创建APT Pin配置文件;
  2. 添加本地仓库或归档仓库源;
  3. 执行apt update和apt install操作,此时APT会自动选择10.3.0版本的包,不会升级到10.5.0。

备注:内容来源于stack exchange,提问作者fsrechia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:53:14