Saturday, 14 January 2023

Faking RPM db dependancies

The fedora packager manager takes care of all your dependancies but how do we deal with user compiled binaries and misisng dependencies?
$ sudo dnf install simplescreenrecorder ... Error: Problem: conflicting requests - package simplescreenrecorder-0.4.3-3.fc35.x86_64 requires libavcodec.so.58()(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.3-3.fc35.x86_64 requires libavcodec.so.58(LIBAVCODEC_58)(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.3-3.fc35.x86_64 requires libavformat.so.58()(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.3-3.fc35.x86_64 requires libavformat.so.58(LIBAVFORMAT_58)(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.3-3.fc35.x86_64 requires libswscale.so.5()(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.3-3.fc35.x86_64 requires libswscale.so.5(LIBSWSCALE_5)(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.4-1.fc35.x86_64 requires libavcodec.so.58()(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.4-1.fc35.x86_64 requires libavcodec.so.58(LIBAVCODEC_58)(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.4-1.fc35.x86_64 requires libavformat.so.58()(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.4-1.fc35.x86_64 requires libavformat.so.58(LIBAVFORMAT_58)(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.4-1.fc35.x86_64 requires libswscale.so.5()(64bit), but none of the providers can be installed - package simplescreenrecorder-0.4.4-1.fc35.x86_64 requires libswscale.so.5(LIBSWSCALE_5)(64bit), but none of the providers can be installed - package ffmpeg-libs-4.4-7.fc35.x86_64 is filtered out by exclude filtering - package ffmpeg-libs-4.4.3-1.fc35.x86_64 is filtered out by exclude filtering (try to add '--skip-broken' to skip uninstallable packages) $ dnf reinstall simplescreenrecorder -y --downloadonly --downloaddir=.
This shows that simplescreenrecorder has unresolved ffmpeg 4.x runtime dependancies - on this machine I have ffmpeg 5 and self compiled ffmpeg 4 (to support FDK). So at this point I have two options: install the ffmpeg-lib-4.x package from RPMfusion and then overwrite those provided libs with my self compiled libs but there is another way: to fake the dependancies known to the RPM db.

# https://github.com/larsks/fakeprovide $ sudo curl -L https://raw.githubusercontent.com/larsks/fakeprovide/44698c8b398bb5f8071e1dc3f63c3f275861a250/fakeprovide -o /usr/local/bin && sudo chmod a+x /usr/local/bin/fakeprovide $ sudo dnf install rpm-build
With the required utils, we can create a dummy/fake rpm that declares the required depedancies as above and install.
$ fakeprovide -a x86_64 \ -P"libavformat.so.58()(64bit)" \ -P"libavformat.so.58(LIBAVFORMAT_58)(64bit)" \ -P"libswscale.so.5()(64bit)" \ -P"libswscale.so.5(LIBSWSCALE_5)(64bit)" \ -P"libavcodec.so.58()(64bit)" \ -P"libavcodec.so.58(LIBAVCODEC_58)(64bit)" \ -v 4.x ffmpeg-libs # alternative take dependancy output of dnf install above # cat > /tmp/deps << EOF ... # to generate the -P.... lines # $(grep requires /tmp/deps | sed -e 's/^.*requires \(.*\), but non.*$/-P"\1" \\/g') # examine what the generate rpm $ rpm -q --provides -i ./fakeprovide-ffmpeg-libs-4.x-1.fc35.x86_64.rpm fakeprovide-ffmpeg-libs = 4.x-1.fc35 fakeprovide-ffmpeg-libs(x86-64) = 4.x-1.fc35 ffmpeg-libs libavcodec.so.58()(64bit) libavcodec.so.58(LIBAVCODEC_58)(64bit) libavformat.so.58()(64bit) libavformat.so.58(LIBAVFORMAT_58)(64bit) libswscale.so.5()(64bit) libswscale.so.5(LIBSWSCALE_5)(64bit) Name : fakeprovide-ffmpeg-libs Version : 4.x Release : 1.fc35 Architecture: x86_64 Install Date: (not installed) Group : Fake Size : 108 License : GPL Signature : (none) Source RPM : fakeprovide-ffmpeg-libs-4.x-1.fc35.src.rpm Build Date : Sat 14 Jan 2023 12:48:48 GMT Build Host : yoga Summary : Fake provide for ffmpeg-libs. Description : Fake provide for ffmpeg-libs. $ sudo rpm -i ./fakeprovide-ffmpeg-libs-4.x-1.fc35.x86_64.rpm ./simplescreenrecorder*.rpm

No comments:

Post a Comment