正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

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

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed
  • ステータス: 実験的機能

GitLabのDebianパッケージレジストリは開発中であり、本番環境での使用には対応していません。このエピックでは、本番環境で使用できるようになるまでの残りの作業とタイムラインについて詳しく説明します。Debianパッケージのサポートは実験的であり、既知の脆弱性があります。

プロジェクトのパッケージレジストリにDebianパッケージを公開します。これにより、依存関係として使用する必要がある場合に、いつでもパッケージをインストールできるようになります。

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

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

前提要件:

  • dpkg-debバイナリは、GitLabインスタンスにインストールされている必要があります。このバイナリは通常、Debianとその派生物にデフォルトでインストールされるdpkgパッケージによって提供されます。
  • (推奨)dpkg-deb 1.22.21以降を使用してください。dpkg-deb 1.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への認証

ディストリビューションを作成、読み取り、更新、または削除するには、次のいずれかが必要です:

Debianパッケージリポジトリへの認証

パッケージの公開、またはプライベートパッケージのインストールを行うには、次のいずれかを使用してBasic認証を使用する必要があります:

ディストリビューションを作成する

プロジェクトレベルでは、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インストーラーに使用されます(必要な場合)
  • .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

パッケージをインストールする

パッケージをインストールするには:

  1. リポジトリを設定します:

    プライベートプロジェクトを使用している場合は、認証情報を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
  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 /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
  2. ソースパッケージをダウンロードします:

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