소스파일을 가져와서 데비안 계열인 우분투 패키지를 만드는 과정은 소개가 많이 되어 있습니다. 그러나 대부분의 패키지들은 개발자나 그의 그룹에서 각 배포판마다 제작을 해 줍니다. 또는 해당 프로그램을 사용하는 사람들이 자체적으로 제작해서 배포를 하며, 우분투에서는 PPA로 배포가 되고 있습니다.
그러나 일반 사용자들은 소스를 가져와서 처음부터 패키지를 제작하는 것은 생각보다 많은 지식이 필요하기 때문에 당장은 요원한 일입니다. 여기서는 공식적으로 제공되는 패키지의 일부를 수정하거나, 해당 우분투 릴리즈에서는 최근 패키지가 의존성 등에 의해서 지원을 하지 않을 때 개인적으로 패키지를 제작하는 경우를 다루고자 합니다.
case1
사용하고 있는 우분투 릴리즈에 대한 공식적이거나 PPA에 해당 패키지가 있지만 일부 패치를 추가해서 제작하는 과정입니다.
여기서는 Efl에 기반으로 제공되는 terminology에 대한 패키지를 제작하는 과정입니다. terminology는 우분투 공식 릴리즈에는 없지만, PPA에서 현 시스템에 사용하는 우분투 릴리즈에 대한 패키지를 제공하는 경우입니다.
- apt-get source terminology
- sudo apt-get build-dep terminology
- cd terminology-Tab ↹
- fakeroot ./debian/rules binary
또는
- dpkg-buildpackage -i -uc -us -b -j 16
패키지 제작시 대부분 필요한 패키지는 autoconf, autopoint, libtool 등이 있습니다.
제작을 위해서 먼저 설치해야 패키지들은 아래와 같습니다. 나머지는 의존성으로 설치가 됩니다.
- debhelper
- autotools-dev
- doxygen
옵션 -j xx는 core의 개수를 제한합니다. 시스템 자원을 많이 먹거나, 지나친 온도 상승이 있으면, 제한을 할 수 있습니다.
case2
현재 우분투 릴리즈는 지원 기간이 만료되어 더이상 최신 패키지가 제공되지 않지만, 지원되는 릴리즈에는 패키지가 있는 경우에 해당 패키지를 내려받아서 패키지를 제작하는 경우입니다.
먼저 해당 패키지에 대한 비공식 PPA가 있는지 확인을 합니다. PPA는 여러 곳이 있을 수 있기 때문에 시간을 갖고 자신에게 맞는 PPA를 찾아줍니다.
여기서는 awstats 패키지를 제작해 보겠습니다. 구글에서 awstats PPA를 찾아갑니다.
필요한 파일은 소스파일인 awstats_7.5+dfsg.orig.tar.gz과 패키지 제작과 관련된 파일인 awstats_7.5+dfsg-1.debian.tar.xz입니다. 아래와 같이 패키지를 만들어서 설치할 수 있습니다.
- tar zxvf awstats_7.5+dfsg.orig.tar.gz
- tar xvf awstats_7.5+dfsg-1.debian.tar.xz -C awstats-7.5
- cd awstats-7.5
- dpkg-buildpackage -i -uc -us -b
- cd ..
- sudo dpkg -i awstats_7.5+dfsg-1_all.deb
Source: awstats
Section: web
Priority: optional
Maintainer: Sergey B Kirpichev <skirpichev@gmail.com>
Build-Depends: debhelper (>= 9), ant, default-jdk, sharutils
Vcs-Git: git://anonscm.debian.org/collab-maint/awstats.git
...
아래와 같이 소스 파일을 패키지로 묶어 둡니다.
- dpkg-buildpackage -S
case3
파이어폭스 최신판, 플래시플럭인 최신판 패키지 만들기. https://launchpad.net/~ubuntu-mozilla-security/+archive/ubuntu/ppa/+packages
- sudo apt-get build-dep firefox
case4
E20이 이상하게도 nvidia 최신판에서 동작을 하지 않습니다.
- apt-get source efl
- sudo apt-get build-dep efl
- dpkg-buildpackage -i -uc -us -b
case5
간혹 패키지를 보면 amd64시스템에 i386패키지가 설치되어 있는 것들이 있습니다. 여기서는 icu57:i386을 같이 만들기 위해서 시도했습니다.
- sudo dpkg --add-architecture i386
- dpkg-buildpackage -ai386 -uc -us -b
dbg관련 패키지에 오류가 나서 cdbs.rules와 rules에서 dbg관련 부분을 삭제하고 패키지를 만들었습니다.
case6
perl 패키지는 설정과 관련된 디렉토리에서 패치를 별도로 수행합니다. 예를 들어, 아래의 세 파일을 받습니다.
- perl_5.30.3.orig.tar.xz
- perl_5.30.3.orig-regen-configure.tar.gz
- perl_5.30.3-4.debian.tar.xz
아래와 같이 구조를 만들어서 컴파일할 수 있습니다:
- tar xvf perl_5.30.3-4.debian.tar.xz
- tar xvf perl_5.30.3.orig-regen-configure.tar.gz -C perl-5.30.3
- tar xvf perl_5.30.3-4.debian.tar.xz -C perl-5.30.3
- cd perl-5.30.3
- mv metaconfig-5.30.2/ regen-configure
- dpkg-buildpackage -i -uc -us -b
parallel
커널 컴파일에서 스레드의 개수를 결정해서 패키징을 할 수 있습니다. 보통은 스레드를 정하지 않고 컴파일이 되기 때문에, 패키징의 시간이 오래 걸립니다.
- gvim debian/rules
dh $@ --with autoreconf 위 줄을 찾아서 --parallel 옵션을 끝에 추가합니다.
- sudo dpkg-buildpackage -i -uc -us -b -j24
위와 같이 옵션 -j<number threads> 에서 스레드의 개수를 적어 줍니다.
반드시 2 경우를 만족해야 제대로 동작합니다.