运行 apt update 时出现 appstreamcli 问题

运行 apt update 时出现 appstreamcli 问题

今天,当我运行 apt 更新并返回以下结果时,我在 Debian 测试中遇到了问题:

E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh-cache > /dev/null; fi'
E: Sub-process returned an error code

答案1

谷歌搜索后,我发现有人说删除包 appstream 可以解决问题。

此解决方案可行,但在许多情况下,此方法会删除您可能不想删除的包。

另一种解决方案是注释文件中的最后三行,/etc/apt/apt.conf.d/50appstream如下所示:

...
#APT::Update::Post-Invoke-Success {
#    "if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh-cache > /dev/null | true; fi";
#};

然后保存文件并apt-get update再次运行。

运行系统升级后,程序包 appstream 可能会有一个可以修复此错误的升级,并且可能会出现如下消息:

Configuration file '/etc/apt/apt.conf.d/50appstream'
  ==> Modified (by yourself or by a script) since the installation.
  ==> The package distributor has released an updated version.
    What do you want to do? Your options are:
     Y or I: install the version of the maintainer package
     N or O: keep the currently installed version
       D: Show differences between versions
       Z: start a shell to examine the situation

您应该选择 Y 来升级您已修改的文件。

我发布此内容是为了帮助其他可能搜索此错误的人。

答案2

apt-get clean

清空 apt 缓存似乎也解决了我的问题。然后我就可以跑了

apt-get update

没有任何问题或警告。

编辑:也许我太快了。清理缓存后错误消失,但后来又出现了。

答案3

我在从 Ubuntu 20.04 更新失败中恢复时遇到了同样的问题。根据其他地方的答案,我将 appstreamcli 移开:

sudo mv /usr/bin/appstreamcli /root

在那之后,

sudo apt update

工作没有问题。

然后我做了

sudo apt upgrade

最后

sudo apt install --reinstall appstream
sudo rm /root/appstreamcli

这解决了僵局。然后我确实有几个“保留”的包需要手动处理,但这很简单(如果相当乏味的话)。

答案4

grep -Rnw '/etc/apt/apt.conf.d/' -e '调用成功后'

/etc/apt/apt.conf.d/15update-stamp:1:APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};
/etc/apt/apt.conf.d/50command-not-found:14:APT::Update::Post-Invoke-Success {
/etc/apt/apt.conf.d/20packagekit:11:APT::Update::Post-Invoke-Success {
/etc/apt/apt.conf.d/99update-notifier:2:APT::Update::Post-Invoke-Success {"/usr/lib/update-notifier/update-motd-updates-available 2>/dev/null || true";};

就我而言,是的50command-not-found

因此,相应地编辑文件。

相关内容