- Debian 패키지 기본 사항
- Debian 패키지는 어떻게 얻을까요?
- Debian 패키지를 어떻게 발행하나요?
- 이 분배 업무는 무엇입니까?
- Debian 리포지터리는 어떻습니까?
- Debian 리포지터리가 하는 일은 무엇입니까?
- GPG 키는 무엇이며, 서명된 릴리스는 무엇입니까?
- GitLab 리포지터리 내부
Debian 리포지터리
이 안내서에서는 다음을 설명합니다.
- Debian 패키지의 기본적인 구조 개요
- Debian 패키지를 관리하는 데 사용되는 패키지 관리자, 클라이언트 및 도구
- GitLab Debian 리포지터리의 기능
Debian 패키지 기본 사항
Debian 패키지에는 두 가지 유형이 있습니다. 바로 이진 파일과 소스입니다.
-
이진 파일 - 일반적으로
.deb
파일로, 실행 파일, 구성 파일 및 기타 데이터가 포함되어 있습니다. 이진 패키지는 이미 컴파일되어 있기 때문에 OS 또는 아키텍처와 일치해야 합니다. 이진 패키지는 일반적으로dpkg
를 사용하여 설치됩니다. 이진 패키지를 설치할 때 시스템에 의존성이 이미 존재해야 합니다. -
소스 - 일반적으로
.dsc
파일과 압축된.tar
파일로 구성됩니다. 소스 패키지는 시스템에서 컴파일될 수 있습니다.
패키지는 apt
로 가져와서 의존성도 함께 설치합니다.
.deb
파일은 <패키지이름>_<버전번호>-<데비안릴리즈번호>_<데비안아키텍처>.deb
의 네이밍 규칙을 따릅니다.
패키지에는 패키지에 대한 메타데이터를 포함하는 control 파일
이 포함되어 있습니다. dpkg --info <deb 파일>
을 사용하여 control 파일을 볼 수 있습니다.
.changes
파일은 Debian 리포지터리에게 패키지 업데이트를 처리하는 방법을 알려주는 데 사용됩니다. 이 파일에는 구조, 배포 및 버전과 관련된 다양한 메타데이터가 포함되어 있습니다. 메타데이터 외에도 Files
섹션에는 sha1
, sha256
, md5
의 세 가지 체크섬 디렉터리이 포함되어 있습니다. 이러한 파일이 구조화된 예시는 sample_1.2.3~alpha2_amd64.changes를 참조하십시오.
Debian 패키지는 어떻게 얻을까요?
개별 .deb
파일을 다운로드하고 dpkg
를 사용하여 설치할 수 있지만, 대부분의 사용자는 apt-get
을 사용하여 apt
로 Debian 패키지를 사용합니다. apt
는 의존성 관리와 컴파일을 추가하여 dpkg
를 포장합니다.
Debian 패키지를 어떻게 발행하나요?
작업하는 Debian 리포지터리 유형에 따라 패키지를 게시하는 데 curl
을 사용하는 것은 흔하지 않습니다. 그러나 dput-ng
를 사용하는 것이 가장 좋습니다. 이는 .changes
파일을 기반으로 관련 파일을 업로드합니다.
이 분배 업무는 무엇입니까?
Debian과 관련하여 패키지는 혼자서 존재하지 않습니다. 이들은 _분배(distribution)_에 속합니다. 이는 많은 의미를 가질 수 있지만, 주목해야 할 주요한 점은 사용자가 분배를 지정해야 한다는 것입니다.
Debian 리포지터리는 어떻습니까?
- Debian 리포지터리는 많은 릴리스로 이루어져 있습니다.
- 각 릴리스에는 안정적인 codename이 지정됩니다. 공개 Debian 리포지터리의 경우 “bullseye”와 “jessie”와 같은 이름입니다.
- 또한 “stable” 및 “edge”와 같은 릴리스 채널에 대한 동의어인 suites의 개념이 있습니다. 지속적으로 변경되어 다른 _codenames_를 가리킵니다.
- 각 릴리스는 “main”, “contrib”, “non-free”와 같은 여러 components를 갖고 있습니다.
- 각 릴리스는 “amd64”, “arm64”, 또는 “i386”와 같은 많은 architectures를 갖고 있습니다.
- 각 릴리스는 서명된 Release 파일을 갖고 있습니다 (아래 GPG 키와 서명된 릴리스에 대한 내용을 참조하십시오).
표준 디렉터리 기반 Debian 리포지터리는 다음과 같이 구성됩니다:
dists\
|--jessie/
|--bullseye\
|Changelog
|Release
|InRelease
|Release.gpg
|--main\
|--amd64\
|--arm64\
|--contrib\
|--non-free\
pool\
|--모든 릴리스의 .deb 파일이 있는 위치
공개 Debian 리포지터리에서 전체 디렉터리 구조, 릴리스 파일, GPG 키 및 기타 파일은 Debian Archive Kit 또는 dak이라는 일련의 스크립트에 의해 생성됩니다.
GitLab Debian 리포지터리에서는 특정 파일 디렉터리를 다루지 않습니다. 대신, 이러한 다양한 부분 간의 관계를 조직하는 데 코드와 기본 PostgreSQL 데이터베이스를 사용합니다.
Debian 리포지터리가 하는 일은 무엇입니까?
Debian 커뮤니티는 현재의 패키지 리포지터리 및 레지스트리가 존재하기 이전에 많은 패키지 리포지터리 시스템을 생성하였고, 리모트 서버로 아티팩트를 업로드하기 위해 FTP를 사용했습니다. 현재의 대부분의 패키지 리포지터리 및 레지스트리는 그냥 서버의 디렉터리일 뿐입니다. 공식 Debian 분배에 추가된 패키지는 일련의 오픈 소스 유지 관리자 그룹이 관리하는 중앙 공개 리포지터리에 존재합니다. 패키지 유지 관리자는 릴리스 파일을 생성하고 다른 유지 관리 작업을 처리하기 위해 Debian Archive Kit 또는 dak 스크립트를 사용합니다. 파일을 저장하고 제공하는 것 외에도 완전한 Debian 리포지터리는 dak이 제공하는 행동과 동일하게 수행해야 합니다. GitLab Debian 레지스트리도 이러한 행동을 목표로 하고 있습니다.
GPG 키는 무엇이며, 서명된 릴리스는 무엇입니까?
GPG 키는 안전한 데이터 전송을 위한 공개/개인 키 쌍입니다. SSH 키와 유사하게 공개 및 개인 키가 있습니다. 공개 키를 가진 사람은 데이터를 암호화할 수 있으며, 개인 키를 가진 사람은 공개 키를 사용하여 암호화한 데이터를 해독할 수 있습니다. 또한 GPG 키를 사용하여 데이터를 서명할 수 있습니다. 개인 키를 가진 사람은 데이터나 파일에 서명하고, 공개 키를 가진 사람은 해당 서명을 확인하고 해당 서명이 일치하는 개인 키를 가진 사람에게서 왔다고 믿을 수 있습니다.
우리는 Debian 패키지에 대한 릴리스 파일을 서명하기 위해 GPG를 사용합니다. 릴리스 파일은 주어진 분배 내 모든 패키지와 각 패키지의 다이제스트를 포함하는 색인입니다.
GitLab Debian 레지스트리에서는 사용자가 Debian 리포지터리에 새로운 패키지를 게시할 때마다 백그라운드 프로세스가 새 릴리스 파일을 생성합니다. 각 분배에 대해 새로운 GPG 키가 생성됩니다. 사용자가 해당 분배의 릴리스와 해당 릴리스 파일의 진정성을 확인하기 위해 서명된 버전과 공개 GPG 키를 요청할 수 있습니다.
GitLab 리포지터리 내부
파일 업로드가 발생하는 경우:
- 새로운 “수신” 패키지 레코드가 발견되거나 생성됩니다. 모든 새 파일은 “수신” 패키지에 할당됩니다. 실제로 파일이 어떤 패키지와 관련이 있는지 파악할 때까지 사용되는 보류 영역입니다.
- 새로운 “알 수 없음” 파일이 저장됩니다. 이 파일은 해당 파일이 기존 패키지에 속하는지 여부를 아직 모르기 때문에 알 수 없습니다.
파일이 어떤 패키지에 속하는지 알게 되면 해당 패키지와 연관시키고, “수신” 패키지는 더 이상 파일이 남아있지 않으면 제거됩니다. 파일의 “알 수 없음” 상태는 올바른 파일 유형으로 업데이트됩니다.
다음으로, 파일이 .changes
형식인 경우:
-
.changes
파일이 구문 분석되고 그 내부에 나열된 모든 파일이 업데이트됩니다..changes
파일에 나열된 모든 업로드되지 않은.changes
파일이 다양한 배포 및 패키지와 올바르게 연관됩니다. -
::Packages::Debian::GenerateDistributionWorker
및 따라서::Packages::Debian::GenerateDistributionService
가 실행됩니다.- 구성 파일이 생성되거나 업데이트됩니다.
.changes
파일에 나열된 패키지 파일을 방금 업데이트했기 때문에 변경된 체크섬 값에 기반하여 구성/아키텍처 파일을 확인합니다. - 새 릴리스가 생성됩니다:
- 배포를 위한 새 GPG 키가 생성됩니다(기존에 없는 경우).
- 릴리스 파일이 작성되고 GPG 키로 서명된 후 저장됩니다.
- 이전 구성 파일은 파괴됩니다.
- 구성 파일이 생성되거나 업데이트됩니다.
다음 세 다이어그램은 파일이 Debian API에 업로드된 후에 따르는 경로를 보여줍니다.
ProcessPackageFileWorker
백그라운드 작업:
GenerateDistributionWorker
백그라운드 작업:
배포
패키지를 게시하려면 먼저 해당 패키지에 배포를 생성해야 합니다. 프로젝트 또는 그룹 배포 API를 사용하여 배포를 생성하거나 업데이트할 때, 데이터베이스에서 초기 백업 레코드를 생성하는 동시에 위의 순서 다이어그램에 나와 있는 대로 GenerateDistributionService
가 실행됩니다.