我正在使用专有代码库,其中所有者希望用户获得有用的堆栈跟踪但无法查看源代码。使用调试符号生成Debian dbg包但没有源代码是直截了当的,但Redhat debuginfo RPMs是使用源代码自动创建的。
有没有办法配置rpmbuild来构建没有源代码的debuginfo RPM?
如果没有,那么从debuginfo包中删除源代码的最佳方法是什么?有人有脚本吗?
答案 0 :(得分:4)
-debuginfo包只是一个子包,可以在没有源代码的情况下手动创建。自动生成为spec文件添加了必要的语法,但您也可以手动执行此操作,在spec文件中添加调试信息包。
禁用* -debuginfo.rpm的自动生成,在find-debuginfo.sh
末尾运行%install
,然后删除源文件。
另一种(更简单/更清晰)删除源文件的方法会覆盖此宏
%__debug_install_post \
%{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
%{nil}
在规范文件中,将%{_rpmconfigdir}/find-debuginfo.sh
替换为已修改/自定义的find-debuginfo.sh
脚本。
将修改后的脚本包含在规范文件中,如
SourceN: my-find-debuginfo.sh
然后使用宏
%{SOURCEn}
(其中N == n,一些小的适当整数)而不是默认生成没有源代码的调试符号。
答案 1 :(得分:3)
刚刚完成了一轮测试,最后我们将以下内容插入到%description标记上方的.spec文件中:
# 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 6和7,但在RHEl 5中导致bash错误,因此我们避免通过不安装redhat-rpm-config软件包为后者构建debuginfo包。
我们决定避免按照建议创建一个修改过的find-debuginfo.sh脚本,因为不同平台之间已经存在差异,我们更喜欢一个适用于所有目标的补丁,包括未来的新目标。这并不完美,但与我们提出的一样接近。
答案 2 :(得分:2)
CentOS 7需要稍微修改Guy的解决方案。以下是我成功使用的内容:
# 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}
以下内容可用于验证RPM中不再包含源代码:
rpm -qpl xxx-debuginfo-1.0.0-1.el7.x86_64.rpm