패키지 레지스트리의 Debian 패키지
GitLab v19.5Offering: GitLab Self-Managed
요약
GitLab의 Debian 패키지 레지스트리는 개발 중이며 프로덕션 환경에서 사용할 준비가 되지 않았습니다. 프로젝트의 패키지 레지스트리에 Debian 패키지를 게시합니다. 프로젝트 패키지와 그룹 패키지를 모두 지원합니다.
히스토리
- 기능 플래그 뒤에 배포되었으며 기본적으로 비활성화되어 있습니다.
GitLab의 Debian 패키지 레지스트리는 개발 중이며 프로덕션 환경에서 사용할 준비가 되지 않았습니다. 프로덕션 준비까지 남은 작업과 일정은 이 에픽에 정리되어 있습니다. Debian 패키지 지원은 실험 기능이며 알려진 보안 취약점이 있습니다.
프로젝트의 패키지 레지스트리에 Debian 패키지를 게시합니다. 그런 다음 의존성으로 사용해야 할 때마다 해당 패키지를 설치합니다.
프로젝트 패키지와 그룹 패키지를 모두 지원합니다.
Debian 패키지 관리자 클라이언트가 사용하는 개별 API 엔드포인트 문서는 Debian API 문서를 참고합니다.
사전 요구 사항:
- GitLab 인스턴스에
dpkg-deb바이너리가 설치되어 있어야 합니다. 이 바이너리는 보통dpkg패키지로 제공되며, Debian 및 파생 배포판에는 기본적으로 설치되어 있습니다. - 권장 사항.
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 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 인증#
배포를 생성, 조회, 업데이트, 삭제하려면 다음 중 하나가 필요합니다.
- 개인 액세스 토큰.
--header "PRIVATE-TOKEN: <personal_access_token>"를 사용합니다. - 배포 토큰.
--header "Deploy-Token: <deploy_token>"를 사용합니다. - CI/CD job 토큰.
--header "Job-Token: <job_token>"를 사용합니다.
Debian 패키지 리포지터리 인증#
패키지를 게시하거나 비공개 패키지를 설치하려면 다음 중 하나와 함께 기본 인증을 사용해야 합니다.
- 개인 액세스 토큰.
<username>:<personal_access_token>를 사용합니다. - 배포 토큰.
<deploy_token_name>:<deploy_token>를 사용합니다. - CI/CD job 토큰.
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파일: 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
패키지 설치#
패키지를 설치하려면 다음 단계를 수행합니다.
-
리포지터리를 구성합니다.
비공개 프로젝트를 사용한다면 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>
Debian 패키지 삭제#
사전 요구 사항:
- Maintainer 또는 Owner 권한이 있어야 합니다.
패키지를 삭제하기 전에 관련 보안 위험을 숙지합니다.
패키지는 다음 두 가지 방법으로 삭제할 수 있습니다.