我正在尝试创建一个 .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