Help us learn about your current experience with the documentation. Take the survey.

包注册表中的 Debian 包

  • Tier: 免费, 高级, 旗舰
  • Offering: GitLab 自托管
  • Status: 实验

GitLab 的 Debian 包注册表仍在开发中,尚未准备好用于生产环境。此 epic 详细说明了使其达到生产就绪状态所需的工作和时间表。对 Debian 包的支持是一项实验性功能,并且存在已知的安全漏洞。

在项目的包注册表中发布 Debian 包。然后在需要将它们用作依赖项时安装这些包。

支持项目级和组级包。

有关 Debian 包管理器客户端使用的特定 API 端点的文档,请参阅 Debian API 文档

先决条件:

  • GitLab 实例上必须安装 dpkg-deb 二进制文件。 此二进制文件通常由 dpkg 提供,在 Debian 及其衍生版上默认安装。
  • 对 ZStandard 压缩算法的支持需要 Debian 12 Bookworm 的 dpkg >= 1.21.18 版本或 Ubuntu 18.04 Bionic Beaver 的 dpkg >= 1.19.0.5ubuntu2 版本。

启用 Debian API

Debian 仓库支持仍在开发中。它受一个功能标志控制,该标志默认被禁用有权访问 GitLab Rails 控制台的 GitLab 管理员 可以选择启用它。

要启用它:

Feature.enable(:debian_packages)

要禁用它:

Feature.disable(:debian_packages)

启用 Debian 组 API

Debian 组仓库也受第二个功能标志控制,该标志默认被禁用。

要启用它:

Feature.enable(:debian_group_packages)

要禁用它:

Feature.disable(:debian_group_packages)

构建 Debian 包

创建 Debian 包的文档记录在 Debian Wiki 上。

Debian 端点认证

分发 API包仓库 的认证方式不同。

Debian 分发 API 认证

要创建、读取、更新或删除一个分发,您需要以下之一:

Debian 包仓库认证

要发布包或安装私有包,您需要使用基本认证,并使用以下之一:

创建分发

在项目级别,Debian 包通过 Debian 分发 发布。在组级别,Debian 包从组中的项目聚合,前提是:

  • 项目可见性设置为 public
  • 组的 Debian codename 与项目的 Debian codename 匹配。

要使用个人访问令牌创建项目级分发:

curl --fail-with-body --request POST --header "PRIVATE-TOKEN: <personal_access_token>" \
  "https://gitlab.example.com/api/v4/projects/<project_id>/debian_distributions?codename=<codename>"

使用 codename=sid 的示例响应:

{
  "id": 1,
  "codename": "sid",
  "suite": null,
  "origin": null,
  "label": null,
  "version": null,
  "description": null,
  "valid_time_duration_seconds": null,
  "components": [
    "main"
  ],
  "architectures": [
    "all",
    "amd64"
  ]
}

有关 Debian 分发 API 的更多信息:

发布包

构建完成后,会创建几个文件:

  • .deb 文件:二进制包
  • .udeb 文件:轻量级 .deb 文件,用于 Debian-Installer(如果需要)
  • .ddeb 文件:Ubuntu 调试 .deb 文件(如果需要)
  • .tar.{gz,bz2,xz,...} 文件:源文件
  • .dsc 文件:源元数据以及源文件列表(包含哈希值)
  • .buildinfo 文件:用于可重现构建(可选)
  • .changes 文件:上传元数据以及已上传文件列表(以上所有文件)

要上传这些文件,您可以使用 dput-ng >= 1.32(Debian bullseye)。 <username><password> 的定义方式与 Debian 包仓库 中相同:

cat <<EOF > dput.cf
[gitlab]
method = https
fqdn = <username>:<password>@gitlab.example.com
incoming = /api/v4/projects/<project_id>/packages/debian
EOF

dput --config=dput.cf --unchecked --no-upload-log gitlab <your_package>.changes

使用显式分发和组件上传包

当您无法访问 .changes 文件时,可以直接上传 .deb 文件,通过传递分发 codename 和目标 component 作为参数,并使用您的 凭证。 例如,要使用个人访问令牌上传到分发 sid 的组件 main

curl --fail-with-body --request PUT --user "<username>:<personal_access_token>" \
  "https://gitlab.example.com/api/v4/projects/<project_id>/packages/debian/your.deb?distribution=sid&component=main" \
  --upload-file  /path/to/your.deb

安装包

要安装包:

  1. 配置仓库:

    如果您使用的是私有项目,请将您的 凭证 添加到您的 apt 配置中:

    echo 'machine gitlab.example.com login <username> password <password>' \
      | sudo tee /etc/apt/auth.conf.d/gitlab_project.conf

    使用您的 凭证 下载您的分发密钥:

    sudo mkdir -p /usr/local/share/keyrings
    curl --fail-with-body --header "PRIVATE-TOKEN: <your_access_token>" \
         "https://gitlab.example.com/api/v4/projects/<project_id>/debian_distributions/<codename>/key.asc" \
         | \
         gpg --dearmor \
         | \
         sudo tee /usr/local/share/keyrings/<codename>-archive-keyring.gpg \
         > /dev/null

    将您的项目添加为源:

    echo 'deb [ signed-by=/usr/local/share/keyrings/<codename>-archive-keyring.gpg ] https://gitlab.example.com/api/v4/projects/<project_id>/packages/debian <codename> <component1> <component2>' \
      | sudo tee /etc/apt/sources.list.d/gitlab_project.list
    sudo apt-get update
  2. 安装包:

    sudo apt-get -y install -t <codename> <package-name>

下载源包

要下载源包:

  1. 配置仓库:

    如果您使用的是私有项目,请将您的 凭证 添加到您的 apt 配置中:

    echo 'machine gitlab.example.com login <username> password <password>' \
      | sudo tee /etc/apt/auth.conf.d/gitlab_project.conf

    使用您的 凭证 下载您的分发密钥:

    sudo mkdir -p /usr/local/share/keyrings
    curl --fail-with-body --header "PRIVATE-TOKEN: <your_access_token>" \
         "https://gitlab.example.com/api/v4/projects/<project_id>/debian_distributions/<codename>/key.asc" \
         | \
         gpg --dearmor \
         | \
         sudo tee /usr/local/share/keyrings/<codename>-archive-keyring.gpg \
         > /dev/null

    将您的项目添加为源:

    echo 'deb-src [ signed-by=/usr/local/share/keyrings/<codename>-archive-keyring.gpg ] https://gitlab.example.com/api/v4/projects/<project_id>/packages/debian <codename> <component1> <component2>' \
      | sudo tee /etc/apt/sources.list.d/gitlab_project-sources.list
    sudo apt-get update
  2. 下载源包:

    sudo apt-get source -t <codename> <package-name>