패키지 레지스트리의 Debian 패키지

Tier: Free, Premium, Ultimate Offering: Self-Managed 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 레일즈 콘솔에 액세스할 수 있는 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 위키에 문서화되어 있습니다.

Debian 엔드포인트 인증

인증 방법은 배포 API패키지 레포지토리 간에 다릅니다.

Debian 배포 API에 인증

배포를 만들거나 읽거나 업데이트하거나 삭제하려면 다음 중 하나가 필요합니다:

Debian 패키지 레포지토리에 인증

패키지를 게시하거나 개인 패키지를 설치하려면 다음 중 하나를 사용하여 기본 인증을 사용해야 합니다:

배포 생성

프로젝트 수준에서 Debian 패키지는 Debian 배포로 게시되며, 그룹 수준에서는 해당 프로젝트의 Debian 패키지가 그룹 내 프로젝트에서 집계됩니다. 단, 다음 사항이 만족되어야 합니다:

  • 프로젝트 가시성이 공개로 설정되어 있어야 합니다.
  • 그룹 및 프로젝트의 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>위의와 같이 정의되어 있습니다:

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 --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 구성에 자격 증명을 추가하십시오: credentials

    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 구성에 추가하십시오: credentials

    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>