데비안 빌드 툴체인
Debian build toolchain데비안 빌드 툴체인(Debian build toolchain)은 데비안 소스 패키지(Debian source package)를 만드는 데 사용되는 소프트웨어 유틸리티 모음.dsc
) 및 Debian 이진 패키지(.deb
tarball 업스트림 소스에서 파일).
이러한 도구는 데비안 프로젝트와 우분투와 같은 데비안 기반 배포에도 사용된다.
개요
무료 소프트웨어의 소스 코드는 일반적으로 타르볼이라고 불리는 압축 타르 아카이브에 배포된다.데비안은 이진 지향적인 배포로, 소프트웨어가 예상하는 파일 시스템 계층 구조로 배열된 사전 컴파일된 이진 파일과 데이터 파일을 패키지에 포함한다는 것을 의미한다.따라서 데비안 빌드 툴 체인은 업스트림 빌드 시스템을 사용하여 올바른 빌드를 만드는 방법에 대한 지침이 필요하다.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_shlibdeps
debelper 대본의 다른 예는 다음과 같다.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
출력:
W: foo source: source-contents-CVS-dir config/CVS N: N: Package에는 CVS 디렉터리가 포함되어 있다.일시적 CVS 데이터는 대개 패키지에 포함되지 않기 때문에 N: 사고에 의해 포함되었을 가능성이 가장 높다.N: 체크아웃 대신 CVS에서 내보내기.N:
W: libfoo-dev: debian-changlog-line 너무 긴 라인 2 N: N: 최근 Changelog 엔트리의 주어진 라인은 80개 이상의 컬럼이다.이러한 N: 변경 로그 항목은 터미널 창과 메일 메시지 N:에서 빈약하게 보일 수 있으며 읽기 귀찮을 수 있다.가능한 경우 80개 열 N: 이하의 열에서 변경 로그 항목을 줄 바꿈하십시오.N:
I: foo: arch-dep-package-has-usr-share 3399kB 77% N: N: 이 패키지는 아키텍처에 의존하는 패키지인 반면 /usr/share에는 상당한 양의 아키텍처에 독립적인 데이터 N:을 가지고 있다.N: 미러 공간과 대역폭을 낭비하는 것으로, N: 각 아키텍처마다 하나씩, 이 데이터의 여러 복사본이 생성되는 것으로,N:N:/usr/share의데이터가 아키텍처에 독립적이지않으면 N:정책 위반이며,이 경우 해당데이터 N:다른 곳으로이동해야 한다.N: N: 참고 항목:N: http://www.debian.org/doc/developers-reference/ch-best-pkging-practice N: s#s-bpp-archindepdata
격리된 빌드 환경
소스 패키지는 빌드 종속성이 충족될 경우 대상 배포 버전의 모든 설치에서 빌드할 수 있도록 설계된다.또한 빌드는 시스템에 이미 존재하는 패키지의 영향을 받을 수 있다.
패키지가 모든 시스템에 구축되는지 확인하고 외부 요인을 제외하기 위해 격리된 빌드 환경을 만드는 도구를 사용하십시오.이것들은pbuilder
(Personal Builder) 및sbuild
.
이러한 툴은 root에서 최소한의 작업 시스템을 유지하며, 에 나열된 필요한 빌드 종속성만 설치debian/control
, 그리고 빌드가 완료되면 그것들을 제거한다.따라서 사용pbuilder
패키지 유지 관리자가 일부 빌드 종속성이 에 지정되지 않았는지 감지할 수 있음debian/control
.또한,pbuilder
예를 들어, 개발 버전과 같은 유지관리자가 실행 중인 배포 이외의 배포에 대해 테스트 빌드하는 동시에 안정적 버전을 실행할 수 있다.
sbuild
자동 빌드 데몬과의 통합을 위해 설계됨(예:buildd
). 지원되는 모든 아키텍처에 대해 바이너리 패키지를 자동으로 작성하는 데비안 빌드 서버에 의해 사용된다.런치패드 서비스는 공식 배포와 개인 패키지 아카이브(PPA) 모두 우분투에 유사한 빌드 데몬을 제공한다.
참고 항목
참조
- ^ "Chapter 4 - Source packages". Debian Policy Manual. Retrieved 1 October 2014.