만약 여러분이 어느 정도의 시간 동안 리눅스 배포판을 사용하였다면, 여러분은 때때로 프로그램들에 버그가 있다는 것을 깨달았을 겁니다. 데비안과 우분투 배포판에서는, 버그는 소스 코드를 패칭하는 것으로 패키징을 통해 종종 고쳐지게 됩니다. 때로는 패키징 자체에 있는 버그가 문제를 일으키기도 합니다.
프로그램의 소스 코드를 패치하려면, 간단히 현재 우분투 소스 패키지를 내려받고 (apt-get source으로) 필요한 변경을 만듭니다. 그런 후 새 개정판을 지정하기 위하여 application>dch -i
이 문제의 해결책은 소스 코드의 변경을 각각의 debian
디렉토리로 저장할 패치들로 나누는 것 입니다. 하나의 이러한 패치 시스템은 dpatch 로 불려집니다. 패치들은 debian/patches/
디렉토리에 저장되고 특별한 형식을 가지고 있습니다.
dpatch 를 만들기 위해, 다음의 단계를 순서적으로 수행 합니다.
임시 작업 장소를 만들고 현재 소스 디렉토리의 두 복사본을 만듭니다:
mkdir tmp cd tmp cp -a ../<package>-<version> . cp -a <package>-<version> <package>-<version>.orig
<package>-<version>
디렉토리에서 변경을 합니다.
diff 를 사용하여 패치를 만들고 debian/patches
디렉토리에 그것을 가져다 놓습니다:
diff -Nru <package>-<version>.orig <package>-<version> > patch-file
dpatch patch-template 을 사용하여 dpatch 와 dpatch 들을 나열하는 00list
로 이름한 파일을 만듭니다.
ddpatch patch-template -p "01_patchname" "patch-file description" \ < patch-file > 01_patchname.dpatch echo 01_patchname.dpatch >00list
여러분은 이제 소스 패키지의 debian/patches
디렉토리에 01_patchname.dpatch
와 00list
를 위치 시킬 수 있습니다:
mkdir ../<package>-<version>/debian/patches cp 01_patchname.dpatch 00list ../<package>-<version>/debian/patches cd .. rm -rf tmp
여러분은 또한 dpatch-edit-patch 를 사용하여 이미 존재하는 패치를 편집할 수 있습니다.
모든 변경이 만들어지고, changelog 항목도 추가되고, (필요한 경우) dpatch 도 debian/control
파일에 더해진 후, 여러분은 debuild -S 를 가지고 소스 패키지를 다시 만들 수 있습니다.
우분투 저장소로 고쳐진 소스 패키지를 업로드 하려면, 업로드 권한을 가진 개발자에게 여러분의 소스 패키지를 스폰서 받아야 합니다. 자세한 것은 “업로드와 검토” 를 보십시오. 때로는, 전체 소스 패키지 (.diff.gz, .dsc, and .orig.tar.gz) 를 주는 것 보다, 현재 저장소에 있는 소스 패키지와 여러분의 고쳐진 소스 패키지의 차이만을 주는 것이 보다 쉽고 효과적일 수 있습니다. 이러한 것을 하기 위해 debdiff 이라 불리는 도구가 만들어 졌습니다. debdiff 를 사용하는 것은 diff 를 사용하는 것과 비슷하지만 패키징을 위하여 특별히 만들어진 것 입니다. 다음에 의하여 소스 패키지를 debdiff 할 수 있습니다:
debdiff <oldpackage>.dsc <newpackage>.dsc > package.debdiff
또는 다음에 의해 바이너리 패키지:
debdiff <oldpackage>.deb <newpackage>.deb > package.debdiff
Debdiff 들을 버그 리포트에 첨부하는 것은 아주 좋고 스폰서가 업로드를 하도록 준비 합니다.