다음 이전 차례

13. 부록 B - 자신만의 RPM 만들기

RPM 패키지 포맷은 이미 Ed Bailey가 쓴 Maximum RPM에 문서화가 잘 되어 있다. Maximum RPM은 RPM WWW 사이트에서 다운로드 받을 수 있으며 유명 서점에 가면 구할 수 있다. 다음에 설명하는 내용은 마음이 시간에 쫓기는 사람들을 위한 힌트에 지나지 않는다.

RPM 패키지는 spec 화일로부터 만들어진다. spec 화일(킥스타트 설정 화일과 비슷한 양식을 가진다)은 패키지를 만들기 위해 수행되는 절차들로 이루어져 있다. - 소스와 다양한 플랫폼 지정과 컴파일전에 패치를 적용하는 등등.. 일단 만들어지고 설치되어진 바이너리 RPM은 여러분이 관계된다고 지정하는 화일과 디렉토리로부터 만들어 진다. RPM은 어떤 화일과 디렉토리가 주어진 패키지와 관련이 있는지 알 수 없으므로 RPM에게 알려줘야 한다는 점을 알아 두기 바란다.

다음은 Squid WWW 캐쉬 서버 RPM의 SPEC 화일의 내용이다:

Summary: Squid Web Cache server
Name: squid
Version: 1.NOVM.22
Release: 1
Copyright: GPL/Harvest
Group: Networking/Daemons
Source: squid-1.NOVM.22-src.tar.gz
Patch: retry-1.NOVM.20.patch
%description
This is just a first attempt to package up the Squid Web Cache for easy
installation on our RedHat Linux servers

%prep
%setup
%build
configure --prefix=/usr/squid
perl -spi -e 's!#( -DALLOW_HOSTNAME_UNDERSCORES)!$1!' src/Makefile
make

%install
make install

%files
/usr/squid

다음은 RPM을 만드는 방법이다:

% mkdir -p SOURCES BUILD SRPMS RPMS/i386
% cp ~/squid-1.NOVM.22-src.tar.gz SOURCES
% cp ~/retry-1.NOVM.20.patch SOURCES
% rpm -ba squid-1.NOVM.22+retry-1.spec

이렇게 하면 자동적으로 BUILD 디렉토리 밑에 소스 코드를 풀고 패치(많은 옵션이 있으니 자세한 내용은 Maximum RPM을 참고하기 바란다)를 적용하게 될 하위디렉토리를 생성할 것이다. 이제 RPM은 자동으로 configure, make를 실행하여 설정을 하고 패키지를 만들고 make install을 이용해 설치를 하고 /usr/squid 디렉토리 아래에 패키지를 설치할 것이다. 맨 마지막 과정은 Squid 소프트웨어의 바이너리 RPM을 구성할 것이다.

패키지를 풀고 만들고 설치하는 과정에서 마음대로 쉘 명령을 넣을 수 있다. 예를 들어 Squid의 컴파일시의 변수중 하나인 perl을 호출할 수 있다.

최종적으로 바이너리 RPM은 RPMS 디렉토리의 플랫폼 지정 서브디렉토리인 i386 디렉토리 아래에 놓이게 된다. 이 경우 squid-1.NOVM.22-1.i386.rpm 화일이 생성된다. 화일이름은 spec 화일의 Name, Version, Release 정보와 더해서 하드웨어 플랫폼 이 경우에는 i386을 연결시켜 만들어지는 점을 알아두기 바란다. 자신만의 RPM을 만들 경우 무식하게 길고 고통스러운 이름을 갖지 않게 하려면 이점을 명심해 두기 바란다.

전체 소프트웨어 패키지를 리빌드할 필요없이 RPM을 화일을 만들 수 있다는 점 또한 알아둘 만하다. 예를 들면,

Summary: Linux 2.0.36 kernel + filehandle patch + serial console patch
Name: linux
Version: 2.0.36+filehandle+serial_console
Release: 1
Copyright: GPL
Group: Base/Kernel
Source: linux-2.0.36+filehandle+serial_console.tar.gz
%description
This is just a first attempt to package up the Linux kernel with patches
for installation on our RedHat Linux servers

%prep
echo

%setup
echo

%build
echo

%install
echo

%post
/sbin/lilo

%files
/lib/modules/2.0.36
/boot/vmlinuz

이 경우 간단히 /boot/vmlinuz 화일과 /lib/modules/2.0.35 디렉토리의 내용과 설치할 머신에 패키지를 설치한 후에 /sbin/lilo 명령을 실행하는 RPM 화일을 만들었다. 만일 더 깔끔한 spec 화일을 작성하는 방법이 있다면 알려주기 바란다.


다음 이전 차례