패키지 레지스트리의 Debian 패키지
Offering: GitLab Self-Managed
GitLab의 Debian 패키지 레지스트리는 개발 중이며 프로덕션 사용에는 준비되지 않았습니다. 프로젝트의 패키지 레지스트리에 Debian 패키지를 게시합니다. 프로젝트 및 그룹 패키지가 지원됩니다. Debian 패키지 관리자 클라이언트가 사용하는 특정 API 엔드포인트 문서는 Debian API 문서를 참조하세요.
히스토리
- 기본적으로 비활성화된 기능 플래그 뒤에 배포되었습니다.
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 Wiki에 문서화되어 있습니다.
Debian 엔드포인트 인증#
인증 방법은 배포 API와 패키지 저장소 간에 다릅니다.
Debian 배포 API 인증#
배포를 생성, 읽기, 업데이트 또는 삭제하려면 다음 중 하나가 필요합니다:
--header "PRIVATE-TOKEN: <personal_access_token>"을 사용하는 개인 액세스 토큰--header "Deploy-Token: <deploy_token>"을 사용하는 배포 토큰--header "Job-Token: <job_token>"을 사용하는 CI/CD 작업 토큰
Debian 패키지 저장소 인증#
패키지를 게시하거나 비공개 패키지를 설치하려면 다음 중 하나와 함께 기본 인증을 사용해야 합니다:
<username>:<personal_access_token>을 사용하는 개인 액세스 토큰<deploy_token_name>:<deploy_token>을 사용하는 배포 토큰gitlab-ci-token:<job_token>을 사용하는 CI/CD 작업 토큰
배포 생성#
프로젝트 수준에서 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파일: 가벼운 .deb 파일, Debian-Installer에 사용 (필요한 경우).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
명시적 배포 및 구성 요소로 패키지 업로드#
히스토리
- 명시적 배포 및 구성 요소로 업로드 기능이 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
패키지 설치#
패키지를 설치하려면:
-
저장소를 구성합니다:
비공개 프로젝트를 사용하는 경우 자격 증명을 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 역할이 있어야 합니다.
패키지를 삭제하기 전에 관련 보안 위험을 이해하고 있는지 확인하세요.
패키지를 삭제하려면 다음 중 하나를 사용합니다:
