1. 问题概述(发生了什么)
在 Ubuntu 22.04(jammy)虚拟机中进行环境配置与编译 RMMock 时,先后遇到两类问题:
-
apt update / apt install失败:提示Temporary failure resolving ...(域名解析失败) -
apt install报错:Could not get lock /var/lib/dpkg/lock-frontend ... held by process ... (unattended-upgr)(dpkg 锁被占用) -
go build .下载依赖失败:访问https://proxy.golang.org时connect: 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. 经验与预防(下次怎么避免踩坑)
-
新装系统 / 刚联网:先处理 DNS,再 apt update
-
apt update后如果系统自动升级,不要立刻 install 一堆包,先等后台升级结束 -
国内/受限网络编译 Go 项目:提前设置 GOPROXY 为
goproxy.cn -
遇到 apt 锁:不要删锁文件 ,先确认进程并等待;必要时只用安全的
dpkg --configure -a做收尾