解决在 Armbian 中执行 apt search 非常慢的问题
背景
原本想购入一块 Raspberry Pi,奈何价格长期虚高,就在某天从女票票手里顺走了一块 PINE H64 Model B。往一张 TF 卡里灌入 Armbian 的镜像,就可以愉快地玩耍了。
Armbian 衍生自 Debian。对于 Debian 系,当你需要管理软件包时,通常会使用 apt
来完成。而要搜索软件包,则有 apt search
和 apt-cache search
两种方式,它们的搜索范围、结果详细度、输出的可读性都不尽相同,且通常后者是更快的。
自某个时候开始,在某些灌入 Armbian 的设备上,使用 apt search
搜索软件包变得无可容忍地慢,而 apt-cache search
却仍然保持着较高的速度。Armbian 论坛上的这个 topic 讨论了这个问题。
总地来说,这个问题与 apt 对软件包列表(存放于 /var/lib/apt/lists/
中)的压缩有关,由于压缩被默认打开,且 lz4 压缩方式优先级较高,软件包列表被以 lz4 的方式压缩。在上述 topic 中,部分用户将压缩方式改为 gzip,解决了这个问题,因此 Armbian 已经合并了一个 Pull Request,提高了 gzip 的优先级,现在 Armbian 上的 apt 已经会默认使用 gzip 来压缩软件包列表。
然而,将压缩方式改为 gzip 显然不能解决所有用户的问题,上述 topic 中仍旧有不少用户反馈这个问题没有得到解决。实际经过测试,改回默认的优先级(优先使用 lz4 压缩)也不能解决问题。因此,最根本的解决方法就是,关闭压缩。
解决方法
1 | sudo echo 'Acquire::GzipIndexes "false";' | sudo tee /etc/apt/apt.conf.d/99disable-compression |
或者,你也可以只使用 apt-cache search
,它总是相当快的。
后记
上游问题?
这似乎是一个上游问题。Armbian 在 2018 年 6 月对 apt 增加了一条默认配置 Acquire::GzipIndexes "true";
,使得软件包列表的压缩被默认打开,但 apt search
慢的问题似乎要到 2020 年才出现。Debian 则默认没有配置压缩,因而掩盖了这个问题。
在 Debian GNU/Linux 10 (buster) on Windows 10 x86_64 上测试,得到了这样的结果:
1 | time apt search python |
磁盘用量
不必担心关闭压缩后磁盘用量会大幅增长,事实上不会增加太多,磁盘空间并没有时间宝贵。关闭压缩后,Armbian 初始的软件源的软件包列表也仅仅占用 100M 左右的空间,确实不能明白默认开启压缩的用意。
关于 PINE H64 Model B
可以在这里下载适用于它的 Armbian 镜像。它的 TF 卡槽只有 HS 级别,并不支持 UHS。一张 4K 读写性能不太差的卡就能满足使用。
产品页和 PINE64 wiki 都写错了 WiFi 能力,它只能使用 2.4GHz 频段,不支持 11ac。
PINE H64 Model A 实际是一款流产的产品,由于它采用的 Allwinner(R) H6 SoC 在 PCIe 上的天坑,它的 mPCIe 插槽不再有很大的意义,没有 mPCIe 插槽的 Model B 就是这么诞生的。