큰 그림: 저는 맞춤형 PHP를 위한 사내 rpm을 구축하고 있습니다. 작동하는 rpm을 만들었지만 생성된 라이브러리 요구 사항이 "nodeps"를 사용하지 않으면 충족되지 않는 것 같습니다. 다른 요구 사항을 보장하기 위해 이를 피하고 싶습니다.예향후 사용 시 발생합니다.
이 문제의 원인은 다음과 같습니다. (Linux에서는 일반적으로 독점 소프트웨어로 귀결됩니다.)... Oracle 클라이언트 라이브러리입니다. 내가 구축한 RPM은 "제공"을 제대로 등록하지 않았기 때문에 RPM은 자신이 이 라이브러리 기능을 제공한다는 것을 알았습니다.
%prep
%setup -q -n %{shortname}-%{version}
%build
%install
mkdir -p %{buildroot}/%{prefix}
mkdir -p %{buildroot}/%{_sysconfdir}/profile.d
mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d
cp -a %{_builddir}/%{shortname}-%{version} %{buildroot}/%{prefix}/
%{__install} -m 644 -p %{SOURCE1} \
$RPM_BUILD_ROOT%{_sysconfdir}/profile.d/oracle-instantclient.sh
echo %{prefix}/%{shortname}-%{version}>%{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}.conf
rm -fv /opt/%{shortname}-%{version} /opt/%{shortname} /thisDir/%{shortname}-%{version} /thisDir/%{shortname}
ln -sv %{prefix}/%{shortname}-%{version} /opt/
ln -sv /opt/%{shortname}-%{version} /opt/%{shortname}
ln -sv %{prefix}/%{shortname}-%{version} /thisDir/
ln -sv /thisDir/%{shortname}-%{version} /thisDir/%{shortname}
chown -h user:user /opt/%{shortname}-%{version} /opt/%{shortname} /thisDir/%{shortname}-%{version} /thisDir/%{shortname}
%clean
rm -rf %{buildroot}
%files
###%defattr(-,root,root,0755)
%{prefix}/%{shortname}-%{version}
/%{_sysconfdir}/profile.d/%{name}.sh
/%{_sysconfdir}/ld.so.conf.d/%{name}.conf
%post -p /sbin/ldconfig
%postun
rm -f /%{_sysconfdir}/profile.d/%{name}.sh /%{_sysconfdir}/ld.so.conf.d/%{name}.conf
rm -rfv /opt/%{shortname}-%{version} /opt/%{shortname} /thisDir/%{shortname}-%{version} /thisDir/%{shortname} %{_sysconfdir}/profile.d/%{source1}
ldconfig
rm -rf %{prefix}/%{shortname}-%{version}
rm -fv /opt/%{shortname}-%{version}
rm -fv /opt/%{shortname}
rm -fv /thisDir/%{shortname}-%{version}
rm -fv /thisDir/%{shortname}
rm -fv %{_sysconfdir}/profile.d/%{name}.sh
/sbin/ldconfig
이들 중 대부분은 우리 환경 전체에서 사용하는 표준 위치에 대한 심볼릭 링크를 제공하는 스크립트일 뿐입니다. 기능적인 부분은 ldconfig입니다. rpmbuild가 "제공"되도록 하기 위해 내가 무엇을 잘못하고 있습니까? Cent6용 최신 rpmbuild에서 이것이 어떻게 작동하는지에 대한 문서를 찾는 데 어려움을 겪고 있습니다.
답변1
Oracle 라이브러리의 soname을 패키지의 Provide: 로 자동 추가하려고 합니까?
가장 쉬운 방법은 *.spec 파일에 Provide:를 직접 입력하는 것입니다.
자동 추출을 원하는 경우 rpmdeps를 사용하여 다음과 같이 soname 종속성을 추출할 수 있습니다.
$ echo /lib64/libpopt.so.0.0.0 | /usr/lib/rpm/rpmdeps -P
libpopt.so.0()(64bit)
libpopt.so.0(LIBPOPT_0)(64bit)
다음과 같이 *.spec 파일의 %(...) 파이프에서 위를 실행합니다.
Provides: %(echo /lib64/libpopt.so.0.0.0 | /usr/lib/rpm/rpmdeps -P)
필요에 따라 Oracle 라이브러리의 경로를 변경합니다.