- Debian 패키지 기본 사항
- 사람들이 Debian 패키지를 어떻게 받나요?
- 사람들이 Debian 패키지를 어떻게 게시하나요?
- 이 분배 비즈니스는 무엇인가요?
- Debian 리포지토리는 어떻게 생겼나요?
- Debian 저장소는 무엇을 하나요?
- GPG 키란 무엇이며 서명된 릴리즈는 무엇인가요?
- GitLab 저장소 내부
Debian 리포지토리
본 가이드는 다음을 설명합니다:
- Debian 패키지가 구성되는 기본 개요
- Debian 패키지를 관리하는 데 사용되는 패키지 관리자, 클라이언트 및 도구
- GitLab Debian 리포지토리가 어떻게 작동하는지
Debian 패키지 기본 사항
두 가지 유형의 Debian 패키지가 있습니다: 바이너리와 소스.
-
바이너리 - 일반적으로
.deb
파일로 이루어져 있으며, 실행 파일, 구성 파일 및 기타 데이터를 포함합니다. 바이너리 패키지는 이미 컴파일되어 있으므로 귀하의 OS 또는 아키텍처와 일치해야 합니다. 이러한 패키지는 보통dpkg
를 사용하여 설치됩니다. 바이너리 패키지를 설치할 때는 종속성이 이미 시스템에 존재해야 합니다. -
소스 - 일반적으로
.dsc
파일과 압축된.tar
파일로 구성됩니다. 소스 패키지는 귀하의 시스템에서 컴파일될 수 있습니다.
패키지는 apt
로 가져오고 dpkg
로 설치됩니다. apt
를 사용하면 종속성도 가져오고 설치합니다.
.deb
파일은 <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
라는 명명 규칙을 따릅니다.
패키지에 대한 메타데이터를 포함하는 control file
이 포함되어 있습니다. dpkg --info <deb_file>
를 사용하여 control file을 볼 수 있습니다.
.changes
파일은 Debian 리포지토리에 패키지 업데이트를 처리하는 방법을 지시하는 데 사용됩니다. 이 파일에는 아키텍처, 배포 및 버전을 포함하여 패키지에 대한 다양한 메타데이터가 포함되어 있습니다. 메타데이터 외에도, Files
섹션에는 sha1
, sha256
, 및 md5
의 세 가지 체크섬 목록이 포함되어 있습니다. 이러한 파일들이 구조화된 예시는 sample_1.2.3~alpha2_amd64.changes를 참조하십시오.
사람들이 Debian 패키지를 어떻게 받나요?
단일 .deb
파일을 다운로드하고 dpkg
로 설치할 수 있지만, 대부분의 사용자는 apt
를 사용하여 Debian 패키지를 소모합니다. apt
는 dpkg
를 감싸고, 종속성 관리 및 컴파일을 추가합니다.
사람들이 Debian 패키지를 어떻게 게시하나요?
작업하는 Debian 리포지토리의 유형에 따라 패키지를 게시하기 위해 curl
을 사용하는 것은 드문 일이 아닙니다. 그러나 dput-ng
는 .changes
파일을 기반으로 관련 파일을 업로드하므로 가장 좋은 도구입니다.
이 분배 비즈니스는 무엇인가요?
Debian에서는 패키지가 혼자 존재하지 않습니다. 그들은 _배포_에 속합니다. 이는 여러 의미를 가질 수 있지만, 주목할 주요 사항은 사용자가 배포를 명시해야 한다는 점입니다.
Debian 리포지토리는 어떻게 생겼나요?
- Debian 리포지토리는 여러 릴리스를 포함하고 있습니다.
- 각 릴리스에는 고유한 안정적인 코드네임이 부여됩니다. 공개 Debian 리포지토리의 경우 “bullseye” 및 “jessie”와 같은 이름이 있습니다.
- 수트의 개념도 있으며, 이는 본질적으로 “stable” 및 “edge”와 같은 배포 채널과 동의어인 코드네임의 별칭입니다. 시간이 지남에 따라 변경되어 다른 _코드네임_을 가리키게 됩니다.
- 각 릴리스에는 많은 구성요소가 있습니다. 공개 리포지토리에서는 “main”, “contrib”, 및 “non-free”가 이에 해당합니다.
- 각 릴리스에는 “amd64”, “arm64”, 또는 “i386”과 같은 많은 아키텍처가 있습니다.
- 각 릴리스에는 서명된 Release 파일이 있습니다 (아래의 GPG 서명에 대한 내용 참조).
표준 디렉토리 기반 Debian 리포지토리는 다음과 같이 구성됩니다:
dists\
|--jessie/
|--bullseye\
|Changelog
|Release
|InRelease
|Release.gpg
|--main\
|--amd64\
|--arm64\
|--contrib\
|--non-free\
pool\
|--모든 릴리스를 위한 .deb 파일이 있는 곳입니다.
공식 Debian 리포지토리의 미러를 여기에서 탐색할 수 있습니다: http://ftp.us.debian.org/debian/
공식 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 저장소 내부
파일 업로드가 발생할 때:
-
새 “incoming” 패키지 레코드가 발견되거나 생성됩니다. 모든 새로운 파일은 “incoming” 패키지에 할당됩니다. 이는 파일이 실제로 어떤 패키지와 관련이 있는지를 알 때까지 사용되는 보류 구역입니다.
-
새 “unknown” 파일이 저장됩니다. 이 파일이 기존 패키지에 속하는지 아닌지 아직 알 수 없기 때문입니다.
파일이 속하는 패키지를 알게 되면, 해당 패키지와 연결되며 더 이상 파일이 남아 있지 않으면 “incoming” 패키지는 제거됩니다. 파일의 “unknown” 상태는 올바른 파일 유형으로 업데이트됩니다.
다음으로, 파일이 .changes
형식일 경우:
-
.changes
파일이 구문 분석되며 그 안에 나열된 모든 파일이 업데이트됩니다. 업로드된 모든 비.changes
파일은 다양한 배포판 및 패키지와 올바르게 연결됩니다. -
::Packages::Debian::GenerateDistributionWorker
및 따라서::Packages::Debian::GenerateDistributionService
가 실행됩니다.-
구성 요소 파일이 생성되거나 업데이트됩니다. 방금
.changes
파일에 나열된 패키지 파일을 업데이트했으므로, 변경된 체크섬 값을 기반으로 구성 요소/아키텍처 파일을 확인합니다. -
새 릴리즈가 생성됩니다:
-
배포판에 대해 이미 존재하지 않는 경우 새로운 GPG 키가 생성됩니다.
-
릴리즈 파일이 작성되고 GPG 키로 서명된 후 저장됩니다.
-
-
이전 구성 요소 파일이 삭제됩니다.
-
다음 세 개의 다이어그램은 파일이 Debian API에 업로드된 후의 경로를 보여줍니다:
ProcessPackageFileWorker
백그라운드 작업:
GenerateDistributionWorker
백그라운드 작업:
배포
패키지를 배포하기 전에 배포를 생성해야 합니다. 프로젝트 또는 그룹 배포 API를 사용하여 배포를 생성 또는 업데이트할 때, 데이터베이스에 초기 백킹 레코드를 생성하는 것 외에도, 위의 순서도에 표시된 대로 GenerateDistributionService
가 실행됩니다.