生成的 RPM 对它包含的文件有要求,但没有提供这些文件

问题描述 投票:0回答:1

我正在尝试从外部构建的库创建 RPM。

我的规格基本上是这样的:

Name:     ace-tao
Version:  6.5.3
Release:  1
Summary:  ACE and TAO libraries
License:  other
Vendor:   My Corp
Group:    Applications/Engineering
Packager: My Corp <[email protected]>
Prefix:   /usr/local/foo

%description
Contains the ACE and TAO libraries.

%install
mkdir -p %{buildroot}/%{prefix}/lib
cp -f %{_sourcedir}/deps/libACE*.so.%{version} %{buildroot}/%{prefix}/lib/
cp -f %{_sourcedir}/deps/libTAO*.so.2.5.3 %{buildroot}/%{prefix}/lib/
(
  cd %{buildroot}/%{prefix}/lib/
  for lib in libTAO*.so.2.5.3; do
    ln -s $lib ${lib%.3}
    ln -s $lib ${lib%.5.3}
    ln -s $lib ${lib%.2.5.3}
  done
)

%files
%defattr(-,root,root,-)
%{prefix}

TAO 库要求

libTAO*.so
libTAO*.so.2
libTAO*.so.2.5
libTAO*.so.2.5.3
,因此需要
ln
调用。

rpmbuild -bb ace-tao.spec
构建此文件后,我得到一个文件
ace-tao-6.5.3-1.x86_64.rpm
。然而,安装这个会产生警告:

15:16:32,868 WARN packaging: ace-tao-6.5.3-1.x86_64 requires libTAO.so.2.5.3()(64bit)
15:16:32,868 WARN packaging: ace-tao-6.5.3-1.x86_64 requires libTAO_CodecFactory.so.2.5.3()(64bit)
15:16:32,868 WARN packaging: ace-tao-6.5.3-1.x86_64 requires libTAO_10RTable.so.2.5.3()(64bit)
... snip ...

检查包裹的要求,

rpm -qRp ace-tao-6.5.3-1.x86_64.rpm
确实列出了

libTAO.so.2.5.3()(64bit)
libTAO_AnyTypeCode.so.2.5.3()(64bit)
libTAO_CodecFactory.so.2.5.3()(64bit)
... snip ...

RPM 并没有提供它们:

$ rpm --provides -qp ace-tao-6.5.3-1.x86_64.rpm
ace-tao = 6.5.3-1
ace-tao(x86-64) = 6.5.3-1

即使它包含它们:

$ rpm -qlp ace-tao-6.5.3-1.x86_64.rpm | grep TAO
/usr/local/foo/lib/libTAO.so
/usr/local/foo/lib/libTAO.so.2
/usr/local/foo/lib/libTAO.so.2.5
/usr/local/foo/lib/libTAO.so.2.5.3
/usr/local/foo/lib/libTAO_AnyTypeCode.so
/usr/local/foo/lib/libTAO_AnyTypeCode.so.2
/usr/local/foo/lib/libTAO_AnyTypeCode.so.2.5
/usr/local/foo/lib/libTAO_AnyTypeCode.so.2.5.3
/usr/local/foo/lib/libTAO_CodecFactory.so
/usr/local/foo/lib/libTAO_CodecFactory.so.2
/usr/local/foo/lib/libTAO_CodecFactory.so.2.5
/usr/local/foo/lib/libTAO_CodecFactory.so.2.5.3
... snip ...

这是为什么呢?我需要对 RPM 进行哪些更改才能提供其包含的库?

我使用的是 CentOS 7.9。

rpm rpmbuild rpm-spec
1个回答
0
投票

为了让 RPM 的自动依赖系统获取共享对象,它们需要设置其可执行位。我怀疑你没有在这里这样做。

因此,在您的

%install
部分中,要么使用
install -Dm 755
而不是
cp
,要么使用
chmod 755
它们。请注意,您只需要对常规文件执行此操作;默认情况下,符号链接具有模式
777

虽然并不理想,但您始终可以手动声明

Provides:
条目作为最后的手段。


P.s.我不确定当您安装到非标准路径(即在

%{_libdir}
之外)时自动检测是否有效。如果设置可执行位不起作用,您可能希望尝试安装到
%{buildroot}%{_bindir}

© www.soinside.com 2019 - 2024. All rights reserved.