问题描述
今天要在Ubuntu20.04下安装软件包时候提示“Segmentation faultsts”导致无法继续更新,尝试发现主要就是在使用命令apt-get install
和apt-get update
就报错,尝试了如下几种方式,全部都无效:
- 方式1:删除所有已经下载但尚未安装的软件包
sudo apt-get clean
- 方式2:重新安装依赖库,这条命令结果就是又报错
sudo apt-get install -f
- 方式3:使用strace诊断 来诊断问题,结果输出内容太多,没有头绪
sudo strace -f apt-get update >log.strace-aptget 2>&1
- 方式4:网上说的最多的,删除缓存的bin,运行后问题依旧
sudo rm -rf /var/cache/apt/*.bin
问题解决
以上方式都不行,只能从系统日志看看有没有问题:
dmesg | grep segfault
输出内容如下:
(base) aic@aic-System-Product-Name:/usr/lib/x86_64-linux-gnu$ dmesg | grep segfault
[ 57.808496] apt-get[2179]: segfault at 7f09eda731cc ip 00007f09ef664f85 sp 00007fff4441e350 error 4 in libapt-pkg.so.6.0.0[7f09ef53a000+14a000]
[ 163.003989] apt[2771]: segfault at 7f990d2d01cc ip 00007f990eec1f85 sp 00007fff01751ec0 error 4 in libapt-pkg.so.6.0.0[7f990ed97000+14a000]
[ 262.289911] check-new-relea[3560]: segfault at 7f2180f631cc ip 00007f2182362f85 sp 00007fff584d78f0 error 4 in libapt-pkg.so.6.0.0[7f2182238000+14a000]
[ 304.464952] apt[4176]: segfault at 7f2fb591b1cc ip 00007f2fb750cf85 sp 00007ffcd2918360 error 4 in libapt-pkg.so.6.0.0[7f2fb73e2000+14a000]
怀疑是libapt-pkg.so.6.0.0出问题了,该文件在/usr/lib/x86_64-linux-gnu下面,切进去看,
(base) aic@aic-System-Product-Name:/usr/lib/x86_64-linux-gnu$ ls -al libapt-pkg*
lrwxrwxrwx 1 root root 19 Dec 7 2020 libapt-pkg.so.6.0 -> libapt-pkg.so.6.0.0
-rw-r--r-- 1 root root 1936856 Dec 7 2020 libapt-pkg.so.6.0.0
就是个符号链接指向而已。
刚开始想得太简单,直接从别人正常的Ubuntu20.04下拷贝了一个libapt-pkg.so.6.0.0过来替换,问题依旧没有解决。于是去网上搜一下有没有安装包。
先查看一下apt版本
apt --version
输出:
apt 2.0.09 (amd64)
于是去官网上下载deb包:https://pkgs.org/download/apt
官网上没有这个版本,只有2.02和2.10的

刚开始下了2.0.10的,dpkg -i 安装报错,提示缺少依赖
又下载了2.0.2的,安装成功。安装后sudo apt-get clean 一下,然后update就没有问题了,但是安装软件提示apt版本太低,这个时候根据提示升级就可以了,没有再报错。
以往遇到问题先想着搜答案,结果绕了一圈都没有解决,最后还是从日志中发现蛛丝马迹,可见日志查看的重要性,毕竟每个人的电脑问题不一样,即使表现出来的错误相同。