Ubuntu 16.04
我收到此apt update
错误:
AppStream system cache was updated, but problems were found:
Metadata files have errors: /var/cache/app-info/xmls/fwupd.xml
我之前已经运行过:
sudo apt install appstream/xenial-backports
sudo apt update
sudo apt upgrade
上述错误仍然存在。
答案1
根据评论,为我解决这个问题的是:
# rm /var/cache/app-info/xmls/fwupd.xml
# appstreamcli refresh --force
AppStream cache update completed successfully.
# apt update
现在一切似乎都很好。
还应该补充一下,我已经0.10.6
安装了版本xenial/back-ports
。
答案2
我发现您问题中描述的错误是由于 中的拼写错误造成的/var/cache/app-info/xmls/fwupd.xml
。
我的修复程序:
- 使用命令在终端上打开此文件
sudo gedit /var/cache/app-info/xmls/fwupd.xml
。我在这里使用gedit
文本编辑器。您可以使用任何您熟悉的文本编辑器。 - 转到第 265 行,上面写着
<checksum filename="Firmware_SF30&SN30_Pro_V1.26.dat" target="content" type="sha1">3ef2bdee8aca2a45b9f53b4d4cce9722523f57f8</checksum>
。我所做的就是将拼写错误更正为SF30&SN30
。SF30&SN30
也就是说,符号&
应该改为&
。 - 最后,保存文件并退出。
要检查是否成功,请在终端上运行sudo apt update
。错误不应该存在。但如果仍然存在,我运行命令appstreamcli refresh --force
然后sudo apt update
。到这个阶段,我不再在同一个登录会话中遇到错误。
补充笔记:
- 有时,Ubuntu 会通知我有哪些新软件包可供安装,并会要求我授予安装这些新软件包的权限。安装这些新软件包后,我在安装过程中遇到了与你问题中相同的错误消息
sudo apt update
。为了避免该错误,我只是重新执行了上述步骤。希望开发人员能够尽快修复此错误。 - 我曾遇到过删除文件
fwupd.xml
和的 建议50appstream
。但是,我注意到这些文件包含用于某些目的的指令。因此,我的修复过程并未删除这些文件。如果您想删除它们,我建议您先备份它们。
答案3
在遇到相同的更新问题后,我建立了一个短期解决方案,有助于修复这种情况,直到开发人员调整有问题的 XML 文件中的语法错误。
建议的短期解决方案:bugfix.sh
#! /bin/bash
# bugfix.sh
#
# DESCRIPTION
# Temporary fix for Ubuntu firmware update issues
# Created by h8rt3rmin8r on 20180804
#
# BUG INFORMATION
# File location: /var/cache/app-info/xmls/fwupd.xml
# Line number: 265
SRC_STRING=$(sudo cat /var/cache/app-info/xmls/fwupd.xml)
OLD_SUBSTRING='Firmware_SF30&SN30_Pro_V1'
NEW_SUBSTRING='Firmware_SF30&SN30_Pro_V1'
touch /dev/shm/bugfix.xml
echo ${SRC_STRING/$OLD_SUBSTRING/$NEW_SUBSTRING} > /dev/shm/bugfix.xml
sudo mv /dev/shm/bugfix.xml /var/cache/app-info/xmls/fwupd.xml
bugfix.sh 使用说明:
要运行 bugfix.sh,只需将上述代码复制到新文件中(使用 gedit 等文本编辑器),然后将该文件保存为“bugfix.sh”并保存在方便的位置。
当位于与 bugfix.sh 脚本相同的目录中时,使用以下命令启用脚本执行:sudo chmod +x bugfix.sh
使用以下命令运行错误修复脚本:./bugfix.sh
补充笔记:
运行此脚本将暂时解决当前的问题。如果稍后再次出现该错误,则只需再次运行该脚本即可。
为了方便访问,你甚至可以将此脚本存储在 中,/usr/local/bin
以便你可以直接从终端使用 调用它bugfix.sh
。然后,只要错误存在,你就可以bugfix.sh
在运行 之前调用它sudo apt-get update && sudo apt-get -y dist-upgrade
。