RPM 패키지를 만드는 법에 대하여 적어 보려고 한다. 존칭은 생략 하겠으며... RPM HOWTO 를 참고하기 바란다. 기본적으로 rpm 을 설치하였을때 그 디폴트 설정은 /usr/lib/rpmrc 에 들어가 있다. 또는 사용자 자신이 /etc/rpmrc 란 파일을 만들어 쓸수도 있다. (rpm --showrc 를 해보면 도움이 될것이다.) 패키징을 할때는 root 가 필요하다... 그 만큼 위험성도 있다. .RPM 패키지의 제작에 필요한것들... 1. 패키징할 프로그램의 소스 (바이너리만 있어도 만들수는 있다.) 2. 그에 필요한 패치들... (물론 없어도 된다.) 3. 패키지에 대한 명세 파일... spec 파일이다... .RPM 패키지를 만들어 보자... 우선 패키징을 할 프로그램의 소스를 /usr/src/redhat/SOURCES 에다가 옮겨 놓는다. 저곳이 디폴트 디렉토리이다... 원한다면 바꿀수 있다. rpmrc 에서 topdir 을 변경 하면 된다. (소스를 풀어 놓을 이유는 없다.) 또, 그 소스에 가할 패치들도 그 디렉토리에 가져다 놓는다. 패키징에 필요한 모든 파일들은 /usr/src/redhat/SORCES 에서 찾는다... (디폴트 설정에선...) 그리고 할일은 sprc 파일을 만드는것이다... 이 파일은 일반적으로 /usr/src/redhat/SPECS 란 디렉토리에 만든다. spec 파일을 만들때... spec 파일의 이름은 대충 이런 형식으로 만들면 된다. 이름.버젼번호.sprc 정도이다... spec 파일에서 쓰이는 명령들에 대해서 알아보자.. (사실 이게 모두다... 이것만 알면 패키지 제작에 어려움은 없다.) 1. 패키지에 대한 일반 정보 Summary: 패키지에 대해서 요약을 한다... Name: 패키지의 이름이다. Version: 그 프로그램의 버젼을 적는다. Release: 이것은 보통 rpm 패키지에 xxx-1.0-3.rpm 이런것을 본적이 있을것 이다. 마지막에 있는 3 이것이 릴리즈 버젼인데... 프로그램과는 상관이 없고 페키징의 버그를 고치던지 해서 3번째 다시 패키징을 했다는 것이다. Icon: glint 같은곳에 쓸 아이콘을 지정하다. gif 파일이어야 한다 Copyright: 무엇인지 모를리가 없을것이다. 그 프로그램의 저작권 등을 주의해 서 적기 바란다. GPL, BSD, MIT, Public Domain, distributable (프로그램에 대한 저작권을 확실하게 알지 못하지만 배포 가능하다는것이 확실할때 이것을..) Group: glint 를 써보았으면 간단히 알수 있을것이다. 이 패키지가 들어갈 그룹을 나타낸다. 그룹 목록은 밑에다 적겠다. 2. 소스와 패치 이름 (/usr/srcredhat/SOURCES 에 있어야 한다.) Source: 소스 파일들의 파일명을 정확히 적어야 한다. 그 소스가 여러개일 때는 Source0, Source1 이런식으로 해서 적어 나갈수 있다. (ftp.sendmail.org/pub/sendmail/sendmail-8.8.6.tgz 이런식으로 구해온 위치를 명시하는것이 좋다. 단 rpm 은 마지막의 파일명만 을 참고한다.) Patch: 패치 파일의 파일명을 정확히 적어야 한다. Patch0, Patch1 이런 식으로 여러개의 패치를 지정할수 있다. (위와 동일) 3. 패키지를 만들어 내는 부분 (컴파일등의 과정이다.) %description 이 패키지에 대한 자세한 설명을 이 아래에 적는다. `준비과정' %prep (preparation) 이 부분에서 소스를 풀고 적절한 패치를 가하게 된다. 준비과정에 쓰이는 명령으로 %setup, %patch 가 있다.. 이를 편리 루틴이라고 하는 데... 일반적으로 해야 하는 작업을 간단하게 하나의 내부명령으로 만들어 둔것이다. %setup 위에서 지정한 소스파일들을 /usr/src/redhat/BUILD 에다가 푼다... 컴파일을 하기전의 준비 작업이다. 여기에 자주 쓰이는 옵션으로 -n 과 -c 가 있다. -n 은 빌드할 디렉토리를 지정한다. rpm 에서 소스를 풀고 그것을 찾을때 만약 sendmail-8.8.6.tgz 란 소스를 이용했다 면 그 소스가 sendmail-8.8.6 이라는 디렉토리에 만들어 질꺼라고 지레짐작한다. 없다면 에러가 난다... 그래서 -n 을 쓰는데 어떤 이름의 디렉토리에 풀린다고 명시 해주는것이다. -c 는 따로 디렉토리를 만들지 않는 과격 분자들을 위하여 쓴다... -n sendmail -c 이런식으로 하게 되면 sendmail 이란 디렉토리를 우선적으로 만들고 그곳에다 소스를 푼다. (이 왜에는 RPM-HOWTO 를 보라...) %patch 패치를 하는것이다. %patch -p0 이런식으로 사용한다. patch 가 여러 개였다면 위에서 지정한데로 %patch0 -p0, %patch1 -p0 이런식으로 패치를 가할수 있다. 꼭 저러한 명령을 써야만 하는것은 아니다. 일반적으로 소스를 풀고 컴파일 하는 식으로 일일이 적어 주어도 된다. 이런식으로 말이다. cd /usr/src/redhat/BUILD tar xvzf ../SOURCES/sendmail-8.8.6.tgz patch -p0 < ../SOURCES/xxx.patch `컴파일' %build 이 부분에선 머 틀별히 정해진것은 없다. 작업이 행해지는 곳은 BUILD 밑의 소스가 풀린 디렉토리이고... 컴파일 하는식으로 명령을 적어 주면 된다... ln -sf Makefiles/Makefile.Linux Makefile ./configure --enble-domain make 이런식으로 필요한 명령들을 일일이 쳐주면 된다... 적어준데로 rpm 은 컴파일을 시도 한다... 물론 잘못 적었다면 에러를 내고 빠져 버리겠지만... `설치' %install 이 부분에도 편리 루틴 같은건 없다... 열심히 적어주는 수밖에 없다.. make install 이라던지... (사실 이러면 이놈이 어디에 쳐 박힐지 흐윽) 아니면 직접 하나 하나 파일을 적어 줄수 있다... install -s -m 755 mailstats/mailstats /usr/sbin 이런식으로 말이다... 다만 설치를 하기 이전에 이전의 설정 파일에 대해서 백업을 하는 명령을 까먹지 말기 바란다... 잘못 하면 그냥 휭 하니 사라지니 말이다... (직접 시스템에 깔면서 패키지를 만들기 때문에 주의 하여야 한다.) `파일목록' %files 설치된 파일들의 위치를 적어 주고 설정 파일이 무엇인지 또 문서 파일들은 무엇인지 이러한 것들을 정해준다. (사실 이거만 정해도 rpm 패키지는 만들어진다.) /usr/sbin/mailstats /usr/bin/praliases /usr/bin/rmail . . 이런식으로 좌아아악 적어 주는 방법도 있고 또는 /usr/lib/sendmail 요렇게 디렉토리를 지정하게 되면 그 디렉토리에 포함된 모든 파일들을 패키지에 넣는다. 설정 파일의 경우엔 %config /etc/sendmail.cf 이런식으로 지정을 해야 한다... 이렇게 지정된 설정 파일은 설치할때에 .rpmsave 가 붙어서 백업 된다. %dir /usr/lib/sendmail 이런식으로 지정한다면 단지 그 디렉토리만을 포함한다... 그 하부 디렉토리에 대해선 신경을 끈다... %doc /usr/doc/sendmail/README 이렇게 지정된 파일은 rpm 설치후에 /usr/doc/이름-버전-릴리즈 이런식의 디렉토리에 쳐 들어가게 된다. 자 이제 spec 파일을 만드는건 다 끝났다... 할일은 rpm 패키지를 만드는것이다. 딴거 없다. 만든 spec 파일이 있는데로 가서리... rpm -ba sendmail-8.8.6.spec 이런식으로 해주면 땡~ 알아서 소스를 컴파일하고 그것을 설치하고 그에 따라서 소스 패키지와 바이너리 패키지를 제작한다... 소스 패키지는 /usr/src/redhat/SRPM 밑으로 바이너리 패키지는 RPM 밑으로 들어간다... 자 끝이다... 더 자세한것은 RPM-HOWTO 를 보면 된다... 솔직히 이 문서를 볼 이유 는 없다... 한글로 번역된 RPM-HOWTO 를 구할수 있을것이다. KLUG 의 문서팀 홈페이 지에서나 또는 각 BBS의 자료실에 누군가 올려 놓았을 것이다. - 리눅스 왕 초짜 적수 - - redhands@soback.kornet.nm.kr - 아 rpm 그룹 목록을 적어야 되지... 여기다 적겠다. Applications Communications Editors Emacs Engineering Spreadsheets Databases Graphics Networking Mail Math News Publishing TeX Base Kernel Utilities Archiving Console File System Terminal Text Daemons Documentation Extensions Korean Japanese X11 XFree86 Servers Applications Graphics Networking Games Strategy Video Amusements Utilities Libraries Window Managers Libraries Networking Admin Daemons News Utilities Development Debuggers Libraries Libc Languages Fortran Tcl Building Version Control Tools Shells Games cd