RPM 혹은 DEB 묶을 때 이런 경우..
안녕하세요?
이여송 사도요한입니다.
RPM이나 DEB 파일을 묶을 때 이런 경우가 있더군요. 이럴 때 어떻게 해야 하나요? 솔직히.. Engdic 같은 프로그램은 ... 아.. 예를 먼저 들 것이 아니라 설명을 먼저 드리겠습니다.
보통 컴파일을 하고, 그 후에 make install 정도로 RPM 빌드 경로에 그것을 복사 하게 만든 뒤 그 안의 파일들을 잡아다가 RPM으로 묵게 되는 것인데, 이런 경우, 이것이 /usr 등에 프리픽스를 집고 설치 되게 되죠. 그런데 GCC나 Apache, PHP 등은 이런 샐행상의 경로(라이브러리등 때문에) 설정이 달라지면 실행에 문제가 생기기도 합니다. 두 가지 패키지를 예를 들어 보겠습니다.
1. Engdic 0.2
제가 이것을 묶을 때는 $build에서 make로 컴파일 하고 Makefile를 좀 수정 해서 $RPM_BUILD_ROOT/usr에 파일들을 설치 하도록 구성 했습니다.(make install 할 때에) 그리고 $files에 해당 파일의 목록을 적어 주었고요. 이 경우 파일을 설치시 별 문제 없이 설치가 되었습니다. RPM은 물론 잘 생성 되었고요. 그리고 실행에도 큰 문제가 없었습니다. engdic는 정상적으로 /usr/share/engdic/{a~z}.dic.gz 파일을 찾아서 사전 자료를 출력 했고요...
2. Mutt 1.3.x(버젼번호 부정확함)
이것을 컴파일 해서 완전히 빌딩 하고 RPM으로 묶을 때 BuildRoot를 /tmp/mutt-1.3.x-root/로 지정 했습니다. 이 후에 역시 같은 바업으로 빌딩을 다 하고 나니... 물론 빌딩은 성공 했습니다. 프리픽스는 $RPM_BUILD_ROOT/usr로 했고요. configure 시에 --install-prefix나 --exec-prefix는 지정 하지 않았습니다. 이렇게 RPM을 빌드시, RPM을 설치 후 문제가 발생 했습니다. /tmp/mutt-1.3.x-root/usr/share/.../.../.../........... 어쩌고를 찾을 수 없다고 하더군요. 이게 뭔 소린지... 그래서 RPM으로 안 묶고 그냥 설치 해 봤습니다. 아. 무론 잘 되었습니다.
위의 두 가정이 있습니다. 이런 경우 어떻게 해야 하나요? 의문이네요. --install-prefix --prefix --exec-prefix 등을 각자 다르게 지정해서 빌드될 때 파일이 위치하는 곳과 설치된 상태에서의 위치를 바꿔 줘야 하는 건가요? 음. 뭐 보니까 여러가지 스팩 파일 내에서 변수를 사용 하고 있던제 전반적으로 다 이해 하지는 못 했습니다. 보니 --install-prefix도 있고 --exec-prefix도 있고 그렇긴 합니다만 음...
잘 모르겠네요 어떻게 해야 할 것인지 음...
혹시 어떻게 묶어야 할 것인지, 그리고 그렇게 해야 하는 이유가 무엇인지 설명 해 주실 수 있는 분이 계신다면 설명 부탁 드립니다...
이여송 사도요한 드림.
alien을 사용하세요
일단 /tmp 와 같은 임의의 디렉토리밑으로 install 하고 나서 그곳의 top(패키징하면 루트디렉토리가 됨)으로 가서 .tgz로 묶은 다음에 alien으로 deb 또는 rpm으로 컨버트하시는게 제일 쉽습니다. deb인 경우에는 alien이 의존성도 알아서 찾아주는 장점도 있습니다. 저도 우리 실험그룹에서만 사용하는 비표준디렉토리를 구조를 갖는 프로그램을 alien을 사용해서 deb으로 패키징해서 사용하고 있습니다.
엘리언 음...
DEB는 그런데 RPM을 RPMBUILD로 빌딩 할 때는 좀 머리가 깨지네요 음 %makeinstall 이란 메크로가 잇긴 한대 이거 좀 마음에 안 드는 놈이라서 음... 어떻게 해야 할지 난감하군요. 아무튼 감사합니다. ALIEN도 생각 해 봐야 겠네요.
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!
사람천사
흠.. 이렇게!
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!
사람천사
댓글 달기