삽질기행/잡다정보2006. 10. 18. 23:45
주 :
- 레드헷 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
삽질기행/잡다정보2006. 10. 18. 23:43
- 알아두면 편리한 경로 변수들 %{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
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
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
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