본문 바로가기

About/Computer

rpmbuild 사용법

먼저 RPM(Redhat Package Manager)이란?  레드햇 패키지 관리 프로그램이다.
예전에는 tar.gz의 고전적인 방법을 사용했지만 패키지 관리가 중요하게 부곽되면서
쉽고 간단하게 배포할 수 있는 프로그램을 만들기 위해 RPM이 많이 사용되었다.
RPM은 깔려있는 패키지에 대한 정보를 쉽게 확인할 수 있기 때문에,
예전에 설치한 패키지의 디렉토리를 잊어버려도 쉽게 찾을 수 있다.
rpm -qi 패키지를 사용하면 패키지에 대한 정보를 쉽게 확인할 수 있다.

1. RPM 패키지 제작에 앞서서

간단한 예를 들어서 RPM 패키지를 만드는 방법을 알아보도록 하겠다.

(1) RPM 패키지 제작 디렉토리

* RPM 패키지는 /usr/src/RPM 디렉토리에서 제작하는 것이 일반적이다. 이 디렉토리 밑에는 다음과 같은 디렉토리가 존재한다.

* BUILD : 소스 패키지를 풀어서 컴파일하는 디렉토리이다. 이 과정은 RPM 프로그램이 알아서 해주기 때문에 특별하게 이 안에서 해 줄 일은 없다.

* RPMS : 최종적으로 만들어지는 RPM 파일이 존재하는 디렉토리이다. 성공적으로 패키징이 끝나면 이 디렉토리 밑에 RPM 파일이 생긴다.

* SOURCES : RPM을 만드는데 사용되는 소스가 있는 디렉토리이다. 패키징을 하는 사람은 이 디렉토리에 소스파일을 복사해 두어야 한다. 소스 파일은 Makefile을 포함해서 tar.gz로 압축한 파일 하나만 두면 된다.

* SPECS : RPM을 만드는 명세 파일이 들어있는 디렉토리이다. spec 명세 파일은 패키징을 하는 사람이 직접 만들어 주어야 한다.

* SRPMS : 소스 RPM이 있는 디렉토리이다.

(2) RPM 패키징 순서

RPM 패키징을 하는 순서는 다음과 같다.

1) RPM을 만들고자 하는 소스 코드를 구한다.
2) 정확하게 빌드하기 위해서 소스에 필요한 패치를 가한다.
3) 패키지에 대한 명세 파일을 만든다.
4) 모든 것이 정확한 위치에 있는지 확인한다.
5) RPM을 사용하여 원하는 패키지를 만든다.

2. 패키징을 하기 위한 소스 모으기

RPM 패키징을 하기 위해서는 먼저 패키징에 필요한 소스를 구해야 한다. 구한 소스는 tar.gz 형태로 압축해서 /usr/src/RPM/SOURCES 디렉토리에 복사해 둔다. 본 예에서는 Qt 예제 중의 하나인 tictactoe 게임을 패키징해 보겠다.

* /usr/lib/qt/example 디렉토리를 보면 tictac 디렉토리가 있다. tictac 디렉토리의 Makefile이 현재 자신의 시스템 상태와 같은지 확인하고, tar와 gzip을 사용해서 묶도록 한다.

# tar -cvf tictac *
# gzip tictac.tar

* 그러면 tictac.tar.gz 파일이 생길 것이다. 이것을 /usr/src/RPM/SOURCES로 복사한다.

3. 명세 파일 만들기

* 명세 파일은 /usr/src/RPM/SPECS 디렉토리에서 만들어야 한다. 파일의 이름은 tictac.spec로 해 보겠다.

* 명세 파일의 예는 다음과 같다.

Summary: TicTacToc Game
Name: tictac
Version: 0.1 Release: 1
Group: Amusements/Games
Copyright: GPL
Vendor: Troll-Tech
Packager: hmask
URL:http://www.troll.no
Source:http://www.troll.no/tictac.tar.gz
Requires: qt >= 1.42
BuildRoot: /var/tmp/tictac-root

%description
Tic-Tac-Toc Game.. foobar
%prep
%setup -c
%build

make

%install
mkdir -p $RPM_BUILD_ROOT/usr/bin
install -m 755 tictac $RPM_BUILD_ROOT/usr/bin

%files
/usr/bin/tictac

각 항목의 내용은 다음과 같다.

* Summary : 패키지에 대한 요약 정보를 기술한다.
* Name : 패키지의 이름을 기술한다.
* Version : 패키지의 버전 정보를 기술한다.
* Release : 이 패키지가 몇 번째 판인지의 정보를 기술한다.
* Group : 이 패키지가 들어갈 그룹 정보를 기술한다. 그룹은 아무렇게나 지정할 수도 있지만, 가급적 RPM의 권장 양식을 따른다. 권장 양식은 다음과 같다.

Amusements/Games
Amusements/Graphics
Applications/Archiving
Applications/Communications
Applications/Databases
Applications/Editors
Applications/Emulators
Applications/Engineering
Applications/File
Applications/Internet
Applications/Multimedia
Applications/Productivity
Applications/System
Applications/Text
Developments/Debuggers
Developments/Languages
Developments/Libraries
Developments/System
Developments/Tools
Documentation
System Environment/Base
System Environment/Daemons
System Environment/Kernel
System Environment/Libraries
System Environment/Shells
User Interface/Desktops
User Interface/X
User Interface/X Hardware Support

* Copyright : 프로그램에 대한 저작권을 기술한다.
* Vendor : 패키지에 있는 프로그램을 만든 회사나 저작자를 기술한다.
* Packager : 패키징을 한 사람을 기술한다. URL 패키지에 대한 정보를 얻을 수 있는 URL을 기술한다.
* Source : 소스 파일의 이름을 기술한다. URL을 같이 적어 주어도 된다. 때론 URL 밑에 name과 version을 같이 사용하는 경우도 있다. http://www.troll.no/%{name}-%{version}.tar.gz
* Patch : 패치 파일이 있으면 파일 이름을 기술한다.
* Icon : 아이콘이 있으면 아이콘 파일이름도 기술한다.
* Requires : 이 패키지를 설치할 때 필요한 패키지를 기술한다. 이것은 나중에 의존성 검사를 하기 위해서이다.
* BuildRoot : 패키지를 구성할 기본 디렉토리를 기술한다

%description

패키지를 설명한다.

%prep

컴파일을 하기 위해 준비하는 과정이다.

%setup

Source에 있는 소스를 풀고 디렉토리로 들어가기 위한 양식이다. 사용하는 옵션은 다음과 같다.

-n

name에서는 리스트된 이름에 빌드할 디렉토리의 이름을 정하는데, 기본값은 $NAME-$VERSION이다.

-c

untar를 실행하기 전에 디렉토리를 만들고 그곳으로 이동하는 것이다

-b #

그 디렉토리로 이동하기 전에 소스#의 압축을 풀 것이다.(untar) (-c와 함께 사용할 수는 없다.) 이것은 여러 개의 소스 파일이 있을 때만 유용하다.

-a #

디렉토리로 이동한 후에 소스#의 압축을 풀 것이다.

-T

옵션은 압축을 푸는 기본 기능을 무시하고 압축 풀린 소스 파일을 얻기 위하여 -b 0 또는 -a 0 를 필요로 한다. 부차적인 소스가 있을 때 이 옵션이 필요하다.

-D

소스를 풀기 전에 디렉토리를 지우지 않는 옵션이다. 이것은 여러분 이 하나 이상의 셋업 매크로를 가지고 있을 때만 유용하다. 이것은 셋업 매크로 중 첫 번째 것을 사용한 후에 쓰인다.

%patch

Patch 항목에 지정한 패치를 실행한다.

%build

컴파일 하는 명령을 넣어준다. 보통은 configure와 make를 사용한다.

%install

인스톨에 필요한 스크립트를 기술한다. Makefile에 install 부분이 있으면 ‘make install’만 기입해도 된다. 아니면 install 스크립트를 직접 써 주어도 된다.

%files

패키지에 들어갈 파일 이름을 적어준다.

4. 패키징 시작

* 명세 파일을 만들었으면 이것을 파일로 저장한다. 예에서는 tictac.spec로 했다.

* 파일이 만들어졌으면 rpm 명령어를 사용해서 실제 RPM 파일을 만들도록 한다.

- rpm -ba tictac.spec

명령을 사용하면 tictac-rpm 파일이 만들어진다. 이것은 물로 spec 파일에 문제가 없을 때이다. -b 옵션과 같이 사용되는 파라미터들은 다음과 같다. 여기에는 유용한 -b 스위치와 함께 다른 옵션이 있다.

옵션명

설 명

p

명세 파일의 prep 단락을 실행한다는 것을 의미한다.

l

리스트 체크이다.

c

prep를 하고 컴파일한다. 이것은 여러분이 어떠한 소스를 빌드해야 할지 정확하지 않을 때 유용하다. 소스를 빌드하고 RPM을 사용하기 시작할 때까지는 여러분이 소스만 가지고 작업할지도 모르기 때문에 쓸모 없게 보인다. 그렇지만 RPM을 사용하는데 익숙해지면, 여러분은 이것을 사용할 때. 실례로써 찾을 수 있을 것이다.

i

prep 컴파일, 설치를 한다.

b

prep 컴파일, 설치와 바이너리 패키지만 만든다.

a

소스와 바이너리 모두 만든다.

5. 결과

RPMS 디렉토리에서 실제로 RPM파일이 만들어졌는지 확인하고 rpm 명령을 사용해서 실제로 설치해 보자

 

[출처] 리눅스 RPM 만들기|작성자 산거니


'About > Computer' 카테고리의 다른 글

메일 리턴메세지 모음  (0) 2016.03.29
nginx error – 413 Request Entity Too Large  (0) 2016.03.28
인터넷 프로토콜 서브넷 차트(IPv4)  (1) 2012.11.16
regex 정규식 예제  (1) 2012.04.12
정규식  (2) 2012.04.12