주 :
- 레드헷 8.0 이후 rpm 에 build관련 옵션이 사라졌다고 한다. (rpmbuild로 나뉘었다.)
- fedora core4에 기본으로 준비된 패키징용 디렉토리는 /usr/src/redhat 이었다 =_=
- 부요는 /usr/src/booyo에 있다.
- 빌드디렉토리에는 BUILD, RPMS, SOURCES, SPECS, SRPMS이 있어야 할듯하다.


Source RPM 을 재 패키징하려는 경우 :
그냥 막연히 src.rpm이니 rpm -Uvh xxx.src.rpm을 해줬더니 진짜 설치가 되더라. -_-;
/usr/src/redhat에서.
SOURCE에는 tarball소스와 적용된 패치, 추가로 필요한 파일들이 들어가있다.
SPECS에는 .spec로 끝나는 rpm설정(?)파일이 들어가 있다.
tar.gz같은 소스가 rpm으로 바뀌는데 가장 중요한 녀석이라고 생각한다.
----------
새로운 RPM을 만들어내려는 경우 :
SPEC파일을 직접 만들어야한다.
이에 대한 내용은 KLDP의 RPM_Guide 를 참고하면 된다.
아니면 다른 spec파일(src.rpm에 포함된)을 참고해도 좋다.

SOURCES디렉토리에는 프로그램의 소스인 tar.gz를 비롯한 파일들을 넣으면 된다.
SPECS에 xxx.spec파일을 만들어서 넣는다.

2008-05-20 추가 : src.rpm 일 경우 설치해버면 자동으로 위 경로들에 각각의 파일들이 배치된다.

-----------------------------------------------

위와 같은 준비가 되었으면 빌드하자.

rpmbuild -ba xxx.spec

spec에 작성한대로 컴파일되고 지지고 볶아서 xxx.i386.rpm과 xxx.src.rpm, xxx-debuginfo.i386.rpm등이 생성된다.

xxx.src.rpm은 SRPMS에 생성된다
xxx.rpm과 debuginfo.rpm은 RPMS/i386에 생성된다.

이제 SRPMS만 있으면 나중에 또 할 수 있다.
- 나머진 버려도 되는건가?

------------------------------------------------
기타 :
debuginfo는 뭔지 모르겠다.

spec에서 define한 릴리즈와 버전대로 파일명이 생성된다.
예를 들어
%define name xxx
%define version 1.1.0
%define release fz1-0
으로 했다면
xxx-1.1.0-fz1-0.i386.rpm
으로 생성될 것이다.
------------------------------------------------
기타 2 :
rpmbuild시 --target=옵션을 추가로 사용할 수 있다.
ex) rpmbuild -ba --target=i686 xxx.spec
이렇게하면 RPMS/i686안에 rpm파일들이 생길 것이다.
------------------------------------------------
기타 3 :
KLDP의 RPM_Guide에 따르면 rpmrc에서 빌드디렉토리도 설정한다고 하는데 안보인다.
어디에 숨었니 -_-;;
그리고 여러가지 타겟들이 적혀있다.
- 설마 정의된 타겟이라면 별다른 과정없이 타겟지정만으로 크로스컴파일도 지원하는걸까?
-> 설마가 사람잡았다. target=arm-linux라고 줬더니 arm.rpm이 생성됐다. -_-;;
--> 빌드메세지를 캡쳐해보니 이런 메세지가 나왔다. checking target system type... i686-pc-linux-gnu
---> 그러므로 엉터리였다. 당연히도 spec파일을 크로스컴파일용으로 작성해야겠지...

----> 그렇다면 i686 같은 패키지를 만들려고 해도 마찬가지라는 것??
------------------------------------------------

어지간히 정리되면 문서도 정리해야겠다.
언제 정리하나...
신고
Posted by freezn
- 알아두면 편리한 경로 변수들 %{buildroot} 빌드경로
%{_bindir} /usr/bin
%{_libdir} /usr/lib
%{_includedir} /usr/include
%{_sbindir} /usr/sbin
%{_mandir} /usr/share/man
%{_docdir} /usr/share/doc
%{_sysconfdir} /etc
%{_tmppath} /var/tmp
신고
Posted by freezn
TAG RPM, RPM SPEC
error: Installed (but unpackaged) file(s) found:
/usr/lib/libxerces-depdom.so.26.0
Installed (but unpackaged) file(s) found:
/usr/lib/libxerces-depdom.so.26.0


이런 메세지를 만나게 된다.

아마도 RPM 빌드시 spec파일에 정의된대로 chroot 과정을 거치거나 할때 이미 파일이 설치된 걸로 착각하는(?) 등등일 경우 나는 문제 같은데,

%define _unpackaged_files_terminate_build 0


spec의 맨 위쪽 define이 열거된곳에 위 라인을 삽입하여 무시할 수 있다.


---------------------------
정보 출처 :
http://linux.i-heart.co.kr/viewtopic.php?t=39 의 siteadmin인 nopain님의 팁
신고
Posted by freezn
TAG RPM, RPM SPEC
error: Package already exists: %package debuginfo


같은 메세지만 나오고 헷소리를 낸다면

홈디렉토리의 .rpmmacros 파일이나 /var/lib/rpm/배포판/macros 파일을 열어서

ex)
vi ~/.rpmmacros

%debug_package %{nil}를 추가하자.

echo "%debug_package %{nil}" >> /root/.rpmmacros


이런 식으로 간단히도 가능.

그러면 정상적인 에러메세지를 보여줄 것이다.

내 경우는 %changelog에 %install이 한번 더 등장한다는 것이었는데
changelog부터는 무조건 주석처럼 무시될거라 생각한 실수.
%install에서 뭘 고쳤다는 로그를 남기다보니 이런 실수가 있었다.

주의하자.
신고
Posted by freezn
TAG RPM, RPM SPEC
RPM들의 SPEC파일을 보면 Copyright와 License가 같은 용도로 사용되는 경우가 있다.

예를 들면 Troy Engel 씨가 패키징한 libnet 패키지에서는
Copyright: BSD 으로 되어있고

RHEL3에 포함된 레드헷에서 패키징한 diskdumputils 패키지에서는
License: GPL 으로 되어있다.

당연히(?) License 라는 택을 사용하다가 생각해보니 분명 나도 maximum rpm에서 Copyright로 읽은 기억이 나서 Copyright로 써봤더니 vi가 빨간 배경을 깔아버린다. -_-;
음 설마 syntax 오류라는걸까나 :)
(물론 빌드는 잘 됐다.)

주) maximum rpm 의 관련 부분 : http://www.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html

- maximum rpm이 작성된지도 오래되었으니 바뀌었을 수 도 있겠군.. :)

그래서 찾아보니 페도라 메일링 리스트 로그에 다음과 같은 내용이 있었다.
jove라는 소스를 -tb옵션으로 빌드하려고하니 다음과 같은 에러메세지가 발생한 다는 것이다.
"error: Legacy syntax is unsupported: copyright"


D. Hugh Redelmeier씨에 의하면
레드헷 리눅스 6.2 전에는 License라는 태그가 없었고 지원되지 않았지만 이후 변경되었다고 한다.
때문에 이전 버전과 이후 버전에서 동시에 사용하기 위한 방법을 제시하고 있는데...

%define ancient_OS 1

%if %{ancient_OS}
Copyright: foo
%else
License: foo
%endif


뭐... 귀찮겠다 -_-;
(결국 6.2면 대체 rpm/build 버전이 몇이 들어가 있는거냐... 싶어 License택만 사용하기로 했다.)

해당로그 : https://www.redhat.com/archives/fedora-test-list/2005-May/msg00963.html

Vender, Packager, License는 있지만 Copyrighter가 없는게 좀 찜찜한 구석이 있다보니 이에 대한 것도 문제가 되는가보다.

--------------------------------------------------------

재밌는건 Copyright를 License로 인식하여 지원하는 것 같다는 것이다.

Troy Engel의 libnet 패키지(Source RPM: libnet-1.1.2.1-1.rh.el.um.1.src.rpm)를 보면 Copyright: BSD 라고 되어있지만
-qi옵션으로 정보를 보면 License: BSD 로 출력된다.

결국 옛날 패키지가 아니면 License로 쓰면 된다는 것이다.
신고
Posted by freezn
TAG RPM, RPM SPEC