요구 패키지: build-essential, automake, gnupg, lintian, fakeroot, patchutils, debhelper 그리고 pbuilder.
우분투 는 데비안 리눅스 배포판에 기반하고 같은 패키지 관리 시스템을(APT) 사용 합니다. 매 우분투 개발 주기의 시작에, 우분투 내의 패키지는 데비안 불안정 브랜치 내의 패키지로 업데이트 됩니다. 그러나, 우분투 는 데비안과 똑같지 않기 때문에, 몇 가지 패키지가 우분투 에서 동작을 하려면 변경을 하는 것이 필요 합니다. 또한 우분투 개발자가 작업한 그 패키지의 버그를 고친 것이 있기도 합니다. 패키지 버전을 주목하는 것으로 버그 픽스의 여부를 결정할 수 있습니다. 만약 패키지 버전이 ubuntu를 포함하고 있다면 (예를 들어 gimp-2.2.9-3ubuntu2), 우분투 개발자가 변경을 한 것이고 데비안 패키지와는 더 이상 같지 않습니다. 우분투 저장소에는 1000 개가 넘는 이러한 변경된 패키지들이 있습니다.
매 우분투 개발 주기의 시작에, 우분투 버전의 패키지를 고려한 결정이 만들어 집니다. 물론 만약 최근의 우분투 발표 이후로 데비안 버전의 변경이 된 것이 없다면, 아무 것도 변경할 필요가 없습니다. 그러나, 만약 데비안에 새 버전의 패키지가 있다면, 다음의 두 가지 중 하나는 반드시 일어나야 합니다. 우분투의 변경 (버그 픽스, 의존성, 기타)의 모든 사유가 새로운 데비안 패키지에서도 고쳐졌다면, 우리는 직접 데비안 패키지를 취합니다. 그러나, 새 데비안 패키지가 우분투 버전을 고치게 만들었던 같은 이슈를 가지고 있다면, 그 변경 사항이 새 데비안 버전에도 적용이 되는 것이 필요 합니다. 이 결정을 병합 이라고 부릅니다.
병합 절차는 데비안과 우분투 소스 패키지 양쪽의 변경 사항을 보는 것과 무엇을 변경하였고 무슨 변경이 우분투 특정 사항인지를 결정하는 것을 필요로 합니다. 예를 살펴 보겠습니다, xcdroast 라 불리는 인기있는 CD 작성 프로그램 입니다.
시작하려면, 프로젝트를 가질 폴더를 만들고, 그 디렉토리로 이동 합니다:
mkdir ~/xcdroast cd ~/xcdroast
이제 필요로 하는 소스 패키지의 모든 것을 이 디렉토리로 내려 받습니다:
모든 버전에서 사용이 되는 xcdroast 소스 tarball:
우분투 브리지 소스 패키지 파일:
브리지 패키지가 파생한 데비안 소스 패키지 파일:
대퍼 패키지가 파생할 새 데비안 소스 패키지 파일:
이 절차들은 packages.debian.org 에서 데비안 패키지를 그리고 packages.ubuntu.com 에서 우분투 패키지를 검색하는 것으로 또한 마쳐질 수 있습니다.
병합을 할 때 (또는 어떠한 우분투 패키징에도) 설치하여 가지고 있으면 매우 유용한 패키지는 devscripts 입니다. 만약 이미 설치하지 않았다면, 진행 전에 그것을 설치 하십시오.
우분투 changelog 를 들여다 보는 것으로 우분투 패키지와 데비안 패키지 간에 무엇이 파생된 것인지를 작정한 차이점을 볼 수 있습니다. xcdroast를 예를 들어, 우분투 changelog 는 changelogs.ubuntu.com 에서 찾을 수 있습니다. 변경 사항에 적혀 있기를, Malone 에 버그 리포트된 것을 닫기 위해 .desktop 파일이 고쳐졌고 적절하게 설치되었다고 합니다.
이제 그 소스 패키지에 실제 변경 사항을 검사해 봅니다:
debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-1.1ubuntu1.dsc | \ ubuntu.debdiff | less ubuntu.debdiff
- 로 시작되는 줄은 데비안 패키지에서 제거된 것이고, + 로 시작하는 것은 Ubuntu 패키지에 추가된 것 입니다.
우리는 다음을 볼 수 있습니다:
xcdroast icon 을 설치하기 위해 cp 대신에 install이 debian/rules 에 사용되어 졌습니다. 또한, .desktop 파일을 설치하는 새 줄이 있습니다.
debian/changelog 에 변경기록 사항으로 그 변경 사항이 추가 되었습니다.
debian/dirs 에 usr/share/applications 이 위의 설치 줄이 적절하게 동작을 하도록 추가 되었습니다.
xcdroast.desktop 추가됨
이제 우리는 우분투 소스가 어떻게 변경 되었는지를 알았습니다. 이제 데비안 소스에는 무엇이 변경 되었는지를 볼 필요가 있습니다.
debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-3.dsc > debian.debdiff less debian.debdiff
우분투 것에서 본 것보다 훨씬 많은 것이 debdiff 에 있습니다. 무엇이 변경 되었지를 좀 더 잘 알 수 있는 한 가지 방법은 debdiff 안에 변경된 파일을 보는 것 입니다.
grep diff debian.debdiff
새 데비안 버전에는 debian/postinst, debian/rules, debian/changelog, debian/doc-base.manual, debian/control, 그리고 debian/menu 파일들이 변경 되었음을 알립니다.
그래서 우리는 우분투 의 변경이 만들어졌는지를 보기 위해 debian/rules 검사하는 것이 필요함을 볼 수 있습니다. 이제 그 파일을 들여다 봅시다. 소스 패키지는 dpkg-source 를 사용하여 풀 수 있습니다:
dpkg-source -x xcdroast_0.98+0alpha15-3.dsc
이것은 xcdroast_0.98+0alpha15.orig.tar.gz 파일을 압축 풀고, xcdroast-0.98+0alpha15 디렉토리를 만들고 xcdroast_0.98+0alpha15-3.diff.gz 내의 변경 사항을 적용 합니다.
이제 debian 디렉토리로 이동 합니다:
cd xcdroast-0.98+0alpha15/debian
rules
에서 우분투 에 만들었던 변경 사항이 새 데비안 버전에는 적용되지 않았음을 볼 수 있습니다. 이것은 다음을 의미 합니다:
cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps
... 는 다음처럼 변경 되어야만 합니다:
#cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps #install desktop and icon install -D -m 644 $(CURDIR)/debian/xcdroast.desktop \ $(CURDIR)/debian/xcdroast/usr/share/applications/xcdroast.desktop install -D -m 644 $(CURDIR)/debian/xcdroast.xpm \ $(CURDIR)/debian/xcdroast/usr/share/pixmaps/xcdroast.xpm
이제 dirs 에, 설치될 .desktop 파일을 위해 다음의 줄을 추가 합니다:
usr/share/applications
이제 우리는 실제 .desktop ( debian/xcdroast.desktop 로 저장되는 ) 파일이 필요 합니다. ubuntu.debdiff (또는 우분투 소스 패키지에서), 우리는 그것을 봅니다:
[Desktop Entry] Encoding=UTF-8 Name=X-CD-Roast Comment=Create a CD Exec=xcdroast Icon=xcdroast.xpm Type=Application Categories=Application;AudioVideo;
마지막으로 변경해야 하는 것은 changelog 에 있습니다. 우리가 마친 것을 (데비안과 병합) 추가해야 하는 것 뿐만 아니라, 이전 Ubuntu changelog 사항도 추가하여야 합니다. 이것을 하려면, dch -i -D dapper 을 수행하고 다음의 효과를 가지는 무엇을 넣습니다:
xcdroast (0.98+0alpha15-3ubuntu1) dapper; urgency=low
* Resynchronise with Debian.
버전 번호를 정확한 Ubuntu 로 변경하는 것을 확인 합니다. 또한 다음을 추가 합니다:
xcdroast (0.98+0alpha15-1.1ubuntu1) breezy; urgency=low * Fix and install existing .desktop file. (Closes Malone #2698) -- Captain Packager
0.98+0alpha15-1.1 과 0.98+0alpha15-2 사이의 기록 사항.
이제 새 소스 패키지를 만들고 테스트 합니다. 이것을 하는 여러가지 방법이 있지만, 다음이 한 예입니다:
cd .. debuild -S cd .. sudo pbuilder build xcdroast_0.98+0alpha15-3ubuntu1.dsc
이것은 소스 패키지를 다시 만들고, 여러분의 기본 설정 GPG key로 패키지를 사인하고, 패키지가 정확히 만들어지는 지를 확신하기 위해 pbuilder 환경에서 패키지를 만듭니다. 마지막 단계는 기존의 버그 리포트에 첨부할 수 있는 또는 #ubuntu-motu IRC 패널에 줄 수 있는 debdiff 를 만드는 것 입니다. 이것을 하려면, 데비안 불안정 소스 패키지와 새 우분투 버전 간의 차이점을 가집니다:
debdiff xcdroast_0.98+0alpha15-3.dsc xcdroast_0.98+0alpha15-3ubuntu1.dsc > \ xcdroast_0.98+0alpha15-3ubuntu1.debdiff