パッケージレジストリ内の Debian パッケージ

caution
GitLab 用 Debian パッケージレジストリは開発中で、まだ実運用には対応していません。このエピックでは、GitLab を実運用できるようにするために残っている作業とスケジュールについて詳しく説明します。

Debian パッケージをプロジェクトのパッケージレジストリに公開します。そして、依存関係として使う必要があるときはいつでもパッケージをインストールしてください。

プロジェクトパッケージとグループパッケージがサポートされています。

Debian パッケージマネージャクライアントが使用する特定の API エンドポイントの文書については、Debian API 文書を参照してください。

前提条件:

  • GitLabインスタンスにdpkg-deb バイナリがインストールされている必要があります。このバイナリは通常、Debianとその派生物にデフォルトでインストールされているdpkg パッケージ
  • 圧縮アルゴリズム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 グループリポジトリには、デフォルトでは無効になっている 2 つ目の機能フラグがあります。

有効にするには:

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 --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 ファイル: Debian インストーラで使用される軽量化された .deb ファイル (必要な場合)
  • .ddeb ファイルです:Ubuntu デバッグ .deb ファイル (必要な場合)
  • .tar.{gz,bz2,xz,...} ファイルソースファイル
  • .dsc ファイルです:ソース・メタデータ、ソース・ファイルのリスト(ハッシュ付き)
  • .buildinfo ファイル:再現可能なビルドに使用(オプション)
  • .changes ファイルをアップロードします:メタデータのアップロード、アップロードされたファイルのリスト(上記すべて)

これらのファイルをアップロードするには、dput-ng >= 1.32 (Debian bullseye) を使用できます。<username><password>上記のように定義されています:

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

ディストリビューションとコンポーネントを明示したパッケージのアップロード

GitLab 15.9で導入された、明示的ディストリビューションとコンポーネントによるアップロード。

.changes ファイルにアクセスできない場合は、ディストリビューションcodename とターゲットcomponent認証情報をパラメータとして渡すことで、.deb を直接アップロードできます。例えば、個人アクセストークンを使ってディストリビューションsid のコンポーネントmain にアップロードする場合です:

curl --request PUT --user "<username>:<personal_access_token>" \
  --get --data "distribution=sid" --data "component=main" \
  "https://gitlab.example.com/api/v4/projects/<project_id>/packages/debian/" \
  --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 --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 --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>