优化APT包管理:合并安装与升级操作的技术探索

本文探讨了在Debian/Ubuntu系统镜像构建中如何优化APT包管理操作,通过合并apt install和apt dist-upgrade命令来减少冗余工作,提升系统构建效率,并提供了具体的技术实现方案。

结合“apt install”与“apt dist-upgrade”?

我经常在镜像构建/刷新脚本中看到这样的模式:先安装一组软件包,然后更新所有软件包:

1
2
3
apt update
apt install -y pkg1 pkg2 pkg3
apt dist-upgrade -y

虽然影响不大,但这会导致冗余工作。例如读取/写入软件包数据库,可能还会运行触发器(如手册页刷新、ldconfig等)。实际上,内部软件包依赖关系解析并没有区别:“install”命令也会升级需要的软件包等。将它们合并应该是完全可行的,但我还没有找到一种简洁的方法来实现。

目前我找到的最佳方案是:

1
2
3
4
apt update
apt-cache dumpavail | dpkg --merge-avail -
(for i in pkg1 pkg2 pkg3; do echo "$i install") | dpkg --set-selections
apt-get dselect-upgrade

这种方法让我能够同时实现“install”和“upgrade”的效果,但不是“dist-upgrade”(它具有稍微不同的解析逻辑,我更喜欢使用)。此外,它还包含了本应不必要的更新dpkg数据库的开销。有人知道更好的方法吗?

更新:Julian Andres Klode指出,dist-upgrade实际上也像install一样接受软件包参数。拍额头 我甚至没有尝试过——我相信了手册页和-h输出。它完美地工作!

© 2020, Kees Cook。本作品采用知识共享署名-相同方式共享4.0国际许可协议进行许可。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计