我有以下简约sources.list
文件:
root@c:~# cat /etc/apt/sources.list
deb http://ftp.fi.debian.org/debian/ wheezy main
root@c:~# apt-get update
Hit http://ftp.fi.debian.org wheezy Release.gpg
Hit http://ftp.fi.debian.org wheezy Release
Hit http://ftp.fi.debian.org wheezy/main i386 Packages
Hit http://ftp.fi.debian.org wheezy/main Translation-en
Reading package lists... Done
root@c:~#
现在,当我尝试安装软件包时,我最终遇到了分段错误。例如:
root@c:~# apt-get install tcpdump
Reading package lists... Done
Building dependency tree
Reading state information... Done
Segmentation fault
root@c:~#
其中/var/log/messages
记录了以下条目:
Mar 29 05:46:25 c kernel: [ 4677.384747] apt-get[5607]: segfault at b8647e30 ip b8647e30 sp bfaaa9c8 error 14
最后一个(sp)数字总是变化的,即如果我执行apt-get install nmap
三次,则记录以下内容:
Mar 29 05:46:59 c kernel: [ 4711.046400] apt-get[5612]: segfault at b86cbe30 ip b86cbe30 sp bfb36ea8 error 14
Mar 29 05:47:02 c kernel: [ 4714.229648] apt-get[5616]: segfault at b8609e30 ip b8609e30 sp bfcecec8 error 14
Mar 29 05:47:03 c kernel: [ 4715.505656] apt-get[5620]: segfault at b86dae30 ip b86dae30 sp bfb4b588 error 14
我尝试过不同的存储库并清理了检索到的包文件的本地存储库。安装软件包时什么可能导致段错误?我的apt-get
坏了吗?
答案1
你有没有尝试过使用斯特雷斯诊断问题?
我有一个类似的问题,似乎与 google-earth 包有关——包的元数据中的某些内容导致 apt-get (或 apt 系统的某些组件)出现段错误。
我通过使用发现了这一点:
sudo strace -f apt-get update >log.strace-aptget 2>&1
查看日志文件,我可以看到,在读取该文件后/var/lib/apt/lists/dl.google.com_linux_earth_deb_dists_stable_Release
,apt-get 做了一个mremap()
导致段错误的操作。我注释掉了 resources.list 中的 google-earth 条目(实际上是在/etc/apt/sources.list.d/google-earth.list
),现在 apt-get 工作正常。 (当然,我现在无法更新 google-earth,但至少 apt-get 可以工作。)
答案2
运行以下命令:我通过它得到了修复。
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/locksudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup
sudo mv /var/lib/dpkg/status /var/lib/dpkg/status-bad
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status || sudo cp /var/backups/apt.extended_states.0 /var/lib/dpkg/status
sudo mv /var/lib/dpkg/available /var/lib/dpkg/available-bad
sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available
sudo rm -rf /var/lib/dpkg/updates/*
sudo rm -rf /var/lib/apt/lists
sudo rm /var/cache/apt/*.bin
sudo mkdir /var/lib/apt/lists
sudo mkdir /var/lib/apt/lists/partial
sudo apt-get upgrade
答案3
我在 Precise 中也开始经历同样的事情。为了解决这个问题,我添加了一个文件 /etc/apt/apt.conf.d/00bugs,其中包含一行:
APT::缓存启动200000000;
分段错误不再发生。我为此打开了一个错误报告:https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1445436
答案4
显然,造成段错误的原因可能有很多。就我而言,它与部分安装的软件包有关。一些命令也给了我,E: The package cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00 needs to be reinstalled, but I can't find an archive for it.
而其他apt
命令如apt search ____
因段错误退出。
我的情况的解决方案是先执行sudo dpkg --remove --force-all cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00
然后执行sudo apt-get update
。之后,我的apt search _____
命令再次正常工作。