apt-offline 解析错误 E:Lzma_read 读取错误 (7) 无法解析或打开软件包列表或状态文件

apt-offline 解析错误 E:Lzma_read 读取错误 (7) 无法解析或打开软件包列表或状态文件

语境

我有一台旧的笔记本电脑Kubuntu 18.04,有一段时间没用了,想用 进行更新apt-offline。笔记本电脑无法连接到互联网。

apt-offline已安装在笔记本电脑上并可正常运行。

使用经典流程:

# On laptop
apt-offline set update.sig

# On Internet PC
apt-offline get --bundle updates.zip update.sig

# On laptop
apt-offline install updates.zip

问题

到目前为止一切看起来都很好。但 !如果我在此之后尝试任何 apt 命令,我就会得到Read Error

# On Offline Laptop
sudo apt-offline set --upgrade upgrade.zip
# Gathering details for the 'upgrade' operation
# E: Lzma_read Read Error (7) 
# E: The package lists or status file could not be parsed or opened.
# ERROR: FATAL: Something is wrong with the APT system

几乎所有 APT 命令都会给出相同的结果。(这两E:行)

我尝试过不--bundle将包保存在 zip 中而是将其保存在目录中,但问题是一样的。

问题的根源

经过一番挖掘,似乎文件格式正确,但我的直觉告诉我要检查 apt-offline 的更改日志。但是...我没有找到...见下文:

> 1.8.2-1
> Superseded in sid-release on 2020-04-30
# (...) skip to line 30
  * Switch to 3.0 (quilt) source format
  * Update debian/gbp.conf about switch to 3.0 (quilt) source format

所以我猜他们改变了 apt 源文件的格式。不幸的是,我没有在 man 中看到任何向后兼容性。

预见的解决方案

我在这里看到几个选项:

  1. 使用转换器将新文件格式转换为旧文件格式
  2. 在离线笔记本电脑上手动安装新版本的 apt,以便它支持新语法
  3. 找到一种方法来告诉apt-offline保存为旧文件格式
  4. apt-offline在我的互联网电脑上安装旧版本

问题

我想知道你对此有何看法。

  • A)你认为我的假设(参见‘问题的根源’)看起来正确?
    • 您认为还有其他可能的解释吗?
  • B) 哪种选择最安全/最快?

答案1

解决方案 #4

协议

因此我尝试遵循协议:

  1. 下载旧版本apt-offline(v.1.8.1)这里
  2. sudo apt remove apt-offline
  3. sudo dpkg -i apt-offline_1.8.1_all.deb
  4. 重复更新过程
    1. 在线电脑:apt-offline get update.sig --bundle updates.zip
    2. 离线:sudo apt-offline install updates.zip
  5. 安装升级
    1. 离线:sudo apt-offline set upgrade.sig --upgrade
    2. 在线电脑:apt-offline get upgrade.sig --bundle upgrades.zip
    3. 离线:sudo apt-offline install upgrades.zip
    4. 离线:sudo apt upgrade --no-download

结果

执行时没有显示任何错误apt-offline set --upgrade

apt-offline get与线程相关的过程中发生了一个非致命错误。见下文。

结论 :我认为解决方案#4 成功,因为更新下载成功。

Traceback (most recent call last):
  File "/bin/apt-offline", line 28, in <module>
    main()
  File "/usr/lib/python3/dist-packages/apt_offline_core/AptOfflineCoreLib.py", line 2211, in main
    args.func(args)
  File "/usr/lib/python3/dist-packages/apt_offline_core/AptOfflineCoreLib.py", line 1360, in fetcher
    ConnectThread.stopQueue(0.2)
  File "/usr/lib/python3/dist-packages/apt_offline_core/AptOfflineLib.py", line 674, in stopQueue
    if not thread.isAlive():
AttributeError: 'Thread' object has no attribute 'isAlive'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 72, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 13, in <module>
    import fnmatch, glob, traceback, errno, sys, atexit, locale, imp, stat
  File "/usr/lib/python3.9/imp.py", line 31, in <module>
    warnings.warn("the imp module is deprecated in favour of importlib; "
DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses

Original exception was:
Traceback (most recent call last):
  File "/bin/apt-offline", line 28, in <module>
    main()
  File "/usr/lib/python3/dist-packages/apt_offline_core/AptOfflineCoreLib.py", line 2211, in main
    args.func(args)
  File "/usr/lib/python3/dist-packages/apt_offline_core/AptOfflineCoreLib.py", line 1360, in fetcher
    ConnectThread.stopQueue(0.2)
  File "/usr/lib/python3/dist-packages/apt_offline_core/AptOfflineLib.py", line 674, in stopQueue
    if not thread.isAlive():
AttributeError: 'Thread' object has no attribute 'isAlive'

相关内容