Rpmbuild spec file
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 형태로 백업된다.
%dir
패키지에 추가할 디렉토리를 지정할 때 사용한다. 예를 들어 /usr/lib 디렉토리를 지정하면 /usr/lib 디렉토리 자체가 RPM 패키지 안에 추가된다.
%changelog
See also
- http://www.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html - Creating the Spec File
- http://sfeg.tistory.com/242 - spec 파일 만들기
- http://kthan.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4Linux-RPM-%EB%A7%8C%EB%93%9C%EB%8A%94-%EB%B0%A9%EB%B2%95%EA%B3%BC-spec%ED%8C%8C%EC%9D%BC-%EC%9E%91%EC%84%B1%EB%B2%95 - [리눅스/Linux] RPM 만드는 방법과 spec파일 작성법