Acquire::GzipIndexes 导致 apt 失败

Acquire::GzipIndexes 导致 apt 失败

为了节省磁盘空间,我启用了获取::GzipIndexes "true";在适当的配置中。

现在,apt update执行时会出现以下错误

raceback (most recent call last):
  File "/usr/lib/cnf-update-db", line 26, in <module>
    col.create(db)
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 94, in create
    self._fill_commands(con)
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 138, in _fill_commands
    self._parse_single_commands_file(con, fp)
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 176, in _parse_single_commands_file
    suite=tagf.section["suite"]
KeyError: 'suite'
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code

我正在使用 ubuntu 20.04

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:    20.04
Codename:   focal

为什么会发生这种情况?如何在不恢复更改的情况下修复它?这是一个错误吗?

答案1

这似乎是已经存在的错误错误报告有趣的是,这与其说是一个 bug,apt不如说是一个找不到命令。该工具旨在对未知命令做出反应,并建议您需要安装哪些软件包才能获取这些命令。根据错误报告

这似乎是由于 apt 下载了用于 command-not-found 的 lz4 压缩命令列表,并且 cnf-update-db 传递了 /var/lib/apt/lists/命令-.lz4 文件到 db/creator.py,它不知道压缩并尝试将它们解析为纯文本。

command-not-found似乎至少两年内无人维护。因此,错误报告中的建议是将其从 Ubuntu 基础映像中删除,以供将来版本使用。如果有人仍想使用command-not-found,他们可以从 PPA 或类似工具安装修复的分支(希望有人会提供)。

到目前为止,这个问题有两种可能的解决方案:一种是在配置Acquire::GzipIndexes中禁用。另一种是卸载,如果你不需要它。因为问题似乎专门出现在,我认为删除这个包可以解决问题。但我还没有研究过删除这个包可能带来的任何副作用。aptcommand-not-foundcommand-not-found

答案2

我有同样的问题,我设法创建了一个简单的解决方案,因为我需要command-not-found两者Acquire::GzipIndexes "true";

我修改了包含错误的文件(CommandNotFound/db/creator.py)以检查处理的文件是否以 lz4 压缩,如果是,则将其解压缩为临时文件并正常使用该文件。

要安装我修改的文件:

sudo apt install python3-lz4; sudo wget -O /usr/lib/python3/dist-packages/CommandNotFound/db/creator.py 'https://raw.githubusercontent.com/3omar-mostafa/command-not-found-fix/main/creator.py'

您可以在github

我希望这能帮到你

相关内容