dependências de pacote RPM

3

Eu modifiquei o arquivo .spec de um RPM de origem disponível no repositório EPEL.

# yumdownloader pjproject
# yumdownloader --source pjproject

# diff -u pjproject.spec{.orig,}
--- pjproject.spec.orig 2018-03-27 15:42:37.780641678 +0100
+++ pjproject.spec  2018-03-27 12:54:54.298556634 +0100
@@ -24,13 +24,13 @@


 BuildRequires: alsa-lib-devel
-BuildRequires: gsm-devel
-BuildRequires: libsrtp-devel
+#BuildRequires: gsm-devel
+#BuildRequires: libsrtp-devel
 BuildRequires: libuuid-devel
 BuildRequires: openssl-devel
 BuildRequires: pkgconfig
 BuildRequires: portaudio-devel
-BuildRequires: speex-devel
+#BuildRequires: speex-devel


 %description
@@ -76,23 +76,23 @@
 rm -rf third_party/bdsound
 rm -rf third_party/bin
 rm -rf third_party/g7221
-rm -rf third_party/gsm
+#rm -rf third_party/gsm
 rm -rf third_party/milenage
 rm -rf third_party/mp3
 rm -rf third_party/portaudio
 rm -rf third_party/resample
-rm -rf third_party/speex
-rm -rf third_party/srtp
+#rm -rf third_party/speex
+#rm -rf third_party/srtp
 rm -rf third_party/ilbc
 rm -rf third_party/build/baseclasses
 rm -rf third_party/build/g7221
-rm -rf third_party/build/gsm
+#rm -rf third_party/build/gsm
 rm -rf third_party/build/milenage
 rm -rf third_party/build/portaudio/src
 rm -rf third_party/build/resample
 rm -rf third_party/build/samplerate
-rm -rf third_party/build/speex
-rm -rf third_party/build/srtp
+#rm -rf third_party/build/speex
+#rm -rf third_party/build/srtp
 rm -rf third_party/build/ilbc

 %build
@@ -101,12 +101,8 @@
 # that functionality, and it made it easier to ensure that we don't 
 # bundle any unnecessary libraries.  Please contact me if your project
 # needs this support, and I'll re-enable it
-export CFLAGS="-DPJ_HAS_IPV6=1 ${ARCHFLAGS} %{optflags}"
+export CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1 ${ARCHFLAGS} %{optflags}"
 %configure --enable-shared        \
-           --with-external-gsm    \
-           --with-external-pa     \
-           --with-external-speex  \
-           --with-external-srtp   \
            --disable-opencore-amr \
            --disable-resample     \
            --disable-sound        \
@@ -116,7 +112,7 @@
            --without-libyuv       \
            --disable-g7221-codec  

-export CFLAGS="-DPJ_HAS_IPV6=1 %{optflags}"
+export CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1 %{optflags}"
 make %{?_smp_mflags} dep
 make %{?_smp_mflags}

Agora, não vejo nenhuma Requer opção no arquivo de especificação, no entanto, o RPM original ainda tenta instale alguns pacotes adicionais. Onde essas dependências são especificadas? Isso é feito no script configure ?

RPM original:

# yum install pjproject-2.3-6.el7.x86_64.rpm
Loaded plugins: fastestmirror
Examining pjproject-2.3-6.el7.x86_64.rpm: pjproject-2.3-6.el7.x86_64
Marking pjproject-2.3-6.el7.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package pjproject.x86_64 0:2.3-6.el7 will be installed
--> Processing Dependency: libgsm.so.1()(64bit) for package: pjproject-2.3-6.el7.x86_64
Loading mirror speeds from cached hostfile
 * base: mirror.econdc.com
 * epel: mirror.netweaver.uk
 * extras: mozart.ee.ic.ac.uk
 * ius: mirrors.ircam.fr
 * updates: mirror.econdc.com
--> Processing Dependency: libspeex.so.1()(64bit) for package: pjproject-2.3-6.el7.x86_64
--> Processing Dependency: libspeexdsp.so.1()(64bit) for package: pjproject-2.3-6.el7.x86_64
--> Processing Dependency: libsrtp.so.0()(64bit) for package: pjproject-2.3-6.el7.x86_64
--> Running transaction check
---> Package gsm.x86_64 0:1.0.13-11.el7 will be installed
---> Package libsrtp.x86_64 0:1.4.4-10.20101004cvs.el7 will be installed
---> Package speex.x86_64 0:1.2-0.19.rc1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================================================================================================================
 Package                                    Arch                                    Version                                                     Repository                                                    Size
===================================================================================================================================================================================================================
Installing:
 pjproject                                  x86_64                                  2.3-6.el7                                                   /pjproject-2.3-6.el7.x86_64                                  2.1 M
Installing for dependencies:
 gsm                                        x86_64                                  1.0.13-11.el7                                               base                                                          30 k
 libsrtp                                    x86_64                                  1.4.4-10.20101004cvs.el7                                    base                                                         275 k
 speex                                      x86_64                                  1.2-0.19.rc1.el7                                            base                                                          98 k

Transaction Summary
===================================================================================================================================================================================================================
Install  1 Package (+3 Dependent packages)

RPM personalizada:

# yum install pjproject-2.3-7.el7.centos.x86_64.rpm 
Loaded plugins: fastestmirror
Examining /var/lib/mock/epel-7-x86_64/result/pjproject-2.3-7.el7.centos.x86_64.rpm: pjproject-2.3-7.el7.centos.x86_64
Marking /var/lib/mock/epel-7-x86_64/result/pjproject-2.3-7.el7.centos.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package pjproject.x86_64 0:2.3-7.el7.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================================================================================================================
 Package                                    Arch                                    Version                                              Repository                                                           Size
===================================================================================================================================================================================================================
Installing:
 pjproject                                  x86_64                                  2.3-7.el7.centos                                     /pjproject-2.3-7.el7.centos.x86_64                                  2.3 M

Transaction Summary
===================================================================================================================================================================================================================
Install  1 Package

Total size: 2.3 M
Installed size: 2.3 M

Edit: terça 27 mar 20:55:48 UTC 2018

Portanto, instalei a versão personalizada e repoquery ainda mostra speex e outros, embora eles não tenham sido necessários durante a instalação de yum . De onde esta informação é retirada?

# repoquery --requires --resolve pjproject
speex-0:1.2-0.19.rc1.el7.x86_64
libstdc++-0:4.8.5-16.el7_4.2.x86_64
libgcc-0:4.8.5-16.el7_4.2.x86_64
glibc-0:2.17-196.el7_4.2.i686
libuuid-0:2.23.2-43.el7_4.2.x86_64
gsm-0:1.0.13-11.el7.x86_64
glibc-0:2.17-196.el7.x86_64
libsrtp-0:1.4.4-10.20101004cvs.el7.x86_64
openssl-libs-1:1.0.2k-8.el7.x86_64
    
por HTF 27.03.2018 / 17:06

3 respostas

3

Uma das coisas úteis / irritantes que o RPM faz para você é a descoberta automática de Fornece e Requer. Existe uma maneira documentada de filtrar sua utilidade . Por exemplo, essas linhas em seu arquivo de especificações removerão efetivamente as dependências diretas nas três bibliotecas que você está tentando eliminar:

# https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering
%global _privatelibs lib(gsmcodec|srtp|speex)[.]so.*
%global __provides_exclude ^(%{_privatelibs})$
%global __requires_exclude ^(%{_privatelibs})$

Você pode verificar se eles sumiram, inspecionando o arquivo rpm gerado:

$ rpm -q --provides -p ../RPMS/x86_64/pjproject-2.3-6.el7.centos.x86_64.rpm libpj.so.2()(64bit) libpjlib-util.so.2()(64bit) libpjmedia-audiodev.so.2()(64bit) libpjmedia-codec.so.2()(64bit) libpjmedia-videodev.so.2()(64bit) libpjmedia.so.2()(64bit) libpjnath.so.2()(64bit) libpjsip-simple.so.2()(64bit) libpjsip-ua.so.2()(64bit) libpjsip.so.2()(64bit) libpjsua.so.2()(64bit) libpjsua2.so.2()(64bit) pjproject = 2.3-6.el7.centos pjproject(x86-64) = 2.3-6.el7.centos

No entanto, se você usar repoquery , obterá os resultados de interrogar o repositório de pacotes upstream em vez de sua própria compilação personalizada.

    
por 01.04.2018 / 21:38
0

Como acredito que a fonte do pjsip agrupa essas bibliotecas, verifique sua seção Instalar na especificação para ver se as bibliotecas localmente construídas para essas deps estão sendo deixadas de fora do RPM binário. É provável que haja algo como se houvesse requisitos automáticos sendo determinados e, como eles são deixados de fora do RPM, os RPMs externos estão sendo incluídos. Você também pode tentar desabilitar --enable-shared para construir um binário monolítico

    
por 29.03.2018 / 17:26
-1
# repoquery --requires --resolve pjproject
speex-0:1.2-0.19.rc1.el7.x86_64
libstdc++-0:4.8.5-16.el7_4.2.x86_64
libgcc-0:4.8.5-16.el7_4.2.x86_64
glibc-0:2.17-196.el7_4.2.i686
libuuid-0:2.23.2-43.el7_4.2.x86_64
gsm-0:1.0.13-11.el7.x86_64
glibc-0:2.17-196.el7.x86_64
libsrtp-0:1.4.4-10.20101004cvs.el7.x86_64
openssl-libs-1:1.0.2k-8.el7.x86_64
    
por 05.04.2018 / 08:42

Tags