RPM 如何处理文件位置?

RPM 如何处理文件位置?

我正在尝试创建一个 .spec 文件,用于将 mapserver 创建为 rpm 包。我正在 RHEL6 64 位服务器上构建。

在 rpm 文件中,我可以使用一些目录引用,例如%{_libdir}%{_bindir}%{_libexecdir}。这些目录路径在哪里配置,哪些可以使用?

我的 rpm 规范的 %files 部分看起来像这样:

%files
%defattr(-,root,root)
%doc README COMMITERS GD-COPYING HISTORY.TXT
%doc INSTALL MIGRATION_GUIDE.txt
%doc symbols tests
%doc fonts
%{_bindir}/*
%{_libdir}/libmapserver*.so
%{_libexecdir}/mapserv

但是当我运行我的构建时,我收到错误:

File not found by glob: /home/kfadm/rpmbuild/BUILDROOT/mapserver-6.2.1-3.x86_64/usr/lib64/libmapserver*.so
File not found: /home/kfadm/rpmbuild/BUILDROOT/mapserver-6.2.1-3.x86_64/usr/libexec/mapserv

看起来丢失的文件被安装在

/home/kfadm/rpmbuild/BUILDROOT/mapserver-6.2.1-3.x86_64/usr/lib/libmapserver-6.2.1.so
/home/kfadm/rpmbuild/BUILDROOT/mapserver-6.2.1-3.x86_64/usr/lib/libmapserver.la
/home/kfadm/rpmbuild/BUILDROOT/mapserver-6.2.1-3.x86_64/usr/lib/libmapserver.so
/home/kfadm/rpmbuild/BUILDROOT/mapserver-6.2.1-3.x86_64/usr/lib/debug/usr/lib/libmapserver-6.2.1.so.debug
/home/kfadm/rpmbuild/BUILDROOT/mapserver-6.2.1-3.x86_64/usr/lib/debug/usr/lib/libmapserver.so.debug

/home/kfadm/rpmbuild/BUILDROOT/mapserver-6.2.1-3.x86_64/usr/bin/mapserv
/home/kfadm/rpmbuild/BUILDROOT/mapserver-6.2.1-3.x86_64/var/www/cgi-bin/mapserv

如何修复 rpm 规范以在正确的路径中找到文件?

答案1

这个问题源于 RHEL 希望将 64 位库安装到 /usr/lib64 目录,而不是默认的 /usr/lib 目录。

mapserver 6.2.1 使用 autoconf,并包含 --libdir 选项。在您的 .spec 文件中修改 ./configure 命令:%configure --libdir=$RPM_BUILD_ROOT%{_libdir}

答案2

我遇到这个问题是因为缺少创建该特定目录的安装命令。一旦我在下面添加了安装命令%install,就rpm成功生成了

install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/php.d

相关内容