Rpmbuild spec file

From 탱이의 잡동사니
Revision as of 16:01, 30 March 2016 by Pchero (talk | contribs) (→‎%config)
Jump to navigation Jump to search

Overview

RPM spec file 내용 정리

Preamble

%prep

이곳에서부터 명령 부분이 시작된다. 소스를 빌드할 준비를 하는데 쓰이며, 소스 패치, make 같은 셋업을 하는데 필요한 것들을 할 수 있다.

한가지 주의할 점으로 각각의 단락에는 실행할 쉘 스크립트가 와야한다. 간단히 소스를 풀고 패치할 쉘 스크립트를 만들어 %prep 아래에 적으면 된다. 주로 미리 정의된 %setup, %patch 매크로를 사용한다.

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

%setup

간단한 양식으로써 소스를 풀고 소스 디렉토리로 이동하는 동작을 하는 매크로이다. 추가 옵션은 다음과 같다.

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

%build

%install

%build 에서 컴파일된 프로그램을 설치하는 명령어를 적어주는 부분이다. 달리말하면 %build 다음에 실행되는 부분이며, 빌드 수행결과 생성된 파일들을 설치 폴더로 복사하는 역할을 수행한다. 이것 역시 실제 어떠한 매크로가 아니다.

기본적으로 설치하는데 필요한 명령을 적어준다. make install 에 쓰일 makefile 을 패치하거나 make install 을 여기서 할 수 있다. 또는 수동적인 쉘 명령으로 설치할 수도 있다. 현재 디렉토리가 소스 디렉토리의 가장 상위 디렉토리가 된다는 것에 주의해야 한다.

대부분 make install 을 수행해서 실행 파일들을 ~/rpmbuild/BUILDROOT 디렉토리 아래로 넣는 작업을 수행한다.

%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 파일로 저장된다(즉, 덮어쓰기를 하지 않는다)

%dir

패키지에 추가할 디렉토리를 지정할 때 사용한다. 예를 들어 /usr/lib 디렉토리를 지정하면 /usr/lib 디렉토리 자체가 RPM 패키지 안에 추가된다.

%changelog

See also