发行版维护者(即 Ubuntu、Fedora)使用什么工具进行 build/dependency 管理?

What tools do distro maintainers (i.e. Ubuntu, Fedora) use for build/dependency management?


背景

为了研究和 proof-of-concept,我想分叉现有的 Linux 发行版,例如 Ubuntu(或者可能是 Fedora)。我有一个小型 vagrant 虚拟机集群,我想对此进行试验,以了解大型(开源)项目处理构建和依赖项管理的能力。


详情

虽然拉取它们各自的源代码树、补丁等很简单;有一件事让我难以理解是“他们如何构建每个包”?为了做一些像“每晚构建”这样的事情,据我所知,发行版维护者需要:


问题

发行版维护者如何设置这一切?发行版维护者是否使用 common/standard 框架,或者他们都“包装自己的解决方案”in-house?

其中很多步骤你可以在Linux From Scratch book. Although this book is focused on the x86_64 platform, the things you learn there can be ported to the others. When later you build for ARM for example, you can follow tutorials like this内核中学习到,而对于具体的packages/libs,它们对应的交叉编译命令,因程序而异。学习完本书后,您至少能够理解 post 详细信息中的前五个项目。

至于打包 .deb.rpm 包,这将特定于您分叉的发行版,您必须阅读一些相关文档。如果你打算发布你的叉子,你还需要一个包的在线提供者(例如,sourceforge、github、gitlab)。因此,您必须为源代码和二进制文件设置回购协议,以便您的包管理器指向(在 apt 的情况下,它将是 /etc/apt/sources.list 指向的那些。)

最后,您需要将所有这些打包到一个 .iso 文件中进行安装。在你的 LFS 启动并在你的计算机中 运行 之后,你可以从它生成一个图像,假设它是 /dev/sda1:

中的一个分区
dd if=/dev/sda1 of=my-distro-iso.iso

然后刻录它并启动它。有了这个就足以让其他人安装你的发行版了。如果你想做更多并制作一个安装程序,也许你可以使用像 Ubiquity or Anaconda 这样的分发构建器。这不会是微不足道的,你必须阅读如何使用它们,但对于刚刚通过 LFS 测试的人来说,这将很容易;)

在为您的发行版开发应用程序时,您还可以依靠 Advanced Linux Programming 这本书。