【Ubuntu踩坑及解决方案(一)】

1. 问题概述(发生了什么)

在 Ubuntu 22.04(jammy)虚拟机中进行环境配置与编译 RMMock 时,先后遇到两类问题:

  1. apt update / apt install 失败:提示 Temporary failure resolving ...(域名解析失败)

  2. apt install 报错:Could not get lock /var/lib/dpkg/lock-frontend ... held by process ... (unattended-upgr)(dpkg 锁被占用)

  3. go build . 下载依赖失败:访问 https://proxy.golang.orgconnect: connection refused(Go 默认模块代理不可达)


2. 问题 1:apt update 报 "Temporary failure resolving ..."

2.1 现象(报错特征)

sudo apt update 输出大量:

  • Temporary failure resolving 'archive.ubuntu.com'

  • Temporary failure resolving 'security.ubuntu.com'

  • Temporary failure resolving 'packages.ros.org'

  • Temporary failure resolving 'packages.microsoft.com'

2.2 根因(为什么会这样)

这是 DNS 解析失败:系统无法把域名解析成 IP,所以无法访问软件源。

2.3 如何定位(如何确认是 DNS 问题)(详见:另一篇博文Unbuntu网络问题解决方案-CSDN博客)(https://blog.csdn.net/2402_87862217/article/details/156805772?spm=1001.2014.3001.5501

2.4 解决方案(修复 DNS)


3. 问题 2:apt install 报 dpkg lock 被 unattended-upgrades 占用

3.1 现象(报错特征)

执行 sudo apt install ... 出现:

  • Could not get lock /var/lib/dpkg/lock-frontend

  • It is held by process XXXX (unattended-upgr)

3.2 根因(为什么会这样)

Ubuntu 在后台运行 unattended-upgrades(无人值守自动升级)

它会占用 dpkg 锁,导致你手动运行 apt 时无法同时操作。

触发原因通常是:你刚执行了 sudo apt update,系统发现有大量安全更新,于是自动升级开始。

3.3 如何定位(确认锁是谁占的)

复制代码
ps aux | grep unattended

如果看到类似:

  • /usr/bin/unattended-upgrade

    说明后台正在升级。

3.4 正确处理方式(重点:不要乱删锁)

✅ 推荐:等待 unattended-upgrades 自动完成

判断完成标志:ps aux | grep unattended 不再出现 unattended-upgrade(只剩 grep 本身,或仅剩 shutdown guard)。

✅ 升级结束后建议执行收尾:

sudo dpkg --configure -a

3.5 结果

等待后再次安装/升级 snapd 成功,输出中出现的
disabled or static unit not running, not starting it

属于正常提示,不是错误。


4. 问题 3:go build 下载依赖失败(proxy.golang.org 连接被拒)

4.1 现象(报错特征)

go build . 时出现多行:

  • Get "https://proxy.golang.org/...": dial tcp ...:443: connect: connection refused

4.2 根因(为什么会这样)

Go 默认使用官方模块代理:

  • GOPROXY=https://proxy.golang.org

    在某些网络环境(国内、校园网、特定出口策略)下该域名可能被阻断或拒绝连接,导致依赖无法下载,从而编译失败。

4.3 如何定位(验证哪个代理可用)

用 curl 测试:

复制代码
curl -I https://proxy.golang.org curl -I https://goproxy.cn

本次结果:

  • proxy.golang.org 连接拒绝

  • goproxy.cn 返回 HTTP 200(可用)

4.4 解决方案(切换 Go 模块代理)

设置国内代理并清缓存后重试:

复制代码
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOSUMDB=sum.golang.google.cn
go clean -modcache
go build .

5. 验证清单(确保问题真的解决)

5.1 apt 正常

sudo apt update

不应再出现 Temporary failure resolving ...

5.2 dpkg 锁已释放

ps aux | grep unattended

不应再出现 unattended-upgrade 主进程

5.3 Go 代理设置正确

go env | grep -E 'GOPROXY|GOSUMDB'

5.4 构建成功

go build . ls -lh

应生成可执行文件(或至少不再报下载依赖错误)


6. 经验与预防(下次怎么避免踩坑)

  1. 新装系统 / 刚联网:先处理 DNS,再 apt update

  2. apt update 后如果系统自动升级,不要立刻 install 一堆包,先等后台升级结束

  3. 国内/受限网络编译 Go 项目:提前设置 GOPROXY 为 goproxy.cn

  4. 遇到 apt 锁:不要删锁文件 ,先确认进程并等待;必要时只用安全的 dpkg --configure -a 做收尾


相关推荐
凡人叶枫2 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
yuanmenghao3 小时前
Linux 性能实战 | 第 7 篇 CPU 核心负载与调度器概念
linux·网络·性能优化·unix
qq_297574673 小时前
Linux 服务器 Java 开发环境搭建保姆级教程
java·linux·服务器
梦想很大很大3 小时前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
神筆&『馬良』3 小时前
Foundation_pose在自己的物体上复现指南:实现任意物体6D位姿检测(利用realsense_D435i和iphone_16pro手机)
目标检测·ubuntu·机器人·视觉检测
70asunflower3 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
聆风吟º4 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~4 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
神梦流4 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
凡人叶枫4 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++