发行版维护者(即 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
虚拟机集群,我想对此进行试验,以了解大型(开源)项目处理构建和依赖项管理的能力。
详情
虽然拉取它们各自的源代码树、补丁等很简单;有一件事让我难以理解是“他们如何构建每个包”?为了做一些像“每晚构建”这样的事情,据我所知,发行版维护者需要:
- 为所有支持的平台(即
x86
、x86_64
、arm
、armhf
、[=17] 使用 toolchains/compilers 设置构建环境=]、mips
、等等)。
- 为每个包拉取源代码tarballs/repos。
- 为所有“库”包部署headers。
- 为所有“库”包构建和部署库(即
.a
和 .so
文件)。
- 构建和部署(可能)依赖于 previously-built 库的 apps/binaries。
- 将每个 library/app 打包为自己的
deb
/rpm
/tarball。
- 创建包含所有软件包的整体安装程序。
问题
发行版维护者如何设置这一切?发行版维护者是否使用 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 这本书。
背景
为了研究和 proof-of-concept,我想分叉现有的 Linux 发行版,例如 Ubuntu(或者可能是 Fedora)。我有一个小型 vagrant
虚拟机集群,我想对此进行试验,以了解大型(开源)项目处理构建和依赖项管理的能力。
详情
虽然拉取它们各自的源代码树、补丁等很简单;有一件事让我难以理解是“他们如何构建每个包”?为了做一些像“每晚构建”这样的事情,据我所知,发行版维护者需要:
- 为所有支持的平台(即
x86
、x86_64
、arm
、armhf
、[=17] 使用 toolchains/compilers 设置构建环境=]、mips
、等等)。 - 为每个包拉取源代码tarballs/repos。
- 为所有“库”包部署headers。
- 为所有“库”包构建和部署库(即
.a
和.so
文件)。 - 构建和部署(可能)依赖于 previously-built 库的 apps/binaries。
- 将每个 library/app 打包为自己的
deb
/rpm
/tarball。 - 创建包含所有软件包的整体安装程序。
问题
发行版维护者如何设置这一切?发行版维护者是否使用 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 这本书。