我有一个精简的规格文件,如下所示:
Name: some-binary
Version: 6.1.0
Release: 1
License: proprietary
Summary: a binary
%description
Whatever
%install
install -d %{buildroot}/fromrpm
cp %{_sourcedir}/thebinary %{buildroot}//fromrpm/thebinary
%files
/fromrpm/thebinary
然后我跑:
$ cd ~/rpmbuild/
$ rpmbuild -bb SPECS/some-binary.spec 2>/dev/null
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.gxRpSj
Processing files: some-binary-6.1.0-1.x86_64
Provides: some-binary = 6.1.0-1 some-binary(x86-64) = 6.1.0-1
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/dspeyer/rpmbuild/BUILDROOT/some-binary-6.1.0-1.x86_64
Wrote: /home/dspeyer/rpmbuild/RPMS/x86_64/some-binary-6.1.0-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.WR3Utx
$ rpm2cpio RPMS/x86_64/some-binary-6.1.0-1.x86_64.rpm | cpio -idmv
./fromrpm/thebinary
41456 blocks
$ readelf -a SOURCES/thebinary | grep rela\\.
[ 5] .rela.plt RELA 0000000000400338 00000338
00 .note.gnu.property .note.gnu.build-id .note.ABI-tag .note.go.buildid .rela.plt
Relocation section '.rela.plt' at offset 0x338 contains 29 entries:
$ readelf -a fromrpm/thebinary | grep rela\\.
[ 6] .rela.got.plt RELA 0000000000000000 0143d048
Relocation section '.rela.got.plt' at offset 0x143d048 contains 29 entries:
我实际上不确定 rela 标签的作用,但我强烈怀疑它们是在 rhel 7.9 上运行时 post-rpm 二进制文件立即崩溃的原因,试图因“静态二进制文件中出现意外的 reloc 类型”而崩溃。是的,二进制文件是静态链接的。 (是的,我确实说过“试图崩溃而崩溃”:__libc_fatal 内的 sigsegv)
有什么想法 rpmbuild 正在尝试做什么,或者如何阻止它?
默认情况下,rpmbuild 会从主二进制文件中删除调试符号,同时将它们放入单独的 -devel 包中。不幸的是,这也剥夺了