RPM BUILD

RPM BUILD

Rpm SPEC file 내용 정리



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#
# Example
#
Summary: Make Player Sample
Name: CDPlayer
Version: 1.0
Release: 1
Copyright: GPL
Group: Applications/Sound
Source: ftp://ftp.test.com/pub/cdplayer/cdplayer-1.0.tgz
URL: http://www.test.com/cdplayer/cdplayer.html
Distribution: WSS Linux
Vendor: White Socks Software, Inc.
Packager: Nobody

%description
It slices!  It dices!  It's a CD player app that
can't be beat.  By using the resonant frequency
of the CD itself, it is able to simulate 20X
oversampling.  This leads to sound quality that
cannot be equaled with more mundane software...

RPM Package Lable 세팅

Name

- RPM 패키지의 이름을 설정

Version

- 생성되는 패키지의 버전 정보 설정.(패키지 레이블 및 패키지 filename 에 설정된다.)

Release

Release 번호는 이 패키지가 현재 버전에서 몇번째 릴리즈 인지 설정. (패키지 레이블은 버전 정보와 릴리즈 번호가 합쳐져 나타난 정보이다.)

Copyright는 패키징된 소프트웨어의 카피라이트 정보를 나타낸다.

License

라이센스 정보를 나타낸다.

URL

해당 소프트웨어에 대한 자세한 정보를 볼 수 있는 URL 정보를 입력한다.

Group

Group은 해당 패키지가 어떤 종류의 소프트웨어 인지 나타낸다.

Source

RPM을 만들기 위해 사용할 압축파일(*.tar.gz)을 지정(Source 뒤에 숫자를 붙여 여러 소스파일을 설정할 수 있다. 여러개를 설정할 때는 숫자는 ‘0’부터 시작해야 한다.)

1
Source0:  ftp://ftp.test.com/pub/cdplayer/cdplayer-1.0.tgz

BuildRoot

RPM 파일 빌드에 사용할 루트 디렉토리를 지정한다. RPM 패키지 빌드 시 소스를 컴파일한 프로그램을 BuildRoot 필드가 지정하는 디렉토리를 루트 디렉토리(/)로 간주하여 사용한다. 이 디렉토리 구조를 묶어서 CONTENTS.cpio 파일을 만들어 RPM 파일을 만들게 된다.

Requires

생성되는 RPM의 설치 의존성을 설정한다. 기본적으로는 이름만 써도 되지만, 버전을 체크 할 수 있다. 비교 연산자로는 (>,<,=,>=,<=)를 지원한다.

1
Requires: python < 2.7, python-redis, tar, freeswitch

BuildRequires

때로는 RPM을 Build 하기 위해서도 필요한 패키지가 있을 수 있다. RPM을 Build 하기 위해 필요한 RPM 패키지를 지정한다.

1
BuildRequires: python

명령 시작

%description

패키지에 대한 상세 설명을 설정한다. Summary에서는 한줄로만 간단하게 패키지의 설명을 적을 수 있었지만 %description에서는 하나 이상의 라인을 이용해 더욱 많은 정보를 설정할 수 있다.

%prep

소스를 빌드 준비를 하는데 쓰이며, 소스 패치, make 같은 셋업을 하는데 필요한 것들을 할 수 있다. 주의할 점으로 각각의 단락에는 실행 쉘스트립트가 와야한다. (주로 미리 정의한 %setup, %patch 매크로를 사용한다.)

1
2
3
%prep
rm -rf $RPM_BUILD_DIR/cdplayer-1.0
zcat $RPM_BUILD_DIR/cdplayer-1.0.tgz | tar -xvf -

%setup

간단한 양식으로써 소스를 풀고 소스 디렉토리로 이동하는 동작을 하는 매크로 이다.

1
2
3
4
5
6
7
8
9
10
cd /usr/src/redhat/BUILD
rm -rf cd-player
gzip -dc /usr/src/redhat/SOURCES/cdplyer-1.0.tgz | tar -xvvf-
if [ $? -ne 0 ]; then
  exit $?
fi
cd cd-player
cd /usr/src/redhat/BUILD/cd-player
chown -R root.root .
chmod -R a+rX,g-w,o-w .

추가 옵션은 다음과 같다.

-n

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

%build

%install

%build에서 컴파일된 프로그램을 설치하는 명령어를 적어주는 부분이다. 달리달하면 %build 다음에 실행되는 부분이며, 빌드 수행결과 생성된 파일들을 설치 폴더로 복사하는 역할을 수행한다. 기본적으로 설치하는데 필요한 명령을 적어준다. make install에 쓰일 makefile을 패치하거나 make install을 여기서 할 수 있다. 또는 수동적인 쉘 명령으로 설치할 수도 있다. 현재 디렉토리가 소스 디렉토리의 가장 상위 디렉토리가 된다는 것에 주의해야 한다. 대부분 make install 을 수행해서 실행 파일들을 ~/rpmbuild/BUILDROOT 디렉토리 아래로 넣는 작업을 수행한다.

1
2
%install
%{__install} -p -D -m 755 etc/%{name}.init   %{buildroot}%{_initrddir}/%{name}

%files

RPM 파일에 패키징되어야하는 파일의 이름들을 지정한다. 즉, 여기서 지정한 파일들만 RPM에 묶이게 된다. 디렉토리 이름을 지정할 경우, 하위 디렉토리를 포함한 모든 파일을 묶는 의미로 사용한다. 파일 리스트에서 가장 주의할 것은 /usr/bin을 써 두었다면, RPMbuild는 /usr/bin에 있는 모든 파일을 추가하게된다.

%doc

소스 패키지 내의 문서 파일을 지정하는데 사용된다. 문서는 /usr/doc/$NAME-$VERSION-$RELEASE 에 설치된다. 매크로를 써서 명령행에서 여러 문서를 리스트하거나, 각각을 매크로로 사용해서 리스트 할 수도 있다.

%config

패키지에서 설정 파일을 지정하는데 사용된다. RPM 패키지에 추가될 뿐만 아니라 해당 패키지가 제거될 때 패키지에 포함된 다른 파일은 시스템에서 삭제가 되지만 %config 매크로로 지정된 설정파일은 [설정파일패스].rpmsave 형태로 백업된다. 이미 기존에 사용중이던 설정 파일이 있을 경우, %config 옵션을 통해 어떻게 할 것인지 지정할 수 있다. 아무런 옵션 값이 없을 경우, 기존의 파일은 .rpmsave 파일로 변경하고 새로이 패키지에 포함된 파일이 해당 위치로 가게된다.

- %config(missingok)

해당 config file이 없어도 된다. 이 옵션은 /etc/rc.d/rc2.d/S55named 와 같은 심볼릭 링크와 같은 파일의 경우에 자주 사용된다.

- %config(noreplace)

만약 설정 파일이 이미 존재하고 있을 경우(이미 기존에 사용중이던 설정파일이 있을 경우) 여기에 설정된 파일은 .rpmnew 파일로 저장된다.

- Config file update

RPM에서 생성된 설정파일을 적용하기 위해서는 RPM 패키지를 만들 때 설정 파일도 변경해야 한다.

%dir

패키지에 추가할 디렉토리를 지정할 때 사용한다. 예를 들어 /usr/lib 디렉토리를 지정하면 /usr/lib 디렉토리 자체가 RPM 패키지 안에 추가된다. 주의할 점은 디렉토리 안에 다른 디렉토리나 파일들을 추가하기 위해 %files 지시자 밑에 해당 경로를 추가로 입력해야 한다.

%attr

%attr 지시자는 다음 세 속성값들을 설정하는 지시자이다.

- 파일의 “permission” 혹은 “mode”

- 파일의 “user id”

- 파일의 “group id”

다음과 같이 사용한다.

**%attr(,,) file**

1
2
3
4
%arrt(755, root, root) foo.bar

# 만약 특별한 설정값이 필요없는 상황이라면 '-'으로 대신할 수도 있다.
%attr(755, - , root) foo.bar

%defattr

%defattr 지시자는 파일이나 다른 지시자들의 기본 속성값들을 설정하는 지시자이다. %defattr 지시자는 거의 유사한 설정값을 가진다.

- 파일의 기본 “permission” 혹은 “mode”

- 디렉토리의 기본 “permission” 혹은 “mode”

- 기본 user id

- 기본 group id

1
%defattr(<file mode>, <user>, <group>, <dir mode>)

%post

RPM 설치 이후에 뭔가 추가 작업을 해줘야 할 때 사용한다. 예를 들면 설정 파일에서 값을 변경하거나, chkconfig 같은 작업 지정이 가능하다.

1
2
%post
-p /sbin/Idconfig

%postun

RPM 삭제 명령 이후, 추가 작업을 해줘야 할 때 사용한다.

1
2
%postun
-p /sbin/Idconfig

%changelog

Statement

if

- e, exists check.

1
2
3
4
5
6
if [ -e %{_initrddir}/cb_queues_names_hack ] ; then
    /sbin/service cb_queues_names_hack stop > /dev/null 2>&1 || :
    /sbin/chkconfig cb_queues_names_hack off
    /sbin/chkconfig --del cb_queues_names_hack
    rm %{_initrddir}/cb_queues_names_hack
fi