语境
我有一台旧的笔记本电脑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 中看到任何向后兼容性。
预见的解决方案
我在这里看到几个选项:
- 使用转换器将新文件格式转换为旧文件格式
- 在离线笔记本电脑上手动安装新版本的 apt,以便它支持新语法
- 找到一种方法来告诉
apt-offline
保存为旧文件格式 apt-offline
在我的互联网电脑上安装旧版本
问题
我想知道你对此有何看法。
- A)你认为我的假设(参见‘问题的根源’)看起来正确?
- 您认为还有其他可能的解释吗?
- B) 哪种选择最安全/最快?
答案1
解决方案 #4
协议
因此我尝试遵循协议:
- 下载旧版本
apt-offline
(v.1.8.1)这里 sudo apt remove apt-offline
sudo dpkg -i apt-offline_1.8.1_all.deb
- 重复更新过程
- 在线电脑:
apt-offline get update.sig --bundle updates.zip
- 离线:
sudo apt-offline install updates.zip
- 在线电脑:
- 安装升级
- 离线:
sudo apt-offline set upgrade.sig --upgrade
- 在线电脑:
apt-offline get upgrade.sig --bundle upgrades.zip
- 离线:
sudo apt-offline install upgrades.zip
- 离线:
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'