>> Edit article
이름
제목
패스워드
다시 안녕하세요.. :) 흠.. 여기에 일일히 적기엔..그리고 글쓰신 분의 말씀이 너무 길어서.. 다 읽기 힘들군요..헤~~ 그리고.. 너무.. 죄송할 필요는 없느데...^^;;;; 어찌됐든... 천천히 다시 적도록 하지요...:) (허접이지만... ^_^) 우선...님께서 보셔야할 파일이 한가지 있습니다.. /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 광~~
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved