После экспериментов с Gqrx решил попробовать SDR++. Бинарный пакет который предлагается для Debian 13 зависит от пакетов разработки и на моём ноутбуке конфликтует с Wine. Разбираться что там не так мне не хочется - проще перепаковать бинарный пакет sdrpp чтобы он зависел только от нужных библиотек.
Как найти от каких библиотек он зависит? В Debian есть dh_shlibdeps из debhelper, но он работает с локальными файлами. Т.е. если зависимость ещё не установлена, то dh_shlibdeps не сможет определить её.
Я распаковывал бинарный пакет и прошёлся ldd по всем исполняемым файлам и разделяемым библиотекам. Затем через apt-file нашёл в каких пакетах находятся отсутствующие зависимости и установил их.
$ PKG_FILE=sdrpp_debian_trixie_amd64.deb $ wget https://github.com/AlexandreRouma/SDRPlusPlus/releases/download/nightly/$PKG_FILE $ PKG_TMP=$(mktemp -d) $ PKG_BINARY="$PKG_TMP/binary" $ PKG_BUILD="$PKG_TMP/build" $ PKG_NAME=$(dpkg-deb -f $PKG_FILE Package) $ PKG_VERSION=$(dpkg-deb -f $PKG_FILE Version) $ mkdir -p $PKG_BINARY $PKG_BUILD $ dpkg-deb -R $PKG_FILE $PKG_BINARY $ env LD_LIBRARY_PATH=$PKG_BINARY/usr/lib ldd $PKG_BINARY/usr/bin/sdrpp linux-vdso.so.1 (0x00007f8810a5b000) libsdrpp_core.so => /tmp/tmp.R2Fe3Rsnwm/binary/usr/lib/libsdrpp_core.so (0x00007f88103ff000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f88101e7000) libglfw.so.3 => not found libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007f8810160000) libfftw3f.so.3 => /lib/x86_64-linux-gnu/libfftw3f.so.3 (0x00007f880fe00000) libvolk.so.3.2 => /lib/x86_64-linux-gnu/libvolk.so.3.2 (0x00007f880fa00000) libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f8810094000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f880f600000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f880f910000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8810067000) /lib64/ld-linux-x86-64.so.2 (0x00007f8810a5d000) libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f880fd47000) libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f880fd13000) liborc-0.4.so.0 => /lib/x86_64-linux-gnu/liborc-0.4.so.0 (0x00007f880f549000) libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f880f401000) libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f880f8e5000) libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f881005e000) libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f8810056000) $ apt-file search libglfw.so.3 libglfw3: /usr/lib/x86_64-linux-gnu/libglfw.so.3 libglfw3: /usr/lib/x86_64-linux-gnu/libglfw.so.3.4 $ sudo apt-get install libglfw3
Так нужно повторить для каждого "not found" в выводе ldd. Затем можно воспользоваться dh_shlibdeps для создания списка пакетов с этими зависимостями.
$ mkdir -p $PKG_BUILD/debian
$ cat > $PKG_BUILD/debian/control <<_EOF_
Source: ${PKG_NAME}
Section: hamradio
Priority: optional
Maintainer: Ryzerth
Standards-Version: 4.6.0
Build-Depends: debhelper-compat (= 13)
Package: ${PKG_NAME}
Architecture: amd64
Depends: \${shlibs:Depends}, \${misc:Depends}
Description: Bloat-free SDR receiver software
_EOF_
$ dch --create --package ${PKG_NAME} --newversion ${PKG_VERSION} --changelog $PKG_BUILD/debian/changelog Repackage
$ mkdir $PKG_BUILD/debian/$PKG_NAME
$ cp -a $PKG_BINARY/* $PKG_BUILD/debian/$PKG_NAME
$ cd $PKG_BUILD
$ dh_shlibdeps --package=$PKG_NAME
dpkg-shlibdeps: предупреждение: не удалось выделить имя и версию из библиотеки «libsdrpp_core.so»
dpkg-shlibdeps: предупреждение: не удалось выделить имя и версию из библиотеки «libsdrpp_core.so»
dpkg-shlibdeps: ошибка: cannot find library libsdrplay_api.so.3 needed by debian/sdrpp/usr/lib/sdrpp/plugins/sdrplay_source.so (ELF format: 'elf64-x86-64' abi: 'ELF:64:l:amd64:0'; RPATH: '')
dpkg-shlibdeps: предупреждение: задействованы отклонения - результат может быть неправильным
diversion by libc6 from: /lib64/ld-linux-x86-64.so.2
dpkg-shlibdeps: предупреждение: задействованы отклонения - результат может быть неправильным
diversion by libc6 to: /lib64/ld-linux-x86-64.so.2.usr-is-merged
dpkg-shlibdeps: предупреждение: cannot find library libfobos.so needed by debian/sdrpp/usr/lib/sdrpp/plugins/fobossdr_source.so (ELF format: 'elf64-x86-64' abi: 'ELF:64:l:amd64:0'; RPATH: '')
dpkg-shlibdeps: ошибка: cannot find library libhydrasdr.so.0 needed by debian/sdrpp/usr/lib/sdrpp/plugins/hydrasdr_source.so (ELF format: 'elf64-x86-64' abi: 'ELF:64:l:amd64:0'; RPATH: '')
dpkg-shlibdeps: предупреждение: cannot find library librfnm.so needed by debian/sdrpp/usr/lib/sdrpp/plugins/rfnm_source.so (ELF format: 'elf64-x86-64' abi: 'ELF:64:l:amd64:0'; RPATH: '')
dpkg-shlibdeps: ошибка: cannot find library libperseus-sdr.so.0 needed by debian/sdrpp/usr/lib/sdrpp/plugins/perseus_source.so (ELF format: 'elf64-x86-64' abi: 'ELF:64:l:amd64:0'; RPATH: '')
dpkg-shlibdeps: ошибка: невозможно продолжать из-за ошибок, указанных выше
Замечание: библиотеки не ищутся в других двоичных пакетах, в которых нет файла shlibs или symbols. Чтобы помочь dpkg-shlibdeps
найти персональные библиотеки, используйте -l.
dh_shlibdeps: error: dpkg-shlibdeps -Tdebian/sdrpp.substvars debian/sdrpp/usr/lib/libsdrpp_core.so debian/sdrpp/usr/lib/sdrpp/plugins/spyserver_source.so debian/sdrpp/usr/lib/sdrpp/plugins/spectran_http_source.so debian/sdrpp/usr/lib/sdrpp/plugins/sdrpp_server_source.so debian/sdrpp/usr/lib/sdrpp/plugins/sdrplay_source.so debian/sdrpp/usr/lib/sdrpp/plugins/scanner.so debian/sdrpp/usr/lib/sdrpp/plugins/rtl_tcp_source.so debian/sdrpp/usr/lib/sdrpp/plugins/rtl_sdr_source.so debian/sdrpp/usr/lib/sdrpp/plugins/rigctl_server.so debian/sdrpp/usr/lib/sdrpp/plugins/rigctl_client.so debian/sdrpp/usr/lib/sdrpp/plugins/rfspace_source.so debian/sdrpp/usr/lib/sdrpp/plugins/rfnm_source.so debian/sdrpp/usr/lib/sdrpp/plugins/recorder.so debian/sdrpp/usr/lib/sdrpp/plugins/radio.so debian/sdrpp/usr/lib/sdrpp/plugins/plutosdr_source.so debian/sdrpp/usr/lib/sdrpp/plugins/perseus_source.so debian/sdrpp/usr/lib/sdrpp/plugins/pager_decoder.so debian/sdrpp/usr/lib/sdrpp/plugins/new_portaudio_sink.so debian/sdrpp/usr/lib/sdrpp/plugins/network_source.so debian/sdrpp/usr/lib/sdrpp/plugins/network_sink.so debian/sdrpp/usr/lib/sdrpp/plugins/meteor_demodulator.so debian/sdrpp/usr/lib/sdrpp/plugins/m17_decoder.so debian/sdrpp/usr/lib/sdrpp/plugins/limesdr_source.so debian/sdrpp/usr/lib/sdrpp/plugins/iq_exporter.so debian/sdrpp/usr/lib/sdrpp/plugins/hydrasdr_source.so debian/sdrpp/usr/lib/sdrpp/plugins/hermes_source.so debian/sdrpp/usr/lib/sdrpp/plugins/hackrf_source.so debian/sdrpp/usr/lib/sdrpp/plugins/frequency_manager.so debian/sdrpp/usr/lib/sdrpp/plugins/fobossdr_source.so debian/sdrpp/usr/lib/sdrpp/plugins/file_source.so debian/sdrpp/usr/lib/sdrpp/plugins/discord_integration.so debian/sdrpp/usr/lib/sdrpp/plugins/bladerf_source.so debian/sdrpp/usr/lib/sdrpp/plugins/audio_source.so debian/sdrpp/usr/lib/sdrpp/plugins/audio_sink.so debian/sdrpp/usr/lib/sdrpp/plugins/atv_decoder.so debian/sdrpp/usr/lib/sdrpp/plugins/airspyhf_source.so debian/sdrpp/usr/lib/sdrpp/plugins/airspy_source.so debian/sdrpp/usr/bin/sdrpp returned exit code 2
dh_shlibdeps: error: Aborting due to earlier error
Итого имеем несколько плагинов у которых отсутствуют необходимые разделяемые библиотеки в бинарном пакете sdrpp и их не найти в архиве Debian (завёл SDRPlusPlus #1733 на это):
- libsdrplay_api.so.3 (debian/sdrpp/usr/lib/sdrpp/plugins/sdrplay_source.so)
- libfobos.so (debian/sdrpp/usr/lib/sdrpp/plugins/fobossdr_source.so)
- libhydrasdr.so.0 (debian/sdrpp/usr/lib/sdrpp/plugins/hydrasdr_source.so)
- librfnm.so (debian/sdrpp/usr/lib/sdrpp/plugins/rfnm_source.so)
- libperseus-sdr.so.0 (debian/sdrpp/usr/lib/sdrpp/plugins/perseus_source.so)
У меня нет "железа" для которого нужны эти плагины и собирать недостающие библиотеки нет никакого желания - просто удаляю сломанные плагины.
$ rm $PKG_BUILD/debian/sdrpp/usr/lib/sdrpp/plugins/{sdrplay_source.so,fobossdr_source.so,hydrasdr_source.so,rfnm_source.so,perseus_source.so}
$ dh_shlibdeps --package=$PKG_NAME
dpkg-shlibdeps: предупреждение: не удалось выделить имя и версию из библиотеки «libsdrpp_core.so»
dpkg-shlibdeps: предупреждение: не удалось выделить имя и версию из библиотеки «libsdrpp_core.so»
dpkg-shlibdeps: предупреждение: задействованы отклонения - результат может быть неправильным
diversion by libc6 from: /lib64/ld-linux-x86-64.so.2
dpkg-shlibdeps: предупреждение: задействованы отклонения - результат может быть неправильным
diversion by libc6 to: /lib64/ld-linux-x86-64.so.2.usr-is-merged
Повторный запуск dh_shlibdeps завершился без ошибок и можно собирать пакет дальше.
$ fakeroot dh_gencontrol --package=$PKG_NAME
$ fakeroot dpkg-deb -b debian/$PKG_NAME ${PKG_NAME}_${PKG_VERSION}_amd64_fixed.deb
$ dpkg -I ${PKG_NAME}_${PKG_VERSION}_amd64_fixed.deb
новый пакет Debian, версия 2.0.
размер 2106380 байт(а): управляющий архив длиной 572 байт(а).
629 bytes, 9 lines control
Package: sdrpp
Version: 1.2.1-1487
Architecture: amd64
Maintainer: Ryzerth
Installed-Size: 8941
Depends: libad9361-0 (>= 0.3), libairspy0 (>= 1.0.10), libairspyhf1 (>= 1.6.8), libbladerf2 (>= 0.2024.05), libc6 (>= 2.38), libcodec2-1.2 (>= 1.2.0), libfftw3-single3 (>= 3.3.10), libgcc-s1 (>= 3.4), libgl1, libglfw3 (>= 3.3), libhackrf0 (>= 2024.02.1), libiio0 (>= 0.26), liblimesuite23.11-1 (>= 23.11.0+dfsg), libportaudio2 (>= 19+svn20101113), librtaudio7 (>= 6.0.1~ds), librtlsdr0, libstdc++6 (>= 14), libvolk3.2 (>= 3.2.0), libzstd1 (>= 1.5.5)
Section: hamradio
Priority: optional
Description: Bloat-free SDR receiver software
В результате перепаковки этот пакет будет иметь правильные зависимости и не содержать "сломанные" плагины для которых забыли положить разделяемые библиотеки.
Комментариев нет:
Отправить комментарий