2015-01-16 2 views
4

나는 소유자가 유용한 스택 추적을 얻고 싶지만 소스 코드를 볼 수 없도록하려는 독점적 인 코드 기반으로 작업하고 있습니다. 디버그 기호로 소스 코드가없는 데비안 dbg 패키지를 생성하는 것은 간단하지만 Redhat debuginfo RPM은 소스 코드로 자동 생성됩니다.소스 코드없이 debuginfo RPM을 빌드하는 방법은 무엇입니까?

소스 코드없이 debuginfo RPM을 빌드하기 위해 rpmbuild를 구성하는 방법이 있습니까?

그렇지 않은 경우 debuginfo 패키지에서 소스 코드를 제거하는 가장 좋은 방법은 무엇입니까? 누구든지 그것을 할 스크립트가 있습니까?

+0

이도 발생합니까 : 다음은 더 이상 RPM에 포함 된 소스 코드를 확인하는 데 사용할 수 없습니다

# Remove source code from debuginfo package. %define __debug_install_post \ %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"; \ rm -rf "${RPM_BUILD_ROOT}/usr/src/debug"; \ mkdir -p "${RPM_BUILD_ROOT}/usr/src/debug/%{name}-%{version}"; \ %{nil} 

'] (http://www.rpm.org/max-rpm/s1-rpm-inside-tags.html#S3-RPM-INSIDE-NOSOURCE-TAG) 스펙 파일에 태그를? –

+0

예, nosource 태그로도 발생합니다. 단지 소스 RPM을 적용 nosource, 따라서 debuginfo없는 것 같다. 나는 /usr/lib/rpm/find-debuginfo.sh 스크립트를 공부하고 .so를 생성 된 파일에서 직접 포함하는 어떤 소스를 결정할 것으로 보인다.그러나 제안에 감사드립니다 - 나는 그것을 시도하는 것을 생각하지 않았습니다. –

답변

4

-debuginfo 패키지는 단지 하위 패키지이며 소스 코드없이 수동으로 만들 수 있습니다. 자동 생성은 spec 파일에 필요한 구문을 추가하지만 spec 파일에 디버그 정보 패키지를 추가하여 수동으로 생성 할 수도 있습니다.

* -debuginfo.rpm의 자동 생성을 비활성화하고 %install 끝에 find-debuginfo.sh을 실행 한 다음 원본 파일을 제거합니다.

또 다른

(쉽게는/청소기) 수정/사용자 정의 find-debuginfo.sh 스크립트 %{_rpmconfigdir}/find-debuginfo.sh를 대체 스펙 파일에

%__debug_install_post \ 
    %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\ 
%{nil} 

이 매크로 소스 파일 재 지정을 제거하는 것을 의미합니다.

는 매크로

%{SOURCEn} 

(N의 == N, 몇 가지 작은 적절한 정수 곳) 대신 기본 생성하는 데 사용할 다음

SourceN: my-find-debuginfo.sh 

과 같은 사양 파일의 수정 된 스크립트를 포함 소스 코드가없는 심볼 디버깅.

2

그냥 테스트 라운드를 마친 결국 우리는 어딘가에 % 설명 태그 위의을 .spec 파일에 다음을 삽입 :

이 떠들썩한 오류에 RHEL 6, 7하지만 결과를 작동
# Override the macro that invokes find-debuginfo.sh to remove 
# the source files before the debuginfo pkg is assembled. 
# It would be nice to remove the entire /usr/src tree but 
# rpmbuild is running a check-files utility that fails the 
# build if /usr/src/debug/%{name} isn't there. Tried to 
# just delete the contents but it's tricky getting an 
# asterisk to expand properly so we remove the entire 
# directory and then restore an empty one. Sigh! 
%define __debug_install_post \ 
    %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}";\ 
    rm -rf "${RPM_BUILD_ROOT}/usr/src/debug/%{name}"; \ 
    mkdir "${RPM_BUILD_ROOT}/usr/src/debug/%{name}"; \ 
%{nil} 

RHEl 5에서는 redhat-rpm-config 패키지를 설치하지 않음으로써 후자에 대한 debuginfo 패키지를 빌드하지 않습니다.

우리는 서로 다른 플랫폼 간의 차이가 이미 있기 때문에 제안 수정 find-debuginfo.sh 스크립트를 생성하는 것을 피하기로 결정하고 향후 새로운 포함한 모든 대상에 대해 일하는 것이 하나의 패치를 좋아했다. 이것은 완벽하지는 않지만 우리가 생각해 낸 것만큼이나 가깝습니다.

1

CentOS 7은 가이의 솔루션을 약간 수정해야했습니다. 여기에 내가 성공적으로 사용하고있는 작업은 다음과 같습니다 당신이 [`nosource을 설정하면

rpm -qpl xxx-debuginfo-1.0.0-1.el7.x86_64.rpm 
관련 문제