InfoGrab DocsInfoGrab Docs

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

요약

GitLab의 Debian 패키지 레지스트리는 개발 중이며 프로덕션 환경에서 사용할 준비가 되지 않았습니다. 프로젝트의 패키지 레지스트리에 Debian 패키지를 게시합니다. 프로젝트 패키지와 그룹 패키지를 모두 지원합니다.

히스토리
Warning

GitLab의 Debian 패키지 레지스트리는 개발 중이며 프로덕션 환경에서 사용할 준비가 되지 않았습니다. 프로덕션 준비까지 남은 작업과 일정은 이 에픽에 정리되어 있습니다. Debian 패키지 지원은 실험 기능이며 알려진 보안 취약점이 있습니다.

프로젝트의 패키지 레지스트리에 Debian 패키지를 게시합니다. 그런 다음 의존성으로 사용해야 할 때마다 해당 패키지를 설치합니다.

프로젝트 패키지와 그룹 패키지를 모두 지원합니다.

Debian 패키지 관리자 클라이언트가 사용하는 개별 API 엔드포인트 문서는 Debian API 문서를 참고합니다.

사전 요구 사항:

  • GitLab 인스턴스에 dpkg-deb 바이너리가 설치되어 있어야 합니다. 이 바이너리는 보통 dpkg 패키지로 제공되며, Debian 및 파생 배포판에는 기본적으로 설치되어 있습니다.
  • 권장 사항. 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 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 위키에 설명되어 있습니다.

Debian 엔드포인트 인증#

인증 방식은 배포 API와 패키지 리포지터리가 서로 다릅니다.

Debian 배포 API 인증#

배포를 생성, 조회, 업데이트, 삭제하려면 다음 중 하나가 필요합니다.

Debian 패키지 리포지터리 인증#

패키지를 게시하거나 비공개 패키지를 설치하려면 다음 중 하나와 함께 기본 인증을 사용해야 합니다.

배포 생성#

프로젝트 수준에서 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 파일: Debian-Installer에 사용되는 경량화된 .deb 파일(필요한 경우)
  • .ddeb 파일: Ubuntu 디버그 .deb 파일(필요한 경우)
  • .tar.{gz,bz2,xz,...} 파일: 소스 파일
  • .dsc 파일: 소스 메타데이터 및 소스 파일 목록(해시 포함)
  • .buildinfo 파일: 재현 가능한 빌드에 사용(선택 사항)
  • .changes 파일: 업로드 메타데이터 및 업로드된 파일 목록(위 파일 전체)

이 파일을 업로드할 때는 dput-ng >= 1.32(Debian bullseye)를 사용할 수 있습니다. <username>과 <password>는 Debian 패키지 리포지터리에서와 같이 정의합니다.

cat < 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>
    

Debian 패키지 삭제#

사전 요구 사항:

  • Maintainer 또는 Owner 권한이 있어야 합니다.

패키지를 삭제하기 전에 관련 보안 위험을 숙지합니다.

패키지는 다음 두 가지 방법으로 삭제할 수 있습니다.

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

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기

요약

GitLab의 Debian 패키지 레지스트리는 개발 중이며 프로덕션 환경에서 사용할 준비가 되지 않았습니다. 프로젝트의 패키지 레지스트리에 Debian 패키지를 게시합니다. 프로젝트 패키지와 그룹 패키지를 모두 지원합니다.

히스토리
Warning

GitLab의 Debian 패키지 레지스트리는 개발 중이며 프로덕션 환경에서 사용할 준비가 되지 않았습니다. 프로덕션 준비까지 남은 작업과 일정은 이 에픽에 정리되어 있습니다. Debian 패키지 지원은 실험 기능이며 알려진 보안 취약점이 있습니다.

프로젝트의 패키지 레지스트리에 Debian 패키지를 게시합니다. 그런 다음 의존성으로 사용해야 할 때마다 해당 패키지를 설치합니다.

프로젝트 패키지와 그룹 패키지를 모두 지원합니다.

Debian 패키지 관리자 클라이언트가 사용하는 개별 API 엔드포인트 문서는 Debian API 문서를 참고합니다.

사전 요구 사항:

  • GitLab 인스턴스에 dpkg-deb 바이너리가 설치되어 있어야 합니다. 이 바이너리는 보통 dpkg 패키지로 제공되며, Debian 및 파생 배포판에는 기본적으로 설치되어 있습니다.
  • 권장 사항. 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 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 위키에 설명되어 있습니다.

Debian 엔드포인트 인증#

인증 방식은 배포 API와 패키지 리포지터리가 서로 다릅니다.

Debian 배포 API 인증#

배포를 생성, 조회, 업데이트, 삭제하려면 다음 중 하나가 필요합니다.

Debian 패키지 리포지터리 인증#

패키지를 게시하거나 비공개 패키지를 설치하려면 다음 중 하나와 함께 기본 인증을 사용해야 합니다.

배포 생성#

프로젝트 수준에서 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 파일: Debian-Installer에 사용되는 경량화된 .deb 파일(필요한 경우)
  • .ddeb 파일: Ubuntu 디버그 .deb 파일(필요한 경우)
  • .tar.{gz,bz2,xz,...} 파일: 소스 파일
  • .dsc 파일: 소스 메타데이터 및 소스 파일 목록(해시 포함)
  • .buildinfo 파일: 재현 가능한 빌드에 사용(선택 사항)
  • .changes 파일: 업로드 메타데이터 및 업로드된 파일 목록(위 파일 전체)

이 파일을 업로드할 때는 dput-ng >= 1.32(Debian bullseye)를 사용할 수 있습니다. <username>과 <password>는 Debian 패키지 리포지터리에서와 같이 정의합니다.

cat < 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>
    

Debian 패키지 삭제#

사전 요구 사항:

  • Maintainer 또는 Owner 권한이 있어야 합니다.

패키지를 삭제하기 전에 관련 보안 위험을 숙지합니다.

패키지는 다음 두 가지 방법으로 삭제할 수 있습니다.