아래의 내용은 spec 파일 샘플 , RPM 만들때 필요한 사항들만을 적었다. 내용은 자세하지 않으므로 자세한 사항은 위의 참고 사이트를 통해 확인하기바란다.
rpm spec 파일 |
Name: test %description test program %prep %build %install %clean %pre %post %preun %postun %files #dir |
중요 : %files 에는 rpm 패키지에 포함될 파일 리스트를 적어준다. 이곳에 명기하지 않으면 포함되지 않는다. 여기에 명시한 파일은 $RPM_BUILD_ROOT 디렉토리 밑에서 찾는다. %install 단락에서 $RPM_BUILD_ROOT 로 파일을 옮기는 작업을 해야한다. 또한 $RPM_BUILD_ROOT 에 있는 파일(%files 에 명시한)은 rpm 패키지로 구성되고 rpm 설치시 '/'를 기점으로 파일이 설치된다. |
꼭 알아야되는 매크로 |
$RPM_BUILD_DIR : BUILD 디렉터리를 뜻한다. |
$RPM_SOURCE_DIR : SOURCE 디렉터리 경로를 뜻한다. |
$RPM_BUILD_ROOT |
rpm 디렉토리 설명 |
Centos 6 의 경우 /root/rpmbuild 디렉터리에 존재 디렉터리 구성 BUILD : 소스 패키지를 풀어서 컴파일하는 디렉토리이다. RPM 만들때는 특별히 해줄일이 없다. |
SPEC 문서 헤더 설명 |
ummary: 패키지에 대한 간단한 설명을 한 줄로 쓴다. Name: 여러분이 사용하고자 하는 rpm 파일 이름이 와야 한다. Version: 여러분이 사용할 파일 이름의 버전 번호가 와야 한다. Release: 여기에는 같은 버전의 패키지 번호가 온다. (예를 들어 우리가 패 키지를 만들었는데 잘못된 것을 알고 다시 만들었을 때 다음 패키지의 release 번호는 2가 된다.) Icon: 여기에는 다른 (레드햇의 ``glint;;와 같은) 시각적인 설치 도구 에서 사용할 아이콘 파일의 이름이 온다. 아이콘은 반드시 gif 포맷이어야 하고 SOURCES 디렉토리에 위치하여야 한다. Source: 이 줄에서는 원래 소스 파일의 위치를 가리킨다. 이것은 여러분이 소스 파일을 다시 얻거나 새로운 버전을 체크하는데 쓰인다. 주의: 이줄에서 파일 이름은 여러분의 시스템에 있는 파일 이름과 일치해야 한다. (예를 들어, 소스 파일을 다운로드 받아서 이름을 바꾸지 말아야 한다.) 여러분은 하나 이상의 소스 파일을 다음과 같은 라인을 사용하여 지정할 수 있다. Source0: blah-0.tar.gz Source1: blah-1.tar.gz Source2: fooblah.tar.gz 이 파일들은 SOURCE 디렉토리에 위치한다(이 디렉토리 구조는 뒤의 "소스 디렉토리 트리" 단락에서 다룰 것이다.) Patch: 패치를 찾을 수 있는 위치이다. 다시 다운로드 받을 때 필요하다. 주의: 여기서의 파일 이름은 "여러분의" 패치를 만들 때 사용하는 것과 일치하여야 한다. 여러 소스에서 여러 패치 파일을 가지고 있을 때 주목할 필요가 있다. Patch0: blah-0.patch Patch1: blah-1.patch Patch2: fooblah.patch 이 파일들은 SOURCES 디렉토리 안에 있어야 한다. Copyright: 이 줄에서는 패키지의 저작권을 알려준다. 여러분은 APL, BSD, MIT, 공개(public domain), distributable, 또는 상용 (commercial)과 같이 쓸 수 있다. BuildRoot: 이 줄에서는 새로운 패키지를 설치하고 만드는 ``root'' 디렉토리를 지정하도록 한다. 여러분은 설치하기 전에 여러분의 패키지를 테스트하는데 이를 사용할 수 있다. Group: 이 줄은 (레드햇 ``glint''와 같은) 시각적 설치 프로그램에서 특정한 프로그램이 트리 구조에서 어디에 위치하는지 알려준다. 그룹 트리는 현재 이러한 구조를 가지고 있다. Applications Communications Editors Emacs Engineering Spreadsheets Databases Graphics Networking Math News Publishing TeX Base Kernel Utilities Archiving Console File System Terminal Text Daemons Documentation 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 %description 이것은 헤더 아이템이 아니지만, 여기서 설명해 두어야 한다. 당신의 패키지, 서브 패키지마다 설명을 하나씩 필요로 할 것이다. 이것은 패키지에 대해서 참고적인 설명을 쓰는데 사용하는 것이고 여러 줄에 걸쳐 쓸 수 있다: |
%prep 준비 과정으로 소스를 빌드할 준비를 하는데 쓰인다. 여기서 소스 패치, make 실행과 같은 셋업과정을 한다. 쉘 스크립트를 직접 쓰면 된다. 예) |
%build 이 부분은 실제로 압축 풀린 소스를 가지고 컴파일하거나 패치하거나 디렉토리를 만들거나 이동시키는 어떠한 작업이던 포함시키면 된다. 쉘 스크립트를 이용하여 수행한 명령을 써 넣으면 된다. 예) |
%install 이 부분에서는 대부분 make install 등 실제 컴파일된 실행파일을 /sbin 등에 옮기는 작업 명령을 써넣으면 된다. 이곳도 쉘 스크립트를 이용한다. 예) |
%pre %preun %postun |
spec 명세파일의 스크립트가 실행되는 경로 |
%pre %pre |
스크립트 실행 순서 |
RPM 패키징을 만드는 rpmbuild 를 수행하였을때 RPM 설치를 하는 rpm -i 를 수행하였을때 RPM을 제거하는 rpm -e 를 수행하였을때 결국 RPM 패키징에는 %prep,%build,%install, %clean 부분의 스크립트가 순서적으로 사용되는 것으로 패키지를 만들때 수행되는 코드 들이다. |
RPM 패키징시 만들어지는 파일명 규칙 |
패키징은 수행하면 rpm 파일이 RPMS 디렉토리에 생성된다. 예를 들어 Name: test 이렇게 써있다면 rpm의 이름은 test-0.5-1.x86_64.rpm 이다. 이때 x86_64 는 빌드 아키텍쳐로 rpm --showrc 를 통해 build arch 값을 따른다. |
RPM Build 시 RPM 생성되는 위치 |
RPMS 디렉토리에 아키텍쳐 이름의 디렉토리 밑에 생긴다. 예를 들어 아키텍쳐가 x86_64 라면 RPMS/x86_64/*.rpm 이렇게 생긴다. |
RPM 패키지를 시킬 파일을 놓는 위치 |
SOURCES 디렉토리에 놓으면 된다. spec (명세) 파일에서 source 헤더에 넣은 값들을 이곳에서 찾는다. 예를 들어 라면 SOURCE 디렉토리에 test1 과 test2 가 존재하여야한다. source 헤더 같이 여러 인자가 들어가야 하는 경우 헤더이름 뒤에 숫자를 붙여준다. |
RPM rebuild |
~.src.rpm 파일을 가지고 있다면 rpmbuild --rebulid ~.src.rpm 명령으로 rpm 패키지를 만들수 있다. rpm 패키징 작업했던 명세파일과 source 파일이 ~.src.rpm 에 포함되었기 때문에 간단하게 rpm 패키징 작업을 할 수 있다. |
'학습자료(~2017) > 리눅스' 카테고리의 다른 글
[Linux] 파일 관련 API 리스트 (0) | 2013.05.31 |
---|---|
[Linux] 유닉스 소켓 (unix socket) 을 이용한 파일 디스크립트 보내기/받기(file descriptor send/recv) - 다른 프로세스로 디스크립트 전송/공유 (0) | 2013.05.24 |
[LINUX] Library constructor and destructor functions (라이브러리 생성자, 소멸자 기능 _init , _fini) (0) | 2013.03.21 |
[Linux] path resolution , 경로 분석법 (0) | 2013.03.06 |
[Linux] 메모리 캐쉬 삭제하기 (0) | 2013.02.28 |