데비안 빌드 툴체인

Debian build toolchain
Debian 빌드 도구의 일반적인 입력: 소스 패키지(하단)와 언팩 소스 트리를 구성하는 3개의 파일debian패키지 유지 관리자에 의해 추가된 하위 디렉터리.

데비안 빌드 툴체인(Debian build toolchain)은 데비안 소스 패키지(Debian source package)를 만드는 데 사용되는 소프트웨어 유틸리티 모음.dsc) 및 Debian 이진 패키지(.debtarball 업스트림 소스에서 파일).

이러한 도구는 데비안 프로젝트와 우분투와 같은 데비안 기반 배포에도 사용된다.

개요

무료 소프트웨어의 소스 코드는 일반적으로 타르볼이라고 불리는 압축 타르 아카이브에 배포된다.데비안은 이진 지향적인 배포로, 소프트웨어가 예상하는 파일 시스템 계층 구조로 배열된 사전 컴파일된 이진 파일과 데이터 파일을 패키지에 포함한다는 것을 의미한다.따라서 데비안 빌드 툴 체인은 업스트림 빌드 시스템을 사용하여 올바른 빌드를 만드는 방법에 대한 지침이 필요하다.deb꾸러미

이 지침은 에 저장되어 있다.debian패키지 유지 관리자에 의해 패키징되는 소프트웨어의 원본 트리에 추가되는 하위 디렉토리.수정된 소스 트리에서 직접 패키지를 빌드할 수 있지만, 유지보수자가 업스트림 소스에 변경한 내용을 재배포 가능한 형태로 포함하는 소스 패키지를 생성하는 것이 표준 관행이다.

소스 패키지

일반적인 Debian 소스 패키지는 다음과 같은 세 개의 파일로 구성된다.

  • 오리지널 타르볼(원제 타르볼).orig.tar) — 업스트림 소스 tarball이 있는 경우 복사만 가능tar형식은 변경할 필요가 없으며, 또는 다시 포장된 타르볼도 필요하지 않다.후자는 타르볼 형태로 출시되지 않은 버전 제어 시스템의 스냅샷을 포함하거나 유지관리자가 데비안 프리 소프트웨어 가이드라인과 호환되지 않는 파일을 제거해야 할 경우 발생할 수 있다.
  • debian.tar패키지 유지 관리자에 의해 수행된 업스트림 소스에 대한 변경 사항을 포함하는 파일.여기에는 전체 내용이 포함된다.debian전화번호부외부에서 수정된 모든 파일이 패치 파일로 집계됨debian/patches디렉토리(구성하기 전에 자동으로 적용되는 디렉토리).
  • dsc원본 패키지를 구성하는 모든 파일의 이름 및 해당 SHA256 체크섬과 같은 메타데이터가 포함된 텍스트 파일.소스 패키지 작성자의 서명도 들어 있다.

예를 들어, 이름이 지정된 소스 패키지foo업스트림 버전 1.2.3 및 Debian 개정판 4는 다음과 같은 파일로 구성될 수 있다.

  • foo_1.2.3.orig.tar.gz
  • foo_1.2.3-4.debian.tar.gz
  • foo_1.2.3-4.dsc

소스 패키지는 다음을 사용하여 생성됨dpkg-buildpackage도구 또는 그 포장지debuild. 소스 패키지를 생성하기 위해 호출될 때dpkg-buildpackage중간 파일의 소스 트리를 청소하기 위해 유지관리자의 규칙을 호출하고, 다양한 온전성 검사를 수행하고, 마지막으로 서명한다.dsc를 사용하여 포장기의 키를 가지고 철하다.debsign효용성의

원본 패키지에서 압축을 푼 원본 트리를 생성하는 역 프로세스는dpkg-source원본 타볼을 하위 디렉토리에 추출하는 유틸리티는debian.tar그 안에 타르볼을 넣고, 있는 어떤 퀼트 패치라도 발라라.이것은 빌드 시스템이 소스 패키지에서 바이너리 패키지를 만들 때 하는 첫 번째 단계다.

이전 소스 패키지(소스 형식 1 사용)에는.diff.gz파일 대신 파일링하다debian.tar. 이것은 다음을 포함하는 통일된 diff이다.debian디렉터리 및 패치 시스템에 의해 관리되지 않는 업스트림 소스에 대한 변경 사항.

데비안 디렉토리

데비안 디렉토리에는 다음에서 사용하는 파일이 들어 있다.dpkg-buildpackage이진 및 원본 패키지를 모두 생성하십시오.단일 RPM을 사용하는 것과 달리spec파일 설명을 위해, Debian 도구는 여러 개의 파일이 있는 전체 하위 디렉토리를 사용한다.패키지를 올바르게 작성하려면 최소 3개의 파일이 필요함 -changelog,control그리고rules네 번째 파일,copyright는 데비안 정책에 의해 의무화되지만, 기술적인 것보다는 법적 요건이다.

설계에 따라 의 모든 파일debian디렉토리는 텍스트 파일이며, 대부분은 사람이 읽을 수 있고 간단한 텍스트 편집기로 편집된다.

데비앙/체인지로그

이 파일에는 패키지 생성 이후의 모든 버전에 대한 정보가 들어 있다.빌드 도구는 패키지 버전, 긴급성(Debian 그 자체와 관련이 있을 뿐) 및 이 릴리스가 수정하는 배포의 버그를 결정하는 데 사용되는 상위 항목만 처리한다.

예를 들어, 이름이 지정된 패키지의 경우foo, 예시debian/changelog입력 항목은 다음과 같이 읽을 수 있다.

foo(1.2.3-1) 불안정, 긴급성=낮음 * 새로운 업스트림 릴리스.* 02_manpage_hypens.dpatch, 고정 업스트림.* 04_edit_button_crash.dpatch 추가: 편집 버튼을 누른 후 충돌 수정. (클로스: #654321) * debian/control: foo가 libar와 충돌해야 한다.(클로스: #987654) -- John Doe <jdoe@example.com> Fri, 2007년 11월 30일 15:29:42 +0100

데비안은 두 가지 주요 유틸리티를 제공하여debian/changelog파일:

  • dch변경 로그에 새 항목을 추가하거나 기존 항목을 수정하는 데 사용된다.
  • dpkg-parsechangelog최신 항목을 구문 분석하여 데이터 추출Key: value와 비슷한 형식debian/control그것은 주로 대본에서 사용된다.

데빌리언/컨트롤

이 파일에는 소스 패키지와 이 패키지가 작성하는 모든 이진 패키지에 대한 정보가 들어 있음(예: 소스 패키지가 둘 이상일 수 있음)libbar이진 패키지의 원본 역할을 할 수 있음libbar0, 공유 라이브러리만 들어 있는 .libbar-dev라이브러리 및 헤더 파일의 정적 버전을 포함하는 .

패키지 이름, 유지관리자, 대상 아키텍처(이진 패키지의 경우), 빌드 종속성(포장이 성공적으로 구축되기 위해 설치해야 하는 패키지), 종속성(설치 시 패키지가 제대로 작동하기 위해 설치해야 하는 패키지) 등을 나열한다.

데비안/데비안

이 파일은 에 의해 호출되는 스크립트 입니다.dpkg-buildpackage수행할 작업을 지정하는 단일 인수(clean,build,install,binary기술적으로 어떤 종류의 스크립트도 될 수 있지만, 항상 makefile로 구현된다.

업스트림 빌드 시스템을 호출하는 것 외에, 대부분의 지침은debian/rules매우 반복적이고 어디서나 볼 수 있으며, 따라서 사실상 모두debian/rules파일은 이 기능을 디벨로퍼 스크립트로 포장한다.예를 들어, 사용하는 공유 라이브러리에 기반하여 종속성을 자동으로 결정하는 것은 매우 일반적인 작업이기 때문에, 이를 수행하는 데 필요한 코드를 포함하지 않고,debian/rules간단히 전화를 걸다.dh_shlibdepsdebelper 대본의 다른 예는 다음과 같다.dh_installdocs, 다음과 같은 재고 문서 파일을 설치한다.debian/copyright적절한 위치에, 또는dh_fixperms패키지의 파일이 올바른 액세스 권한(예: 실행 파일)을 갖도록 보장/usr/bin"super" 비트를 설정하지만, 수퍼유저에 의해서만 쓰기 가능하다).

다음부터debhelper스크립트는 그 자체로 반복적이며, 일부 패키지는 단순화됨debian/rules파일을 실행하는 대신 dh 또는 CDBS를 사용하여 직접 파일 작성debhelper직접 지휘하다

패치 시스템

때때로 유지관리자는 원래 소스를 수정해야 한다.과거에는 단순히 제자리에 있는 파일을 편집하고 변경사항을 포함시켜 이러한 작업을 수행하는 경우가 많았다.diff.gz이것은 새로운 업스트림 버전이 출시되었을 때 유지보수를 어렵게 만들 수 있는데, 왜냐하면 모든 변경사항은 필요할 때 검토되고 병합되어야 했기 때문이다.

새로운 소스 형식인 3.0(quilt)은 퀼트 패치 시스템을 사용하여 논리적으로 분리된 패치의 그룹으로 수정이 분할될 수 있도록 하며, 각 패치는 하나의 변경을 다루며, 업스트림에서 그대로 보낼 수 있다.이 패치들은 에 산다.debian/patches.

또한 다음과 같은 다른 패치 시스템을 사용하는 패키지도 있다.dpatch. 헤더가 포함된 비표준 유니파이드 diff 파일인 셸 스크립트를 생성하고 실행하지만, 이 스크립트는 표준과 호환된다.diff효용성의debian/rules호출하도록 파일이 수정됨dpatch apply-all바이너리 패키지를 작성하기 전에dpatch deapply-all소스 패키지를 빌드하기 전에(및 빌드 부산물을 정리하기 전에). quilt그리고 특정 다른 패치 시스템들은 특별한 헤더가 필요하지 않고 표준 디프파일을 사용한다.

소스 패키지의 변경 사항 추적: debdiff 및 interdiff

때때로 사용자는 두 개의 소스 패키지 간의 차이점을 살펴보기를 원할 수 있다. 예를 들어, 현재 저장소에 있는 버그 추적 시스템에 포함시키기 위해 제안된 패치를 생성하기 위함이다.두 패키지가 동일한 업스트림 버전을 사용하는 경우 이 작업은debdiff포장 변경이 포함된 두 소스 트리 사이의 차이를 생성하는 도구.

두 버전의 업스트림 타르볼이 다르면 이런 순진한 비교는 쓸 수 없다.대신, The는interdiff유틸리티를 사용하여 두 의 디프 파일(이 경우, 두 개 사이의 차이)을 생성할 수 있다.diff.gz파일).단점은 그 단점이다.interdiff출력은 적용하기 위해 더 많은 노력이 필요하며, 변경사항을 적용하는 것은 또한 새로운 업스트림 타르볼을 찾아서 다운로드해야 하는데, 이 타르볼은 일반적으로 다음을 사용하여 수행된다.get-orig-source을 지배하다debian/rules.[1]

온전한 정신은 인티안과 함께 체크한다.

이 도구는 데비안 정책 위반 및 잠재적 호환성 문제를 포함하여 바이너리와 소스 패키지의 일반적인 포장 오류에 대한 자동 검사를 제공한다.

일반적으로 유지관리자는 다음에 의해 지적된 모든 문제를 수정하는 것을 목표로 한다.lintian다른 분포들은 그것들에 관한 다른 정책을 가질 수 있다.예를 들어 우분투는 우분투에서 발원하는 모든 패키지를 청소하도록 요구하지만 데비안으로부터 우분투로 합병된 패키지의 경우, 기존 패키지에 추가하여 새로운 변경사항이 단순히 어떠한 경고도 도입해서는 안 된다는 그러한 요구사항은 없다.데비안과 우분투 패키지의 차이를 최소화하기 위해서다.

여기 예시가 있다.lintian출력:

격리된 빌드 환경

소스 패키지는 빌드 종속성이 충족될 경우 대상 배포 버전의 모든 설치에서 빌드할 수 있도록 설계된다.또한 빌드는 시스템에 이미 존재하는 패키지의 영향을 받을 수 있다.

패키지가 모든 시스템에 구축되는지 확인하고 외부 요인을 제외하기 위해 격리된 빌드 환경을 만드는 도구를 사용하십시오.이것들은pbuilder(Personal Builder) 및sbuild.

이러한 툴은 root에서 최소한의 작업 시스템을 유지하며, 에 나열된 필요한 빌드 종속성만 설치debian/control, 그리고 빌드가 완료되면 그것들을 제거한다.따라서 사용pbuilder패키지 유지 관리자가 일부 빌드 종속성이 에 지정되지 않았는지 감지할 수 있음debian/control.또한,pbuilder예를 들어, 개발 버전과 같은 유지관리자가 실행 중인 배포 이외의 배포에 대해 테스트 빌드하는 동시에 안정적 버전을 실행할 수 있다.

sbuild자동 빌드 데몬과의 통합을 위해 설계됨(예:buildd). 지원되는 모든 아키텍처에 대해 바이너리 패키지를 자동으로 작성하는 데비안 빌드 서버에 의해 사용된다.런치패드 서비스는 공식 배포와 개인 패키지 아카이브(PPA) 모두 우분투에 유사한 빌드 데몬을 제공한다.

참고 항목

참조

  1. ^ "Chapter 4 - Source packages". Debian Policy Manual. Retrieved 1 October 2014.

외부 링크