我尝试安装一个软件包,成功了,而且看起来运行正常。但是,安装时我收到了几个有关缺少软件包的警告。
dpkg: warning files list file for package '...' missing, assuming package has no files currently installed.
因为这只是一个警告,而且无论如何它似乎都有效,所以我认为这并不重要,但我希望有人能证实这一点。
缺少的软件包是我故意卸载的,因为它们不是必需的并且占用了大量空间。
编辑:包是 tzdata。使用dpkg -i
文件.deb
进行安装。以上基本上是整个警告。只是它列出了包,而不是 ...。,,,python2.7-minimal
python -minimal`libsqlite3-0
libaprutill-dbd-sqlite3
编辑:“你到底做了什么?”我运行了命令
dpkg -i tzdata_2017b-2_all.deb
安装包 tzdata。
“你想实现什么?”我想要安装该包。
“发生了什么?您遇到任何警告或错误消息了吗?”软件包安装并运行正常。但是,上述软件包出现了上述警告。
由于这是在另一台服务器上发生的,我无法复制粘贴。但我会在这里重写它:
dpkg: warning files list file for package python2.7-minimal missing, assuming package has no files currently installed.
dpkg: warning files list file for package libsqlite3-0 missing, assuming package has no files currently installed.
dpkg: warning files list file for package libaprutill-dbd-sqlite3, assuming package has no files currently installed.
dpkg: warning files list file for package python-minimal, assuming package has no files currently installed.
我是不是正在寻找解决方法。我只是好奇 dpkg 在这种情况下向我发出警告是否真的很重要。再次,该程序无论如何都能正常工作,并且我的系统上没有其他程序需要这些软件包。
答案1
你可能想尝试这样的事情:
for package in $(apt-get upgrade 2>&1 |\ grep "warning: files list file for package '" |\ grep -Po "[^'\n ]+'" | grep -Po "[^']+"); do apt-get install --reinstall "$package"; done
复制/粘贴在一行中:
for package in $(apt-get upgrade 2>&1 | grep "warning: files list file for package '" | grep -Po "[^'\n ]+'" | grep -Po "[^']+"); do apt-get install --reinstall "$package"; done
请注意,运行此命令需要一些时间,因为它会循环遍历每个包。
在找到这个之前,我想提出一些类似于那里接受的答案的建议。而且我没有足够的声誉来添加这个作为评论。
不幸的是,我无法回答为什么会发生这种情况。我在 dist-upgrade 之后遇到了这个问题,并通过重新安装软件包解决了它。
答案2
我们遇到了 RAID5 故障,似乎导致dpkg
列表数据库损坏,所以我最近遇到了这个问题,但是上面的解决方案不起作用,因为apt-get install --reinstall xxx
产生了更多可疑列表文件的错误。不过,我确实设法解决了这个问题,所以这是我使用的过程。
最后,对我有用的过程是删除数据库中与该包相对应的所有文件,然后在更新后重新安装dpkg
。
举个例子,这里有一个这样的错误(antlr
从这里开始用你丢失的包名称替换):
dpkg: warning files list file for package antlr, assuming package has no files currently installed.
对我来说,解决方案是:
sudo mv /var/lib/dpkg/info/antlr* ~/var # Backup in case of any other issues
# Alternatively: sudo rm /var/lib/dpkg/info/antlr*
然后,
sudo dpkg --configure -a
关键似乎是在每次删除包列表时运行 configure 命令(与我见过的一些其他建议相反,这些建议是删除所有列表文件然后运行apt-get update/upgrade
)。
然后最后sudo apt-get install --reinstall antlr
就能正确完成。
答案3
我的一个实例上遇到了同样的问题,对我来说,解决方法是使用 apt 重新安装有问题的软件包:
sudo apt reinstall <package_name_1> <package_name_2>
重新安装成功后,重新运行相同的命令,错误消失
答案4
如果您尝试了@fronk 的答案,但apt-get upgrade
没有返回任何 dpkg 警告,但apt-get install <some dummy package> --reinstall
返回了 dpkg 错误。apt-get upgrade
请apt-get install <some dummy package> --reinstall
像这样替换:
for package in $(apt-get install <some dummy package> --reinstall 2>&1 | grep "warning: files list file for package '" | grep -Po "[^'\n ]+'" | grep -Po "[^']+"); do apt-get install --reinstall "$package"; done