RPM은 파일 위치를 어떻게 처리합니까?

RPM은 파일 위치를 어떻게 처리합니까?

rpm 패키지로 mapserver를 생성하기 위한 .spec 파일을 생성하려고 합니다. 저는 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

이 문제는 64비트 라이브러리를 기본 /usr/lib 디렉토리 대신 /usr/lib64 디렉토리에 설치하려고 하는 RHEL에서 발생합니다.

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

관련 정보