RPM 생성후 설치하면 바이너리가 깨지는 현상

soulframe의 이미지

RPM생성서버(이하A): Redhat AS 4
시험서버(이하B): CentOS 5.1

Apache2.0.xx버전을 A에서 컴파일 해서 rpmbuild를 이용해서 RPM을 생성했습니다.

패키지 안에는 직접만든 S/W와 아파치(직접 컴파일한 바이너리)가 있습니다.

(아파치를 이렇게 컴파일해서 바이너리로 묶는 이유는 직접 만든 S/W를 설치하면서 바로 아파치까지 설치하려고 하기 위함입니다.)

이렇게 생성한 RPM을 B서버에 설치해서 실행해보면 직접 만든 S/W의 바이너리는 잘 작동하는데, 유독 아파치만 동작을 안합니다.

파일 사이즈가 줄어든 것은 물론이구요
(RPM생성시 디버깅 정보를 날려서 그렇다고 하는데..아마 이 것 때문에 그런듯..)

디버깅 정보가 삭제되면서 잘못 삭제하는 듯 하네요....

이 것을 해결할 옵션이나 방법이 있나요?

정아니되면 특정 디렉터리에 있는 바이너리 파일은 RPM 생성시에 손대지 않도록 하는 방법이 있나요?

고수님들의 답변 부탁드립니다. 감사합니다

김정균의 이미지

/usr/lib/rpm/redhat/macros 의 %__os_install_post 에서

/usr/lib/rpm/redhat/brp-strip-static-archive %{__strip}
/usr/lib/rpm/redhat/brp-strip-comment-note %{__strip} %{__objdump}

부분이 빌드 후에 패키징 시에 binary 파일들에 대한 strip 을 실행합니다. 이 부분을 처리해
주시고 빌드 하시면 될 겁니다.

soulframe의 이미지

답변 감사드립니다.

추가 궁금점 문의 드립니다.

처리한다는 것이 주석처리를 말씀하시는 것인지요?
다른 바이너리 들은 디버깅정보를 삭제하는 과정을 거쳐야 하고..

아파치만 바이너리 정보를 그대로 남겨두면 되는데...이 것을 선택적으로 하려면 어떻게 하면 될까요?

그리고 아파치에 대한 바이너리가 왜 손상을 입는 것인지 알 수 있을까요?^^

감사합니다...

soulframe의 이미지

11

다콘의 이미지

근데 왜 RHEL4(Redhat AS 4)에서 빌드를 해서
RHEL5(CentOS 5.1)에 설치를 하시나요?
일단 메이저 버전이 다르면 제대로 동작 안할 확률이 큽니다.

soulframe의 이미지

컴파일 환경이 RHEL4에서만 갖춰지기 때문입니다.

RHEL4도 아닙니다. RHEL3 입니다^^

잘돌아가는데 Apache만 그러는 군요. 감사합니다.

김정균의 이미지

shared library 가 달라진다면 잘 돌아간다는 보장을 할 수 없습니다. 단순히 optimizer 바이너리의 strip 때문인줄 알았더니.. 이 문제가 아닐 수도 있겠다 싶군요. 만약 그냥 가져와서 작동하면 문제가 없는데 strip 을 할 경우 문제가 발생하는 경우가 아니라면 말이죠.

또한 RHEL3 과 RHEL4/5 에서는 커널의 동작에 따른 미묘한 차이가 있을 수 있습니다. kernel 2.4와 kernel 2.6의 동작이 동일하다는 보장이 없으니까요. shahred library 의 문제를 해결하는 방법은 RHEL3 에서 apache 를 완전 static binary 로 생성을 하는 방법도 있습니다. 그리고, optimizer option 은 O2 이상 주지 마시고요. O3 의 경우에는 아주 critical 하게 오작동 할 수 있습니다.

soulframe의 이미지

shared library 가 달라진다면 잘 돌아간다는 보장을 할 수 없습니다. 단순히 optimizer 바이너리의 strip 때문인줄 알았더니.. 이 문제가 아닐 수도 있겠다 싶군요. 만약 그냥 가져와서 작동하면 문제가 없는데 strip 을 할 경우 문제가 발생하는 경우가 아니라면 말이죠.

>> 그냥 가져와서 실행해보면 잘 동작합니다. rpmbuild만 거친후에 그런 현상이 일어납니다.

또한 RHEL3 과 RHEL4/5 에서는 커널의 동작에 따른 미묘한 차이가 있을 수 있습니다. kernel 2.4와 kernel 2.6의 동작이 동일하다는 보장이 없으니까요. shahred library 의 문제를 해결하는 방법은 RHEL3 에서 apache 를 완전 static binary 로 생성을 하는 방법도 있습니다.
>> 기존 Apache(업그레이드전) 버전은 rpmbuild를 RHEL3에서 한 후에 RHEL4 또는 CENTOS 5.1에도 정상작동한 것으로 보아서 Static Binary 로 생성되었다고 볼 수 있는건가요?
>> 그리고 Static Binary로는 어떻게 하는지요?(static/DSO 두개 방식중의 static말씀하시는것인지?)

그리고, optimizer option 은 O2 이상 주지 마시고요. O3 의 경우에는 아주 critical 하게 오작동 할 수 있습니다.

>> 컴파일을 확인해보겠습니다. 단순히 apache의 configure, make, make install 밖에 하지 않았습니다.
기본이 O2 아닌가요?^^

답변 감사드립니다.

추가로 금일 시험해본 사항은 다음과 같습니다.
서버A(rpmbuild하는 서버)에서 apache를 직접 strip해서 서버B에 업로드 한후 테스트 해봄 --> 잘 동작함
서버B에서 apache를 직접 stip --> 역시 잘 동작함

결국 문제는 rpmbuild만 거치면 안된다는 것임

김정균의 이미지

>> 그리고 Static Binary로는 어떻게 하는지요?(static/DSO 두개 방식중의 static말씀하시는것인지?)

static binary 는 dynamic library를 link 하지 않은 상태를 말합니다. 이는 ldd 명령으로 확인을 할 수 있습니다. ldd httpd 해서 아무 결과가 나오지 않는다면 static binary 라고 할 수 있습니다.

bushi의 이미지

상황이 틀리니... 그냥 참고만 하세요.
x86 에서 arm 크로스컴파일 툴체인을 사용하는 rpm 작성 때 .spec 에 적어줬던 내용입니다.

# debuginfo 패키지를 만들지 않는다.
%define debug_package %{nil}
 
# strip 을 하지 않는다.
%define __spec_install_post %{nil}
 
# provides 정보를 자동으로 만들지 않는다.
%define __find_provides %{nil}
 
# requires 정보를 자동으로 만들지 않는다.
%define __find_requires %{nil}
 
# internal_dependency 정보를 자동으로 만들지 않는다.
%define _use_internal_dependency_generator 0

OTL

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.