意外删除了 /var/lib/dpkg/info/,现在我在安装/删除软件包时遇到问题,它提示错误,因为找不到有关已安装软件包的信息。
有什么办法可以拯救系统或者需要完全重新安装 debian?:/
答案1
您应该能够使用如下方法重新生成目录:
for i in $(dpkg -l|awk '/^ii/ {print $2}')
do
apt-get --reinstall -y install $i
done
该代码片段应该做的是重新安装您已经安装的每个软件包。它还将升级所有内容。如果您不想这样做,则必须扩展脚本以安装您当前已安装的特定版本,但这不能保证有效,因为这些软件包可能不再存在于存储库中。
更多信息和略有不同的方法: http://people.adams.edu/~cdmiller/posts/Ubuntu-dpkg-recovery/
编辑:上述链接文章中的重要提示:
由于 /var/lib/dpkg 中缺少更多内容,某些软件包仍无法正确安装。特别是软件包“ucf”对于启用内核和其他一些软件包的正确安装非常重要。
如果没有 /var/lib/dpkg/info/ucf.templates,内核安装会产生以下错误:
failed to install/upgrade: User postinst hook script [/sbin/update-grub] exited with value 10
安装 ucf:
apt-get --reinstall install ucf
该文章介绍了从完全删除中恢复全部,因此/var/lib/dpkg
这个额外的步骤可能不适用于您的情况。
答案2
好吧,这一天和其他日子一样,为什么呢?因为我遇到了一个有点类似的问题,但这次只与一些软件包有关,并显示以下消息:
日志开始时间:2019-09-22 16:12:10 dpkg:无法恢复的致命错误,正在中止: 正在读取软件包‘apt’的文件列表:错误地址 日志结束时间:2019-09-22 16:12:10
我解决这个问题的方式有点类似,但也有一些不同,例如:
我没有将整个目录重命名为“/var/lib/dpkg/info/”,而是移动了那些给我带来麻烦的文件(包名称),在本例中是“apt”包。
- 所以我首先过滤了与模式“^apt”相关的包:
mlazo@mlazo-pc:~$ dpkg -l|awk'/^ii apt/{打印 $2}' 易于 apt-config-图标 apt-config-图标-hidpi apt-config-图标-大 apt-config-icons-large-hidpi apt-transport-https apt-utils apt-xapian-index apt守护进程 aptdaemon 数据
- 在目录“/var/lib/dpkg/info”中,我创建了一个目录并移动了与前面的列表匹配的文件:
cd /var/lib/dpkg/info mdkir ../info_back mv -v $(ls |grep -i "^apt") ../info_back/
- 文件移动后,我继续执行重新安装过程:
对于 $(dpkg -l| awk '/^ii apt/ {print $2}') 中的 x;执行 apt-get install --reinstall ${x} -y;完成
- 在处理过程中,我检查了“/var/log/apt/term.log”,得到了以下确认:
mlazo@mlazo-pc:~$ tail -n 20000 /var/log/apt/term.log |grep -i "准备解压.../apt" 准备解压 .../apt-config-icons_0.12.0-3ubuntu1_all.deb ... 准备解压 .../apt-config-icons-hidpi_0.12.0-3ubuntu1_all.deb ... 准备解压 .../apt-config-icons-large_0.12.0-3ubuntu1_all.deb ... 准备解压 .../apt-config-icons-large-hidpi_0.12.0-3ubuntu1_all.deb ... 准备解压 .../apt-transport-https_1.6.12_all.deb ... 准备解压 .../apt-utils_1.6.12_amd64.deb ... 准备解压 .../apt-xapian-index_0.47ubuntu13_all.deb ... 准备解压 .../aptdaemon_1.1.1+bzr982-0ubuntu19.1_all.deb ... 准备解压 .../aptdaemon-data_1.1.1+bzr982-0ubuntu19.1_all.deb ...
- 重新安装过程完成后,我继续执行升级过程,并得到成功的结果:
root@mlazo-pc:/var/lib/dpkg/info# apt-get 升级 .. .. .. 处理 initramfs-tools (0.130ubuntu3.8) 的触发器... update-initramfs:生成 /boot/initrd.img-5.0.0-25-generic 处理 libvlc-bin:amd64 (3.0.8-0ubuntu18.04.1) 的触发器...
通过我之前执行的步骤,它可以在 30 分钟内完成,而不是 4 个小时。
希望前面的步骤能够对某些人有所帮助。
此致,
曼努埃尔·拉佐