我将一些Python库打包为RPM。有些库仅作为源分发版提供(没有轮子)。
在我的RPM规范中,我这样做:
pip install --root=%{buildroot} --prefix=/x/y tornado
rpmbuild
完成后,它将运行check-buildroot
,并且构建失败并显示以下错误:
二进制文件/a/b/c/BUILDROOT/my-rpm-1.0.0-1.el7.x86_64/x/y/lib64/python2.7/site-packages/tornado/speedups.so匹配>
如果运行%{buildroot}
,我会看到列出的strings tornado.so | grep BUILDROOT
路径。
如何清理.so
文件?或更笼统地说,如何使check-buildroot
通过?
答案 0 :(得分:0)
我想出了如何从SO文件中删除路径。
我使用以下命令确定路径是嵌入式调试信息:
readelf --debug-dump=line speedups.so | less
strip
命令可以从SO文件中删除调试信息,因此我将其添加到了RPM规范中:
BuildRequires: binutils
set +e
find "%{buildroot}{%_prefix}/lib64/python2.7/site-packages" -type f -name "*.so" | while read so_file
do
strip --strip-debug "$so_file"
done
set -e
注意:strip
在某些SO文件上存在段错误,目前尚不清楚原因。我使用set +e
禁用了立即退出功能,因此构建程序将忽略它们。