Я изменил .spec
из исходного RPM, доступного в репозитории 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}
Теперь я не вижу Требуется в файле спецификации, однако исходный RPM все еще пытается установить некоторые дополнительные пакеты. Где эти зависимости указаны? Это сделано в configure
сценарий?
Исходный RPM:
# 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:
# 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
Изменить: Вт 27 марта 20:55:48 UTC 2018
Итак, я установил кастомную версию и repoquery
все еще показывает speex
и другие, хотя они не требовались во время yum
монтаж. Откуда берется эта информация?
# 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
Одна из удобных / раздражающих вещей, которые RPM делает для вас, - это автоматическое обнаружение Provides и Requires. Существует документированный способ фильтровать его полезность. Например, эти строки в вашем файле спецификации эффективно удалят прямые зависимости от трех библиотек, которые вы пытаетесь исключить:
# https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering
%global _privatelibs lib(gsmcodec|srtp|speex)[.]so.*
%global __provides_exclude ^(%{_privatelibs})$
%global __requires_exclude ^(%{_privatelibs})$
Вы можете убедиться, что они исчезли, проверив сгенерированный файл rpm:
$ 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
Однако, если вы используете repoquery
, вы получаете результаты опроса репозитория исходных пакетов вместо собственной пользовательской сборки.
Поскольку я считаю, что исходный код pjsip связывает эти библиотеки, проверьте раздел установки в спецификации, чтобы увидеть, не включены ли локально созданные библиотеки для этих зависимостей в двоичный RPM. Скорее всего, что-то вроде определяется автоматические запросы, и, поскольку они не включены в RPM, вместо них включаются внешние RPM. Вы также можете попробовать отключить --enable-shared
построить монолитный двоичный файл
# 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