APT仓库增量更新
# 背景问题 性能瓶颈
在维护私有 APT 仓库时,如果直接使用:
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
1
问题说明
这种方式每次都会 全量扫描 目录,即便只新增一个 .deb
,依旧会解析所有文件。
当包数量达到数百甚至上千时,全量构建一次需要 3~6 分钟,严重拖慢构建和发布流程。
我们希望能像 createrepo --update
一样 增量打包,只处理有变化的包。
# 方案思路 推荐方案
使用 apt-ftparchive
+ 缓存文件,依靠其内置的状态数据库,跳过无变化文件,从而减少生成时间。
再结合 pigz 多核压缩,大幅提升效率。
# 1. 安装依赖
sudo apt update
sudo apt install pigz
sudo apt install --reinstall apt-utils
# 验证工具可用性
dpkg -L apt-utils | grep apt-ftparchive
which apt-ftparchive && apt-ftparchive --version
1
2
3
4
5
6
7
2
3
4
5
6
7
性能优化
pigz
会根据 $(nproc)
自动启用多核压缩,通常能将 gzip 耗时降低到原来的 30%~50%。
# 2. 创建缓存目录
mkdir -p /data/modules/.cache
1
缓存数据库(如 cache.db
)会记录 .deb
包的状态信息。
# 3. 执行增量生成
cd /data/modules
apt-ftparchive -c=/dev/null packages . \
--db /data/modules/.cache/cache.db \
| pigz -9 -p $(nproc) > Packages.gz
1
2
3
4
5
2
3
4
5
参数说明
-c=/dev/null
:忽略全局配置,按当前目录扫描--db
:指定缓存数据库路径pigz
:使用多核压缩输出结果
注意
首次运行会全量扫描生成缓存,从第二次开始才有明显的增量加速效果。
# 对比测试
场景 | 工具组合 | 耗时(包数≈2000) |
---|---|---|
全量扫描(旧法) | dpkg-scanpackages + gzip | 3~6 分钟 |
增量更新(新法) | apt-ftparchive + pigz + 缓存 | 20~30 秒 |
- 01
- [/metrics/metadata] — 元数据查询和使用 GET09-12
- 02
- [/metrics/metadata] — 请求完整链路解读09-12
- 03
- [/metrics/metadata] — 缓存数据装载 Phoenix09-12