다시 안녕하세요.. :)
흠.. 여기에 일일히 적기엔..그리고 글쓰신 분의 말씀이 너무 길어서..
다 읽기 힘들군요..헤~~ 그리고.. 너무.. 죄송할 필요는 없느데...^^;;;;
어찌됐든... 천천히 다시 적도록 하지요...:)
(허접이지만... ^_^)
우선...님께서 보셔야할 파일이 한가지 있습니다..
/usr/lib/rpm/macro를 좀 보시면 원하시는 해결책을 어느정도
아실 수 있을 겁니다.
우선.. 간단한 예제를 보여드리도록 하지요..(강좌 적는 기분으로..흠흠.) :)
예 중간 중간에 ## 표시로 주석을 달도록 하겠습니다.
## 먼저 가정할거..
# examples라는 파일을 /usr에 설치를 해서
# bin파일등과 library가 /usr/bin/examples에 설치가 되고
# libexamples.so.0 과 libexamples.so가 /usr/lib에 설치가 되고
# share파일들과 man은 /usr/share/에 들어간다고 하지요..
#
# 대부분의 program이 설치되는 것은 prefix를 주면
# lib나 다른것들이 모두 prefix밑에 위치합니다..아시라 생각하고..
# 파일 목록이 저것들이라..가정합니다... :)
-------------------------------------------------
#define section
%define name examples
%define version 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1
## 위의 define내용을 굳이 적을 필요가 없습니다만...
## version과 같이 너무 길어서 번번히 적기 귀찮으시면
## define section에 적어도 됩니다.
Name: %{name}
Version:%{version}
Source : %{name}-%{version}.tar.bz2
BuildRoot:/tmp/var/%{name}-root
##헤더 나머지 생략
%prep
%setup
%build
#
# 여기서 부터 보도록 하지요.. 솔직히 rpm의 일련의 행동은
# 스크립트 파일과 같은 형식으로 동작합니다.
# 단지 그 위치가 어디이지. 어떤 파일들을 가지고 놀 것인지에 대한
# 내용이 좀 틀려질 뿐이죠..
# 자.. 위에서 보면..%prep는 단지 준비 동작이고. :) %setup은
# 프로그램을 compile하기 위한 준비 동작입니다. 즉, configure나
# make를 하기전에 자동으로 patch를 하거나 간단한 동작을 시행하는
# 것이지요..
# setup에서는 SOURCES에 있는 파일을 /usr/src/redhat
# (간단히 redhat이라 할께요)/BUILD에 풀게 됩니다.
# 즉, redhat/BUILD/examples-0.0.0.0.0....으로 풀지요..
# 만약 tar xcfv filename해서 파일명-version으로 나오지 않는다면
# setup에 -n 옵션을 줘야합니다.
# 어쨌든 SOURCES에 있는 tar볼을 BUILD에 풀도록 합니다.
#
# 그런 후 build section에는 일반적으로 rpm이 아닌 다른 program을
# source 컴파일할대와 동일합니다. 즉 prefix를 어디로 설정할 것인지..
# 어떻게 설치할 것인지 등등을.. 결정하게 됩니다.
#일반적으로 다음과 같이 합니다.
./configure --prefix=%{_prefix}
#
# _prefix는 /usr를 가르키는 것으로 /usr/lib/rpm/macros에 설정되어
# 있습니다.
#
#
# 여기까지 하면 rpm은 redhat/BUILD/example-0.0.0.0.0.0.0.0.0..밑에
# 들어가서 configure --prefix=/usr 를 실행합니다.
# 자 이제 configure를 끝냈으니 make 를 해야겠죠??
make
#
# 물론 build섹셕에서는 redhat/BUILD/example-0.0.0.0.0.0.0.0.0에서
# 모든 행동을 취하며 현재 directory 가 redhat/BUILD/example-0.0.0.0.0.0.0 입니다.
# 그래서 그 상위 즉, redhat/BUILD/로 가고 싶으면 단순히 cd ..이라고만
# 해도 됩니다. :) --(지금 후회하는중..왜 버전을 저리 길게 했을까..흑흑)
#
# 이제 make까지 했으니까...install을 해야겠지요..
# 여기서 님께서 골치 아픈내용인것 같은데..
# 잠시 위로 올라가서 우리가 rpm header에 어떤것을 설정했나 보세요.
# 그렇습니다. 바로 BuildRoot입니다. 이녀석을 설정했지요??
# 저것을 설정하게 된다면 rpm은 파일 목록을 찾을때 저 directory에
# 있는 것만 찾게 됩니다. :)
%install
#
# compile를 끝냈으니 install을 해야지요?
# install이 섹션까지는 현재 directory가 redhat/BUILD/example-0.0.0.0....
#이라는거..기억하시고 있지요?
#
make DESTDIR=$RPM_BUILD_ROOT install
#
# 그렇습니다..바로 저녀석..RPM_BUILD_ROOT..rpm은 저 directory를
# 가상 / 로 잡고 설치를 하게 됩니다. 물론..다른 프로그램들(예로 KDE)
# 도 ./configure --prefix=/opt ; make ; make DESTDIR=/usr/local install
# 이라 한다면 설치할때 /usr/local/opt/bin 뭐 이렇게 설치를 합니다
#
# 기본적으로 설치시 이용하고자 하는 file들은 다 저 $RPM_BUILD_ROOT에
# 있어야 합니다.
#
%clean
rm -rf $RPM_BUILD_ROOT
#
#
# 이 녀석을 보시면 RPM_BUILD_ROOT를 삭제하라고 했습니다..
# 음..RPM_BUILD_ROOT라...어떤 녀석이냐면 앞에서 우리가 설정했던
# 바로 그 부분입니다. /var/tmp/examples-0.0.0.0.0.0.0.0.0. 이 녀석이지요..
음..뭐 나머진 대충 아시는 것 같고...간단히 다시 rpm이 돌아다니는
경로를 추적하자면..
우선 spec파일이 있는 곳에서 출발을 합니다.
그런 후 SOURCES에 spec파일에서 지정한 file, patch등이 있는지
확인을합니다. 물론 없으면. 종료하지요..
우선 있다고 하면 rpm은 source파일을 먼저 redhat/BUILD에 풀게 됩니다
만약 파일이 풀릴때 examples-0.0 이라는 디렉토리를 가지고 푼다면
rpm 은 redhat/BUILD/examples-0.0 이라는 디렉토리로 이동합니다.
그럼 현재 rpm이 인식하는 directory는 어딜까요? 물론 redhat/BUILD/examples-0.0입니다 :)
그런 후 ./configure --prefix=/usr 를 실행하고 make 까지 합니다.
그럼 BUILD에 있는 directory는 어떤 녀석이냐면 source를 단순히 compile하는 부분이지
직접 우리가 rpm을 이용하기 위한 부분이 아닙니다.
그런후 make install DESTDIR=$RPM_BUILD_ROOT 를 실행하게 되겠지요.. :)
자 compile가 다 끝나고 설치까지 제대로 되어 있다면..
%clean에서 rpm은 $RPM_BUILD_ROOT를 지우게 됩니다. :)
($RPM_BUILD_ROOT는 redhat/BUILD가 아니라 BuildRoot에서 정의한 부분 즉,
앞의 예를 들자면 /var/tmp/exampels-0.0.0...입니다)
다 끝났다고 rpm이 제대로 묶어 졌다면.. BUILD/에 있는거 지워도 되고
안지워도 상관은 없습니다만.. 하드 공간만 차지하는 녀석이 되겠지요..
에궁... 생각나는 대로 막 적어어서 도움이 될지...
필요할것 같은 부분까지 모두 적어서..좀...횡설 수설 할것 같군요..
난 와 이카는지..쩝..
: 아 kde님께서 남겨주신 리플을
: 보고 난뒤 궁금증이
: 어느정도는 풀렸습니다.
:
: 음.. rpm을 만들기 위해서
:
: 일단 SORUCE라는
:
: 디렉토리에 소스
:
: 타르볼을 넣어두고
:
: 제 생각으론 source 란
: 디렉토리는 말 그대로 소스를
:
: 넣어두는 곳이라고 생각이 되는데 ?
:
: 의미가 맞는지 궁금합니다.
:
: 그리고 난뒤 spec 파일에서
:
: 기술하는것은 어느정도 이해가
:
:
: 가는데 제가 의도했던 질문은
:
: rpm이 성공적으로 만들어졌다면
:
: 그것을 만들기 위한
:
: 일종의 도구 디렉토리가
:
: build와 source 그리고
:
: spec인지 궁금합니다.
:
: 의미를 이해해 본 결과
:
: 아마도 최종 산물인
:
: rpm을 만들기 위해서
:
: 사용되는 디렉토리가
:
: source 그리고
: build spec이 있어야하고
:
: spec 파일을
:
: rpm -ba 로 rpm을 생성하는
: 데 아무런 오류가 나타나지
:
: 않는다면
:
: 예를 들어 제가
:
: 소스 디렉토리에
:
: indent 타르볼을
:
: 넣어서
:
: indent rpm을 생성했습니다.
:
: 그뒤 rpm을 설치한뒤
:
: make install
:
: 까지 오류 없이 성공적으로
:
: 생성했다면
:
: build 디렉토리에
:
: indent란 이름으로
:
: rpm을 생성시 사용되었던
:
: 디렉토리가 있는것은
:
: 삭제해도 되는지가 궁금합니다.
:
: 그리고 제가 이해를 못했는지도
:
: 모르겠지만
:
: buildRoot란것을
:
: /var/tmp밑에 있는
: programename -build -root
:
: 로 들어간다고
:
: 설명을 하셧는데
:
: 제가 잘못 이해를 했는지
:
: 저는 buildroot란 것을
:
: rpm 생성시
:
: build 란 디렉토리로
:
: 생각을 했습니다.
:
: 그래서 %clean을 해더를
: 주면
: rpm이 생성되고 난뒤
:
: 예를 들어
:
: 전 source에 indent
:
: 타르볼을 넣고
:
: indent rpm을 생성했는데
:
: 이것이 생성되고 난뒤
:
: 그 build디렉토리가 없어지는
:
: 것으로 생각을 했는데
:
: 제가 잘못 생각한듯 합니다.
:
: kde님께서 설명해주신것을
:
: 읽어본 결과
:
: build 디렉토리는 rpm생성하고
:
: 그리고 make 하는것 까지 사용
:
: 된다고 하셨는데
:
: %clean 해더를 준다는 의미는
:
: var/tmp/promgramname
: 에서 make install 했던
:
: 것을 지운다는 의미가 맞는지
:
: 궁금합니다.
:
: 그리고 make install
:
: 한뒤 build디렉토리의
:
: 내용은 지워도 되는지
:
: 궁금합니다.
:
: 자세하게 설명해주셨는데
:
: 이해가 나쁜지
:
: 자꾸만
:
: 이렇게 여쭤봐서
:
: 죄송합니다.
:
: 그럼 리플좀 부탁드리겠습니다.
:
: 정말 죄송합니다.
:
: kde님
:
: 부탁드릴께요
:
: ps) 열정이 앞서서
:
: howto 메뉴얼과
:
: 그리고 공부방 그리고
:
: tip 리플을 모두다
:
: 프린트 해서
:
: 한 100장 넘게 다 읽어봤는데
:
: 무식하게 몇일 혼자 하다가
:
: 이렇게 여쭤보는게 좋을듯해서
:
: 여쭤봤습니다.
:
: 죄송합니다.
:
: 어떻게든지 알고 싶은 생각에
:
: 시간을 빼았는게 아닌지
:
: 너무 죄송합니다.
:
: 그럼 부탁좀 드리겠습니다.
:
: --
: 공부하는 학생입니다. .--나는야~~ CVS 광~~