パッケージレジストリ内のDebianパッケージ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
- ステータス: 実験的機能
GitLabのDebianパッケージレジストリは開発中であり、本番環境での使用には対応していません。このエピックでは、本番環境で使用できるようになるまでの残りの作業とタイムラインについて詳しく説明します。Debianパッケージのサポートは実験的であり、既知の脆弱性があります。
プロジェクトのパッケージレジストリにDebianパッケージを公開します。これにより、依存関係として使用する必要がある場合に、いつでもパッケージをインストールできるようになります。
プロジェクトおよびグループパッケージがサポートされています。
Debianパッケージマネージャーのクライアントが使用する特定のAPIエンドポイントのドキュメントについては、Debian APIドキュメントを参照してください。
前提要件:
dpkg-debバイナリは、GitLabインスタンスにインストールされている必要があります。このバイナリは通常、Debianとその派生物にデフォルトでインストールされるdpkgパッケージによって提供されます。- (推奨)
dpkg-deb1.22.21以降を使用してください。dpkg-deb1.22.20以前のバージョンでは、バイナリは、書き込み不可能なディレクトリを含むアーカイブから一時ファイルを削除できません。これらのファイルはディスク容量を消費し、サービス拒否を引き起こす可能性があります。 - 圧縮アルゴリズムZStandardのサポートには、Debian 12 Bookwormの
dpkg >= 1.21.18またはUbuntu 18.04 Bionic Beaverのdpkg >= 1.19.0.5ubuntu2のバージョンが必要です。
Debian APIを有効にする
Debianリポジトリのサポートはまだ開発中です。これは、デフォルトで無効になっている機能フラグの背後にゲートで保護されています。GitLab管理者は、GitLab Railsコンソールへのアクセスにより、有効にすることを選択できます。
開発中の機能を有効にする場合の安定性とセキュリティのリスクを理解してください。
有効にするには、次の手順に従います:
Feature.enable(:debian_packages)無効にするには、次の手順に従います:
Feature.disable(:debian_packages)DebianグループAPIを有効にする
Debianグループリポジトリも、デフォルトで無効になっている2番目の機能フラグの背後にあります。
開発中の機能を有効にする場合の安定性とセキュリティのリスクを理解してください。
有効にするには、次の手順に従います:
Feature.enable(:debian_group_packages)無効にするには、次の手順に従います:
Feature.disable(:debian_group_packages)Debianパッケージをビルドする
Debianパッケージの作成については、Debian Wikiに記載されています。
Debianエンドポイントへの認証
認証方式は、ディストリビューションAPIとパッケージリポジトリで異なります。
DebianディストリビューションAPIへの認証
ディストリビューションを作成、読み取り、更新、または削除するには、次のいずれかが必要です:
- パーソナルアクセストークンを、
--header "PRIVATE-TOKEN: <personal_access_token>"で使用します。 - デプロイトークン(
--header "Deploy-Token: <deploy_token>"を使用) - CI/CDジョブトークン(
--header "Job-Token: <job_token>"を使用)
Debianパッケージリポジトリへの認証
パッケージの公開、またはプライベートパッケージのインストールを行うには、次のいずれかを使用してBasic認証を使用する必要があります:
- パーソナルアクセストークンを、
<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インストーラーに使用されます(必要な場合).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ファイルにアクセスできない場合は、codenameディストリビューションとターゲットcomponentをパラメータとして認証情報と共に渡すことで、.debを直接アップロードできます。たとえば、パーソナルアクセストークンを使用して、ディストリビューション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 /etc/apt/keyrings sudo curl --fail --silent --show-error --header "PRIVATE-TOKEN: <your_access_token>" \ --output /etc/apt/keyrings/<codename>-archive-keyring.asc \ --url "https://gitlab.example.com/api/v4/projects/<project_id>/debian_distributions/<codename>/key.asc"プロジェクトをソースとして追加します:
echo 'deb [ signed-by=/etc/apt/keyrings/<codename>-archive-keyring.asc ] 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 /etc/apt/keyrings sudo curl --fail --silent --show-error --header "PRIVATE-TOKEN: <your_access_token>" \ --output /etc/apt/keyrings/<codename>-archive-keyring.asc \ --url "https://gitlab.example.com/api/v4/projects/<project_id>/debian_distributions/<codename>/key.asc"プロジェクトをソースとして追加します:
echo 'deb-src [ signed-by=/etc/apt/keyrings/<codename>-archive-keyring.asc ] 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>