rpm질문좀 하겠습니다. 답변좀 해주세요

익명 사용자의 이미지

안녕하세요 rpm에 대해서 공부좀 하다가

몇가지 의문이 나서 이렇게 질문을 합니다.

rpm에 관해서 여러가지 참고 문헌을 다 뒤적이다가

몇가지 의문이 생깁니다.

다름이 아닌

제가 rpm패키지를 만들어서 그것을 다시 한번 깔아 봤는데

궁금한것은 다름이 아닌

spec파일을 만들때

옵션을 이런식으로 주었습니다.

%build
./configure
make
%install
make install
여기 까지는 제가 만든 rpm을 깔았을 경우
설치 하는데 문제가 없었습니다.

그런데

여기서 궁금한점이 있습니다.

다름이 아닌

일단 타르볼을 rpm이란것은 풀어서

그것을 설치 하는 모든정보가 한꺼번에 다 들어 있는것이란 의미로 생각을

하고 있습니다.

spec파일에서

이런 경로를 지정했습니다.

%file
%defattr(-,root,root)
/usr/local/bin/indent
예제 타르볼은 indent로 했습니다.

%doc /usr/local/info/ident.info
%doc %attr(0444,root,root)/usr/local/man/man1/indent.1
%doc COPYING AUTHORS README NEWS

여기 가장 궁금한것이 있습니다.

이렇게
./configure
하고

make install
하면 잘 설치가 됩니다.

하지만 /usr/src/redhat/BUILD

에 일단 indent 의 타르볼이 전부다 풀렸습니다.

그 다음 설치를 했는데

제가 궁금한것은

% clean
이란것을 주어서

제가 깔아놓은 것을

다 삭제하고 설치할수 있다는 것이 있다고 합니다.

제가 만든 spec은 파일의 최종 위치가 빌드 루트로 잡혀있어서

usr/src/redhat/BUILD
에 타르볼을 풀었다는 것입니까 ?

그럼

%clean 을 사용해서

rm -rf$RMP_BUILD_ROOT

이런식으로 spec파일에 넣어준다면

/usr/src/redhat/BUILD

타르볼을 풀었다가도 다 설치가 된다면

그 풀렸던 타르볼을 다 지워준다는 것입니까 ?

혹시 맞는다면

제가 아직 spec 에

%clean 을 기술하지 않았으므로

BUILD에 풀렸던 타르볼 디렉토리를 지우면
제가 설치한 프로그램은 작동이 되지 않습니까 ?

제 생각으론 압축을 풀어놓고 나서

설치가 된다면 컴파일을 한다는 경우는

그것을 사용 가능하게 만든것이므로

RPM에서 처음 풀었던 BUILD에 남아있는

디렉토리는 제거 해도 되지 않을까 궁금합니다.

다시 요점을 간추려 볼께요

rpm 을 사용한다는것은

타르볼을 일단 어떤경로에 풀어서 그것을 컴파일 한다는것이라고

생각합니다.

그 경우 설치가 다 되고 난뒤에

그 설치시 필요한 모든 파일( 즉 다시 말해서

타르볼을 푼 모든 파일은 ) 한개의 디렉토리에

들어있을텐데 그것을 설치가 끝난뒤에도 그대로 놔두어야 하는것인지 ?

아님 그 설치한뒤에 그 디렉토리를 삭제 해도 되는지 궁금합니다.

윈도우 같은 경우는 설치를 한경우에 폴더를 잡아서

설치를 하고 그 뒤에 그 설치 폴더를 그대로 놓아두고 프로그램을

사용하지만

그것과 같은 의미인지 무척 궁금합니다.

그럼 답변좀 부탁드리겠습니다.

죄송합니다.

한가지만 더 여쭤 보겠습니다.

다름이 아닌 일단 빌드란것을 하기 위해서

소스를 전부다 풀었다는 의미인데

그것의 소스를 풀었던 디렉토리 에서 컴파일성공한뒤

설치가 되고 난다면

그 소스를 풀었던 디렉토리 즉 다시 말해 usr/src/redhat/BUILD
에 풀린 소스의 디렉토리는 제거 해도 되지 않는지가 제가 궁금해 하는

부분입니다.

저 같은 경우는 자꾸 두서 없이 질문을 해서 죄송합니다만

spec에 %clean 헤더를 넣지 않아서

그 소스가 풀린 디렉토리가 설치가 완전히 되고 난뒤도 남아있는것

같은 생각이 되는데

제가 생각한것이 올바른 생각인지 ?

아님 그 소스를 풀었던 디렉토리도 그대로 남겨두어야 하는지 궁금합니다.

만약 설치가 완전히 되었다면 그 디렉토리를 제거 해도 괜찮은건지를

알고 싶습니다.

그리고 한가지만 더 여쭤보겠습니다.

정말 죄송합니다.

indent란 프로그램이 c 언어에서 사용된다는것 같은데

제가 예제로 사용은 하지만 어떤 프로그램인지 궁금합니다.

혹시 아시다면 리플 조금 달아주세요 죄송합니다.

답변좀 부탁드리겠습니다.

익명 사용자의 이미지

내용이 길어지겠군요 ㅡ.ㅡa
몇가지 기초지식부터 짚고 넘어가지요.

첫번째로 BUILD ROOT 라는 것입니다.
이것은 소스가 풀려서 빌드하는 디렉토리를 뜻하는게 아닙니다. 소스를 빌드하고 난 후
설치할 때 ROOT로 설정할 디렉토리를 의미합니다. 즉, 우리가 일반적으로 리눅스를 사용
할 때 쓰는 실제 root디렉토리는 아시다시피 / 입니다.
그러니까 소스를 컴파일하고 설치를 하면 / 를 ROOT로 보고 설치작업을 하게 되죠.

그런데 RPM의 경우는 패키지를 만들때 설치하게 되는 파일들이 모두 임시 파일입니다
무슨 의미냐 하면, RPM패키지를 만들고 나서 일단 만들던 흔적은 깨끗이 지우고 난 후
만든 RPM을 설치해서 써야 비로소 실제로 사용할 수 있게 되는거죠.
그래서 RPM을 생성할 때는 / 를 실제의 ROOT로 쓰지 않고 임시 디렉토리를 ROOT로 보죠
일반적으로 /var/tmp/프로그램이름-버전/ 을 BUILD ROOT로 둡니다.
그래서 /usr/bin/ 에 설치될 프로그램은 빌드되는 동안만 설치시
/var/tmp/프로그램이름-버전/usr/bin/ 에 설치가 되도록 하는 것입니다.
이것이 RPM_BUILD_ROOT 입니다.

이와 같이 헷갈리시는게 /usr/src/redhat/BUILD 인 듯 한데, RPM_BUILD_ROOT가 아니라
RPM_BUILD_DIR 입니다. 거긴 소스가 풀린 디렉토리일 뿐이지 ROOT디렉토리는 아니란
뜻이지요.

이렇게 가상의 ROOT디렉토리를 만드는건 유닉스 계열의 OS에서는 보편화 된 방식입니다.
어떤 작업을 할 때 안전하게 하기 위해서 혹은 보안의 위험을 벗어나기 위해서이죠.
RPM 생성씨 쓰는건 안전을 위한 것이며 더불어 편의도 있습니다.
/usr/bin/ 에 10개 정도의 파일이 들어가는 패키지일 때 가상의 ROOT로 작업을 하지 않고
실제 ROOT(/를 말하죠) 쓴다면 10개의 파일 모두를 %file에서 적어줘야겠지요.
하지만 가상의 ROOT를 쓰면 간단해집니다.

%file
defattr(-,root,root)
/usr/bin/*

참고로 %file 부분에선 RPM_BUILD_ROOT가 실제 루트가 아닌 가상의 ROOT라도 그냥
위와 같이 실제 ROOT를 적어줘도 알아서 인식합니다.

그럼 RPM_BUILD_ROOT를 사용해서 SPEC파일을 만드는 과정에 대해 간단히 설명드리면,

1. SPEC파일의 헤더부분에서 BuildRoot 지시자를 사용하여 RPM_BUILD_ROOT를 설정합니다.
2. %clean 항목에선 이전에 작업하던 것이 RPM_BUILD_ROOT에 남아있을지도 모르니
rm -rf $RPM_BUILD_ROOT 를 넣어줍니다.
3. %build에서는 configure를 해줄 때 그냥 일반적인 프로그램을 자신이 원하는 경로에
설치할 때와 마찬가지로 옵션을 주고 설치합니다. 이때는 절대 RPM_BUILD_ROOT에 대해서
생각하지 마십시요.
4. %install 항목에서는 make install 을 하지 마시고
make DESTDIR=$RPM_BUILD_ROOT install
을 사용해서 RPM_BUILD_ROOT 밑으로 설치하게 해 주십시요. DESTDIR은 Makefile에서
정의된 사항입니다. 시간 되면 한번 각 소스에 있는 Makefile을 뜯어보세요)
5. 저렇게 하면 이제 %file만 남는데, 여기서는 다시 RPM_BUILD_ROOT에 대해서는
생각하지 말고 작업하시면 됩니다. %file에 대한 설명은 위에서 했으므로 넘어가죠)

물론 각 지시자에 대한 설명은 이곳 kldp에 있는 문서를 참고해 주시구요.
혹시 더 필요한게 있으면 아래 글을 읽어가며 추가해 놓겠습니다.

헤네시 wrote..
그런데
여기서 궁금한점이 있습니다.
다름이 아닌
일단 타르볼을 rpm이란것은 풀어서
그것을 설치 하는 모든정보가 한꺼번에 다 들어 있는것이란 의미로 생각을
하고 있습니다.

타르볼, 혹은 타볼이란 것은 어떠한 패키지로 묶인 상태가 아닌 단순히 tar로 묶여있는
상태를 말합니다. tar.gz(tgz)나 tar.bz2(tb2)를 일컫는 말이죠. 전혀 rpm과 관련 없습
니다. 간단히 말해, 그냥 프로그램 소스다.. 라고 이해하시면 됩니다.

그 다음 설치를 했는데 제가 궁금한것은
% clean
이란것을 주어서 제가 깔아놓은 것을 다 삭제하고 설치할수 있다는 것이 있다고
합니다. 제가 만든 spec은 파일의 최종 위치가 빌드 루트로 잡혀있어서
usr/src/redhat/BUILD 에 타르볼을 풀었다는 것입니까 ?

위에서 말씀드렸듯 BUILD디렉토리는 RPM_BUILD_DIR입니다. RPM은 패키징할 때 컴파일
하는 위치는 RPM_BUILD_DIR이며, 컴파일 후 설치하는 디렉토리를 RPM_BUILD_ROOT로
합니다. 그러니까 RPM_BUILD_DIR에 tar파일의 압축을 풀어 컴파일 한 후 RPM_BUILD_ROOT
로 설치를 하게 되죠.

그럼 %clean 을 사용해서
rm -rf$RMP_BUILD_ROOT
이런식으로 spec파일에 넣어준다면
/usr/src/redhat/BUILD 에
타르볼을 풀었다가도 다 설치가 된다면
그 풀렸던 타르볼을 다 지워준다는 것입니까 ?

지금까지 말씀드린걸 이해하셨다면 이 말이 틀렸다는걸 깨달으셨을겁니다.
rm -rf $RPM_BUILD_ROOT 를 하면 rpm이 컴파일 후 설치시 root디렉토리로 쓰는 곳을
깨끗하게 날려버린다는 뜻입니다. 단, 여기서 중요한게 있습니다. RPM_BUILD_ROOT를
설정 안 했을때는 rm -rf $RPM_BUILD_ROOT 하지 마십시요. 하드가 깨끗이 날아가는
수가 있으니까요. 확인은 안 해봤지만, RPM_BUILD_ROOT를 정의 안 했을 때 혹이라도
/ 가 그 값이라면 rm -rf / 와 같은 의미가 되어버릴테니까요.

혹시 맞는다면
제가 아직 spec 에

%clean 을 기술하지 않았으므로

BUILD에 풀렸던 타르볼 디렉토리를 지우면
제가 설치한 프로그램은 작동이 되지 않습니까 ?
제 생각으론 압축을 풀어놓고 나서
설치가 된다면 컴파일을 한다는 경우는
그것을 사용 가능하게 만든것이므로
RPM에서 처음 풀었던 BUILD에 남아있는
디렉토리는 제거 해도 되지 않을까 궁금합니다.

맞습니다. /usr/src/redhat/BUILD/ 안에 있는 디렉토리들은 패키징이 끝나면
싹 지워줍니다.


다시 요점을 간추려 볼께요
rpm 을 사용한다는것은
타르볼을 일단 어떤경로에 풀어서 그것을 컴파일 한다는것이라고
생각합니다.

어떤경로 /usr/src/redhat/BUILD 이며, $RPM_BUILD_DIR 입니다.

그 경우 설치가 다 되고 난뒤에 그 설치시 필요한 모든 파일( 즉 다시 말해서
타르볼을 푼 모든 파일은 ) 한개의 디렉토리에
들어있을텐데 그것을 설치가 끝난뒤에도 그대로 놔두어야 하는것인지 ?
아님 그 설치한뒤에 그 디렉토리를 삭제 해도 되는지 궁금합니다.

다 지워줍니다. 필요 없죠. 단시 자신이 만든 RPM을 설치만 해주면 되는것입니다
RPM제작시 만들어진 잔유물들은 모두 필요없습니다. 그게 필요하다면 RPM을 만들어
배포할 때 용량이 2배가 되어야 겠지요.
RPM으로 생성시 보관하는것은 RPM본체와 SRPM 뿐입니다. 물론 설치를 하고 지워버린다
해도 이것 역시 지장은 없지요. 다음에 또 쓸 경우를 위해 보관하는거니까요.

윈도우 같은 경우는 설치를 한경우에 폴더를 잡아서
설치를 하고 그 뒤에 그 설치 폴더를 그대로 놓아두고 프로그램을
사용하지만 그것과 같은 의미인지 무척 궁금합니다.

윈도와는 비교 불가입니다. 왜냐면 윈도는 컴파일 하는게 아니니까요.
이미 패키징 된 RPM을 설치하는 경우와는 비교할 수 있겠는데, 윈도의 경우 프로그램들이
한 디렉토리에 싸그리 들어가는 것에 반해 리눅스는 프로그램들의 각 파일이 리눅스
디렉토리 구조에 맞게 나눠서 들어가게 만든것일 뿐입니다. 이게 싫다면 만들때부터
한 디렉토리에만 들어가게 만들 수도 있으며 그렇게 하면 윈도와 같게 되는거겠죠.
여튼, 윈도가 프로그램을 설치하면 한 디렉토리에 파일이 다들어가고 그걸 쓰는 것이나
RPM으로 설치한 후에 하드에 파일들이 적당한 위치에 깔리는 것이나 다 같은 개념입니다
차이점이라는건 단지 한 디렉토리에 들어가냐 아니면 나뉘어서 들어가냐 차이죠.
이건 OS의 특징 차이인 겁니다.

한가지만 더 여쭤 보겠습니다.
다름이 아닌 일단 빌드란것을 하기 위해서
소스를 전부다 풀었다는 의미인데
그것의 소스를 풀었던 디렉토리 에서 컴파일성공한뒤
설치가 되고 난다면
그 소스를 풀었던 디렉토리 즉 다시 말해 usr/src/redhat/BUILD
에 풀린 소스의 디렉토리는 제거 해도 되지 않는지가 제가 궁금해 하는
부분입니다.

위에서 말했듯 패키징이 끝나면 지웁니다.

저 같은 경우는 자꾸 두서 없이 질문을 해서 죄송합니다만
spec에 %clean 헤더를 넣지 않아서
그 소스가 풀린 디렉토리가 설치가 완전히 되고 난뒤도 남아있는것
같은 생각이 되는데
제가 생각한것이 올바른 생각인지 ?
아님 그 소스를 풀었던 디렉토리도 그대로 남겨두어야 하는지 궁금합니다.
만약 설치가 완전히 되었다면 그 디렉토리를 제거 해도 괜찮은건지를
알고 싶습니다.

%clean은 RPM_BUILD_ROOT를 관여하지 RPM_BUILD_DIR을 갖고 어쩌지 않습니다.
RPM_BUILD_DIR은 빌드가 끝난 후 지워주시면 됩니다

그리고 한가지만 더 여쭤보겠습니다.
정말 죄송합니다.
indent란 프로그램이 c 언어에서 사용된다는것 같은데
제가 예제로 사용은 하지만 어떤 프로그램인지 궁금합니다.
혹시 아시다면 리플 조금 달아주세요 죄송합니다.
답변좀 부탁드리겠습니다.

rpm -qi indent 하면 나옵니다.
c소스를 자동으로 들여쓰기 해줍니다. 보기 쉽도록말이지요.
단지 이것 뿐입니다.

--
SOrCErEr

익명 사용자의 이미지

감사합니다.

제가 궁금했던 부분이

전부다 해결이 되었습니다.

너무나 자세한 설명에 정말 감사드립니다.

저 혼자 스스로 해보려고

많은 문서를 프린트하고

그리고 나서 거의 모든 tip 사이트와

적수네 공부방에서도 프린트해서 모든것을 읽어보면서

꼼꼼이 읽어봤지만 몇일이 지나도 궁금증은 해결이 안되더군요

그래서 혼자서 하느니 차라리 질문을 해보자

하면서 여쭤본것인데

제가 모르는 부분만을 꼭꼭 찝어서 그리고 자세한

설명의 강의 정말 감사드립니다.

열심히 해서

꼭 필요한 사람이 되고자 노력은 하지만 어느부분부터

시작을 해야할지 참 리눅스는 난감합니다.

하지만 열정만으론 되지 않는다는것을 알고 있지만도

하나씩 메뉴얼을 꼼꼼이 읽어보고

실습해보고 그러면서 시간이 지난다면

어느정도 성장을 하겠지요 하지만 조바심을 내면서 덤비고

싶진 않습니다.

그저 즐기고 싶은데 세상이란것이 즐긴다는것을

참 싫어하더군요 뛰는사람위에 나는사람이 있으니

그래도 열심히 해볼렵니다.

간혹 질문 드려도 답변좀 부탁드릴께요 죄송합니다.

그리고 다시한번 답변해주신것에 대해서 정말로 감사드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.