rpmbuild registro da biblioteca para 'requer'

2

Imagem grande: Eu estou construindo um rpm interno para um php personalizado. Eu construo um rpm que funciona, mas gero os requisitos de biblioteca que não consigo encontrar sem usar 'nodeps', o que eu quero evitar para garantir que outros requisitos sejam atendidos no uso futuro.

A causa deste problema: (Como de costume no linux tudo se resume ao software proprietário) ... é a biblioteca cliente da Oracle. O RPM que eu criei para ele não está registrando seu 'fornecimento' corretamente para que o RPM entenda que ele fornece esse recurso de biblioteca.

%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

A maior parte disso é apenas um script que fornece links simbólicos que usamos para locais padrão em todo o nosso ambiente; a parte funcional é o ldconfig. O que estou fazendo errado para garantir que o rpmbuild ative o 'fornece'? Estou tendo muita dificuldade em encontrar documentação sobre como isso funciona no rpmbuild contemporâneo no Cent6.

    
por pozcircuitboy 27.11.2013 / 18:55

1 resposta

3

Você está tentando adicionar automaticamente o soname de uma biblioteca Oracle como um Provide: deste pacote?

O método mais simples é apenas digitar o campo Fornece: diretamente no arquivo * .spec.

Se você deseja automatizar a extração, você pode usar rpmdeps para extraia as dependências do soname assim:

$ echo /lib64/libpopt.so.0.0.0 | /usr/lib/rpm/rpmdeps -P
libpopt.so.0()(64bit)
libpopt.so.0(LIBPOPT_0)(64bit)

Execute o acima em um pipe% (…) como este em seu arquivo * .spec:

Provides: %(echo /lib64/libpopt.so.0.0.0 | /usr/lib/rpm/rpmdeps -P)

Altere os caminhos para suas bibliotecas Oracle conforme apropriado.

    
por 22.09.2014 / 16:45