【问题标题】:What tools do distro maintainers (i.e. Ubuntu, Fedora) use for build/dependency management?发行版维护者(即 Ubuntu、Fedora)使用哪些工具进行构建/依赖管理?
【发布时间】:2018-09-20 17:50:00
【问题描述】:

背景

出于研究和概念验证的目的,我想分叉一个现有的 Linux 发行版,例如 Ubuntu(或者可能是 Fedora)。我有一个由vagrant 虚拟机组成的小型集群,我想对此进行试验,以了解大型(开源)项目如何处理构建和依赖关系管理。


详情

虽然拉取它们各自的源代码树、补丁等很简单;我无法理解的一件事是“他们如何构建每个包”?为了执行“夜间构建”之类的操作,据我了解,发行版维护者需要:

  • 为所有支持的平台(即x86x86_64armarmhfaarch64mips 等)设置带有工具链/编译器的构建环境。
  • 为每个包拉取源 tarballs/repos。
  • 为所有“库”包部署标头。
  • 为所有“库”包构建和部署库(即.a.so 文件)。
  • 构建和部署(可能)依赖于先前构建的库的应用程序/二进制文件。
  • 将每个库/应用打包为自己的deb/rpm/tarball。
  • 创建一个包含所有包的整体安装程序。

问题

发行版维护者如何设置这一切?发行版维护者是否使用通用/标准框架,还是他们都在内部“包装自己的解决方案”?

【问题讨论】:

  • @Fabiotk 这非常有帮助。如果您可以将该答案转换为(稍长)问题(加上指向本书来源的链接),我会将其标记为已接受。谢谢。

标签: linux ubuntu installation dependency-management build-system


【解决方案1】:

您可以在Linux From Scratch 书中学习其中的许多步骤。尽管本书关注的是 x86_64 平台,但您在那里学到的东西可以移植到其他平台。以后为ARM编译时,内核可以按照this之类的教程进行,具体的包/库,其对应的交叉编译命令,会因程序而异.看完这本书,你至少可以理解帖子详细信息中的前五项。

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

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

dd if=/dev/sda1 of=my-distro-iso.iso

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

在为您的发行版开发应用程序时,您还可以参考 Advanced Linux Programming 书籍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    相关资源
    最近更新 更多