fourier-debian: Path A — ffmpeg into /opt/fourier prefix
Stock Debian trixie ships FFmpeg 7.1 (libavcodec.so.61), our fork
ships FFmpeg 8.1 (libavcodec.so.62) — different SONAMEs, NOT a
drop-in for trixie's libavcodec61-consuming desktop. Previous
Conflicts: libavcodec61, libavformat61, ... triggered apt to remove
~50 packages (kde-plasma-desktop, vlc, dolphin, ...) when a user
just wanted ffmpeg-v4l2-request-fourier installed alongside.
This commit:
1. ffmpeg-v4l2-request-fourier (pkgrel=2):
- --prefix=/opt/fourier (instead of /usr)
- --extra-ldexeflags / --extra-ldsoflags: -Wl,-rpath,/opt/fourier/lib
so /opt/fourier/bin/ffmpeg finds its own libs without external help
- Ship /etc/ld.so.conf.d/fourier.conf with /opt/fourier/lib + ldconfig
in postinst/postrm. dlopen-by-SONAME consumers (firefox, daedalus)
find libavcodec.so.62 via ld.so cache without LD_LIBRARY_PATH.
- Drop ALL Conflicts/Replaces/Provides for libav* / libpostproc /
libsw* — no SONAME clash with stock libavcodec61, no reason to
evict anything.
- /usr/bin/ffmpeg-fourier + ffprobe-fourier convenience symlinks.
2. daedalus-v4l2 (pkgrel=2):
- Depends: ffmpeg-v4l2-request-fourier (>= 2:8.1+rfourier)
instead of stock 'ffmpeg (>= 7.1)'. The daedalus binary was
linked against libavcodec.so.62 at build time (CI runner had
marfrit/ffmpeg-v4l2-request-fourier installed); at runtime it
needs the .so.62 that only the fourier pkg provides.
Not touched:
- libva-v4l2-request-fourier: ships only v4l2_request_drv_video.so
at /usr/lib/<triplet>/dri/ which libva dlopens by file pattern.
Path A would break the lookup unless every consumer launcher sets
LIBVA_DRIVERS_PATH. Driver name is unique; no conflict. STAY.
- mpv-fourier: Depends already correctly bound to fourier ffmpeg.
Will receive libavcodec.so.62 via the ld.so.cache mechanism
above without recipe changes.
This commit is contained in:
+67
-23
@@ -8,14 +8,18 @@
|
||||
# mpv-fourier (and the kdirect bit-exact reference test rig) work
|
||||
# end-to-end without a stock-Debian FFmpeg fallback.
|
||||
#
|
||||
# Conflicts: ffmpeg, libav* — this is a drop-in replacement. Pi 5 /
|
||||
# CM5 (BCM2712) hosts using daedalus_v4l2 + libva-v4l2-request-fourier
|
||||
# DON'T strictly need this package (stock Debian ffmpeg + libva path
|
||||
# is sufficient for the VAAPI route), but the kdirect bit-exact
|
||||
# reference + firefox-fourier / mpv-fourier consumers do.
|
||||
# **Private prefix /opt/fourier** (Path A per fourier-debian
|
||||
# architecture discussion 2026-05-19). Stock Debian trixie ships
|
||||
# FFmpeg 7.1.x = libavcodec.so.61; this package ships FFmpeg 8.1 =
|
||||
# libavcodec.so.62 — different SOVERSION, NOT a drop-in for trixie's
|
||||
# KDE/VLC/etc. Living in /opt/fourier/lib keeps the stock system
|
||||
# intact; only fourier-aware consumers (firefox-fourier, mpv-fourier,
|
||||
# daedalus-v4l2) RPATH into /opt/fourier/lib. Postinst drops an
|
||||
# ld.so.conf.d entry so dlopen-based consumers (firefox at runtime)
|
||||
# find the libs by SONAME without LD_LIBRARY_PATH wrappers.
|
||||
#
|
||||
# Big build: 25-40 min on a runner. Output is a single .deb that
|
||||
# bundles ffmpeg/ffprobe + libavcodec.so.61 + libavformat.so.61 etc.
|
||||
# bundles ffmpeg/ffprobe + libavcodec.so.62 + libavformat.so.62 etc.
|
||||
# all together — no split per-library subpackages. Easier to consume,
|
||||
# trades off finer-grained downgrades.
|
||||
#
|
||||
@@ -29,7 +33,7 @@ FFMPEG_VERSION=8.1
|
||||
# epoch 2 matches Debian's stock ffmpeg (currently 7:7.1.x in trixie);
|
||||
# +rfourier suffix to avoid colliding with upstream/Debian rebuilds.
|
||||
PKGVER=2:${FFMPEG_VERSION}+rfourier+gb57fbbe
|
||||
PKGREL=1
|
||||
PKGREL=2 # pkgrel=2 — Path A move to /opt/fourier prefix (2026-05-19)
|
||||
|
||||
HERE=$(dirname "$(readlink -f "$0")")
|
||||
|
||||
@@ -60,10 +64,15 @@ patch -Np1 -i "$HERE/0002-nv15-to-p010-unpack.patch"
|
||||
# JACK, GSM, Speex) — not needed on the Fourier fleet, keeps the .deb
|
||||
# smaller and the dependency graph tighter.
|
||||
./configure \
|
||||
--prefix=/usr \
|
||||
--libdir=/usr/lib/aarch64-linux-gnu \
|
||||
--shlibdir=/usr/lib/aarch64-linux-gnu \
|
||||
--incdir=/usr/include/aarch64-linux-gnu \
|
||||
--prefix=/opt/fourier \
|
||||
--bindir=/opt/fourier/bin \
|
||||
--libdir=/opt/fourier/lib \
|
||||
--shlibdir=/opt/fourier/lib \
|
||||
--incdir=/opt/fourier/include \
|
||||
--datadir=/opt/fourier/share/ffmpeg \
|
||||
--mandir=/opt/fourier/share/man \
|
||||
--extra-ldexeflags='-Wl,-rpath,/opt/fourier/lib' \
|
||||
--extra-ldsoflags='-Wl,-rpath,/opt/fourier/lib' \
|
||||
--disable-debug \
|
||||
--disable-static \
|
||||
--disable-doc \
|
||||
@@ -104,7 +113,23 @@ make tools/qt-faststart
|
||||
# Stage
|
||||
ROOT="$work/pkgroot"
|
||||
make DESTDIR="$ROOT" install
|
||||
install -Dm755 tools/qt-faststart "$ROOT/usr/bin/qt-faststart"
|
||||
install -Dm755 tools/qt-faststart "$ROOT/opt/fourier/bin/qt-faststart"
|
||||
|
||||
# ld.so.conf.d entry so dlopen-based consumers (firefox-fourier at
|
||||
# runtime) find /opt/fourier/lib/libavcodec.so.62 by SONAME without an
|
||||
# LD_LIBRARY_PATH wrapper. No risk of contaminating stock binaries:
|
||||
# stock KDE/VLC link against libavcodec.so.61 (different SONAME), so
|
||||
# the loader never sees our .so.62 as a match for their .so.61.
|
||||
install -Dm644 /dev/stdin "$ROOT/etc/ld.so.conf.d/fourier.conf" <<EOF
|
||||
# fourier campaign: FFmpeg 8.1 fork + libVA fork in private prefix.
|
||||
/opt/fourier/lib
|
||||
EOF
|
||||
|
||||
# Optional /usr/bin shims so users can call ffmpeg-fourier without
|
||||
# remembering the /opt path. No conflict with stock /usr/bin/ffmpeg.
|
||||
install -d "$ROOT/usr/bin"
|
||||
ln -sf /opt/fourier/bin/ffmpeg "$ROOT/usr/bin/ffmpeg-fourier"
|
||||
ln -sf /opt/fourier/bin/ffprobe "$ROOT/usr/bin/ffprobe-fourier"
|
||||
|
||||
# Doc
|
||||
mkdir -p "$ROOT/usr/share/doc/ffmpeg-v4l2-request-fourier" "$ROOT/DEBIAN"
|
||||
@@ -143,19 +168,9 @@ Depends: libc6,
|
||||
libv4l-0,
|
||||
libva2,
|
||||
libva-drm2
|
||||
Conflicts: ffmpeg, libavcodec61, libavformat61, libavutil59,
|
||||
libswresample5, libswscale8, libavdevice61, libavfilter10,
|
||||
libpostproc58
|
||||
Replaces: ffmpeg, libavcodec61, libavformat61, libavutil59,
|
||||
libswresample5, libswscale8, libavdevice61, libavfilter10,
|
||||
libpostproc58
|
||||
Provides: ffmpeg (= ${PKGVER}-${PKGREL}),
|
||||
libavcodec.so.61,
|
||||
libavformat.so.61,
|
||||
libavutil.so.59
|
||||
Maintainer: Markus Fritsche <mfritsche@reauktion.de>
|
||||
Homepage: https://github.com/Kwiboo/FFmpeg
|
||||
Description: FFmpeg with V4L2 Request API hwaccel (Kwiboo fork)
|
||||
Description: FFmpeg with V4L2 Request API hwaccel (Kwiboo fork, /opt/fourier prefix)
|
||||
FFmpeg ${FFMPEG_VERSION} patched with the V4L2 Request API stateless
|
||||
video decoder hwaccel — Kwiboo's long-running rebase of Jernej
|
||||
Škrabec's v4l2-request patchset onto FFmpeg release tags.
|
||||
@@ -167,11 +182,40 @@ Description: FFmpeg with V4L2 Request API hwaccel (Kwiboo fork)
|
||||
backing FFmpeg, and as the kdirect bit-exact reference in libva-v4l2-
|
||||
request-fourier validation.
|
||||
.
|
||||
INSTALLED TO /opt/fourier (NOT /usr): this is FFmpeg 8.1 (libav*.so.62)
|
||||
sitting alongside Debian trixie's stock FFmpeg 7.1 (libav*.so.61) —
|
||||
different SONAMEs, no symbol clash. Consumer binaries RPATH into
|
||||
/opt/fourier/lib; ld.so.conf.d/fourier.conf adds the path to ld.so
|
||||
cache for dlopen-by-SONAME (firefox). /usr/bin/ffmpeg-fourier and
|
||||
/usr/bin/ffprobe-fourier are convenience symlinks to /opt/fourier/bin.
|
||||
Stock 'ffmpeg' command unaffected.
|
||||
.
|
||||
Drops X11/AMF/CUDA/Bluray/JACK/Vulkan/SDL2/Theora/XVid/Speex/JPEG-XL
|
||||
per Fourier fleet policy (Wayland + ARM + video-decode focus).
|
||||
No 'ffplay' binary; mpv-fourier covers interactive playback.
|
||||
EOF
|
||||
|
||||
# ldconfig must be re-run after install so /opt/fourier/lib is in the cache.
|
||||
cat > "$ROOT/DEBIAN/postinst" <<'PEOF'
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if [ "$1" = "configure" ]; then
|
||||
ldconfig
|
||||
fi
|
||||
#DEBHELPER#
|
||||
PEOF
|
||||
chmod 755 "$ROOT/DEBIAN/postinst"
|
||||
|
||||
cat > "$ROOT/DEBIAN/postrm" <<'PEOF'
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
|
||||
ldconfig
|
||||
fi
|
||||
#DEBHELPER#
|
||||
PEOF
|
||||
chmod 755 "$ROOT/DEBIAN/postrm"
|
||||
|
||||
DEB_OUT="ffmpeg-v4l2-request-fourier_${PKGVER//:/%3a}-${PKGREL}_arm64.deb"
|
||||
dpkg-deb --root-owner-group --build "$ROOT" "$HERE/$DEB_OUT"
|
||||
echo "built: $HERE/$DEB_OUT"
|
||||
|
||||
Reference in New Issue
Block a user