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优先选择你需要的版本,同时允许其他包正常更新,也能解决依赖冲突问题。
操作步骤:
- 创建APT偏好配置文件
在/etc/apt/preferences.d/目录下新建一个配置文件,比如gcc-10-pin:sudo nano /etc/apt/preferences.d/gcc-10-pin - 写入固定规则
因为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: 1001Pin-Priority: 1001表示强制APT选择指定版本,即使上游有更新也不会升级;数值大于1000就会覆盖默认的更新优先级。
- 应用规则并调整现有包
如果之前已经用apt-mark hold锁定了包,先取消锁定:
然后更新源并确保包降级到指定版本:sudo apt-mark unhold gcc-10-base liblsan0
完成后,你就可以正常更新其他包了,APT会自动处理依赖,不会再强制升级这些锁定的包。sudo apt update sudo apt install gcc-10-base=10.3.0-1ubuntu1~20.04 liblsan0=10.3.0-1ubuntu1~20.04
方案二:搭建本地APT仓库——长期稳定部署的保障
如果担心上游仓库再次删除旧版本包,或者需要确保所有新部署的系统都能获取到相同版本的包,搭建本地APT仓库是更可靠的选择。
操作步骤:
- 下载所需的旧版本包
在一台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 - 创建本地仓库结构并生成索引
# 创建仓库目录结构 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 - 配置所有机器使用本地仓库
在需要部署的机器上添加本地仓库源: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 - 结合APT Pinning规则
按照方案一的步骤添加Pin规则,确保APT优先从本地仓库获取这些固定版本的包。
方案三:配置新部署系统的预锁定流程
对于新安装的Ubuntu 20.04系统,需要在执行apt update和应用安装之前,先配置好Pin规则和仓库源,避免自动拉取新版包:
- 在自动化安装脚本中,先创建APT Pin配置文件;
- 添加本地仓库或归档仓库源;
- 执行
apt update和apt install操作,此时APT会自动选择10.3.0版本的包,不会升级到10.5.0。
备注:内容来源于stack exchange,提问作者fsrechia
相关产品推荐
相关产品推荐

