包注册表中的 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 端点认证
Debian 分发 API 认证
要创建、读取、更新或删除一个分发,您需要以下之一:
- 个人访问令牌,
使用
--header "PRIVATE-TOKEN: <personal_access_token>" - 部署令牌
使用
--header "Deploy-Token: <deploy_token>" - CI/CD 作业令牌
使用
--header "Job-Token: <job_token>"
Debian 包仓库认证
要发布包或安装私有包,您需要使用基本认证,并使用以下之一:
- 个人访问令牌,
使用
<username>:<personal_access_token> - 部署令牌
使用
<deploy_token_name>:<deploy_token> - CI/CD 作业令牌
使用
gitlab-ci-token:<job_token>
创建分发
在项目级别,Debian 包通过 Debian 分发 发布。在组级别,Debian 包从组中的项目聚合,前提是:
- 项目可见性设置为
public。 - 组的 Debian
codename与项目的 Debiancodename匹配。
要使用个人访问令牌创建项目级分发:
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安装包
要安装包:
-
配置仓库:
如果您使用的是私有项目,请将您的 凭证 添加到您的 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 -
安装包:
sudo apt-get -y install -t <codename> <package-name>
下载源包
要下载源包:
-
配置仓库:
如果您使用的是私有项目,请将您的 凭证 添加到您的 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 -
下载源包:
sudo apt-get source -t <codename> <package-name>