#debian #packages #repository #toml-config #repo #directory #generate

app pop-os/debrepobuilder

使用TOML配置构建和维护Debian仓库

1个不稳定版本

0.1.0 2018年7月9日

#422 in 压缩

52 星 & 16 关注者

自定义许可协议

145KB
3.5K SLoC

Debian仓库构建器

一个用于构建和维护Debian仓库的简单实用程序。仓库配置基于目录层次结构和TOML配置文件。以下是一些用于演示的现实世界仓库。

主要功能

  • 可以从外部源导入预构建的Debian存档
  • 可以重新封装预构建的Debian存档
  • 可以使用sbuild从各种源构建软件包
  • 支持套件内的多个组件
  • 支持在组件之间迁移软件包
  • 并行处理池中的Debian存档
  • 并行生成分发文件存档
  • 生成PackagesSourcesContentsRelease分发文件。
  • 仓库将兼容apt-file

待办事项

  • 生成Appstream + 图标存档

目录结构

基于debrep的仓库的根目录包含以下目录

  • assets/:存储在构建时需要链接的文件
    • cache/:debrep从外部源下载的文件,应在运行之间缓存
    • share/:可以在软件包之间共享的文件,并在TOML配置中指定
    • packages/:在构建之前自动链接到构建的文件
    • replace/${suite}/${component}/${arch}/package/files/:重新封装预包装存档
      • DEBIAN:用于替换的控制存档文件
      • data:用于替换的数据存档文件
  • build/${suite}/:debrep在此目录中执行所有构建
    • 在构建时,每个文件都链接/源到这里。
    • 每次成功构建后,文件将移动到仓库中。
  • debian/${suite}/:包含每个需要配置的源包的debian配置。
    • 其中的目录必须与它们所引用的源包同名。
    • 每个软件包目录包含该软件包的整个debian目录内容。
  • metapackages/${suite}:在此处放置你的metapackage.cfg等价文件。
    • 在构建时,它们将被生成并放置到仓库中。
  • record/${suite}/:跟踪已构建的源包。
  • repo/:包含每个的存档以及相关的dist和pool目录。
  • suites/${suite}.toml:为每个要构建的仓库的配置文件。

高度并行分布文件生成

由于这个工具是用Rust编写的,一个关键的关注点就是尽可能并行地工作,尽可能快地完成。它使用线程池、并行迭代器和状态机来实现这一目标。套件的每个组件、这些组件中的每个架构以及这些架构中的每个软件包都是并行处理的。每个存档的数据也是并行处理的,并且将数据处理成信息并写入各种压缩存档的最终阶段也是并行的。我们的工具应该能够快速处理大型存档。

源构建支持

只要提供必要的debian文件,就可以从源生成软件包——无论是通过使用上游存档或git仓库中的现有debian文件,还是通过多种方式提供自己的文件。

组件支持

此实用程序支持管理组件!目前有一个用于配置的default_component变量,它将指定默认存储包的位置。可以使用migrate子命令在组件之间移动包。移动包后,将重新生成dist文件。

内容生成

例如apt-file之类的工具需要仓库存储Contents存档,它将从中下载并读取以找到哪些包包含哪些文件。此工具将并行处理和生成这些文件,同时它也在处理Packages存档。

仓库结构

成功构建后,你可以看到这个结果。你可以将dists和pool目录同步到你的包服务器,以便其他机器可以访问你的仓库。

repo/
  dists/
    cosmic/
    bionic/
      Contents-amd64
      Contents-amd64.gz
      Contents-amd64.xz
      InRelease
      proposed/
        binary-amd64/
          Packages
          Packages.gz
          Packages.xz
          Release
      main/
        binary-amd64/
          Packages
          Packages.gz
          Packages.xz
          Release
        source/
          Sources
          Sources.gz
          Sources.xz
        Release
        Release.gpg
  pool/
    cosmic/
    bionic/
      proposed/
        binary-amd64/
          p/
            package/
              package...
      main/
        binary-amd64/
          p/
            package/
              package_version_amd64.buildinfo
              package_version_amd64.changes
              package_version_amd64.deb
              package-dbgsym_version_amd64.ddeb
        source/
          p/
            package/
              package_version.dsc
              package_version.tar.xz

用法

创建/更新Debian仓库

debrep build [ -f | --force ]
debrep build packages <PACKAGES>... [ -f | --force ]
debrep build pool
debrep build dist

在组件之间迁移软件包

debrep migrate package1 package2 pacakge3 --from proposed --to main

清理旧软件包

debrep clean

删除软件包

debrep remove <PACKAGES>...

依赖关系

~25MB
~475K SLoC