diff --git a/arch/daedalus-v4l2-dkms/PKGBUILD b/arch/daedalus-v4l2-dkms/PKGBUILD index 963f6a74d1..386b2fb8af 100644 --- a/arch/daedalus-v4l2-dkms/PKGBUILD +++ b/arch/daedalus-v4l2-dkms/PKGBUILD @@ -18,9 +18,9 @@ _module=daedalus_v4l2 # Same pin as arch/daedalus-v4l2 — keep kernel module + daemon # bit-versioned together so the chardev wire protocol stays in sync. -_commit=f04d7000f858fe51d867aba14a529d3aef4fbd54 +_commit=f55b2cdab8a8c0bc04e8c1bb1d0b6ca85e7d96d2 -pkgver=0.1.0.r15.f04d700 +pkgver=0.1.0.r16.f55b2cd pkgrel=1 pkgdesc="V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5" arch=('any') @@ -28,10 +28,13 @@ url="https://git.reauktion.de/reauktion/daedalus-v4l2" license=('GPL-2.0-or-later') depends=('dkms') makedepends=('git') +install="${pkgname}.install" source=("git+https://git.reauktion.de/reauktion/daedalus-v4l2.git#commit=${_commit}" - "dkms.conf") + "dkms.conf" + "${pkgname}.install") sha256sums=('SKIP' + 'SKIP' 'SKIP') pkgver() { diff --git a/arch/daedalus-v4l2-dkms/daedalus-v4l2-dkms.install b/arch/daedalus-v4l2-dkms/daedalus-v4l2-dkms.install new file mode 100644 index 0000000000..aa3429d43e --- /dev/null +++ b/arch/daedalus-v4l2-dkms/daedalus-v4l2-dkms.install @@ -0,0 +1,61 @@ +# post-install / post-upgrade hook for daedalus-v4l2-dkms. +# +# pacman + the dkms-helpers alpm hook will already attempt +# `dkms install` on its own. This script's job is to emit a +# loud, actionable warning when the module didn't actually +# build for the running kernel — most commonly because the +# kernel headers package isn't installed yet. +# +# Without this you get a silent failure: the package looks +# installed but `modprobe daedalus_v4l2` returns ENOENT. + +_check_dkms_built() { + local name=daedalus_v4l2 + local ver=$1 + local kernelver=$(uname -r) + + if ! command -v dkms >/dev/null 2>&1; then + return 1 # the hard-dep should have caught this + fi + + local status + status=$(dkms status -m "$name" -v "$ver" -k "$kernelver" 2>/dev/null || true) + if printf '%s\n' "$status" | grep -q -E 'installed|loaded'; then + return 0 # all good + fi + + cat >&2 < daedalus-v4l2-dkms: DKMS build did NOT land for kernel $kernelver. +==> dkms status -m $name -v $ver -k $kernelver: +==> $(printf '%s' "$status" | head -1) +==> +==> Most likely cause: kernel headers package is missing. +==> Arch / ALARM: pacman -S linux-rpi-headers (or linux-rpi5-headers) +==> Raspberry Pi OS: apt install linux-headers-rpi-2712 +==> +==> After installing headers, finish the install with: +==> sudo dkms autoinstall $name/$ver +==> sudo modprobe daedalus_v4l2 +==> +==> Until then daedalus_v4l2 will NOT be loadable and the +==> userspace daedalus-v4l2 daemon will have nothing to talk to. +EOF + return 1 +} + +post_install() { + _check_dkms_built "$1" || true +} + +post_upgrade() { + # New version pinned by the bump may have built fine, but if + # a kernel-headers package was uninstalled / pruned since the + # last upgrade we'd silently regress. Re-check. + _check_dkms_built "$1" || true +} + +pre_remove() { + # The dkms alpm hook handles dkms remove on its own; nothing + # we need to add here. + : +} diff --git a/arch/daedalus-v4l2/PKGBUILD b/arch/daedalus-v4l2/PKGBUILD index 3e146f1f6a..ce4289e094 100644 --- a/arch/daedalus-v4l2/PKGBUILD +++ b/arch/daedalus-v4l2/PKGBUILD @@ -16,16 +16,16 @@ pkgname=daedalus-v4l2 _upstreampkg=daedalus-v4l2 -# Pin the daedalus-v4l2 tip. f04d700 = "Phase 8.13: byte-exact end-to- +# Pin the daedalus-v4l2 tip. f55b2cd = "Phase 8.13: byte-exact end-to- # end via libva (consumer target hit)" — first commit where the full # ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands a # pixel-correct decoded frame back in ffmpeg. Promote to a later pin # only after a future phase closes cleanly. -_commit=f04d7000f858fe51d867aba14a529d3aef4fbd54 +_commit=f55b2cdab8a8c0bc04e8c1bb1d0b6ca85e7d96d2 # 0.1.0 (pre-1.0) + commit count + short sha. Bump the .Y on each # Phase 8.x close. pkgver() recomputes at build time. -pkgver=0.1.0.r15.f04d700 +pkgver=0.1.0.r16.f55b2cd pkgrel=1 pkgdesc="Userspace daemon for the daedalus-v4l2 V4L2 stateless decoder shim (VP9/AV1/H.264 on Pi 5 / CM5)" arch=('aarch64') diff --git a/debian/daedalus-v4l2-dkms/build-deb.sh b/debian/daedalus-v4l2-dkms/build-deb.sh index c027e03955..6f9b75b1f9 100755 --- a/debian/daedalus-v4l2-dkms/build-deb.sh +++ b/debian/daedalus-v4l2-dkms/build-deb.sh @@ -14,8 +14,8 @@ # Sibling userspace package: ../daedalus-v4l2/build-deb.sh set -euo pipefail -UPSTREAM_COMMIT=f04d7000f858fe51d867aba14a529d3aef4fbd54 -PKGVER=0.1.0+r15+gf04d700 +UPSTREAM_COMMIT=f55b2cdab8a8c0bc04e8c1bb1d0b6ca85e7d96d2 +PKGVER=0.1.0+r16+gf55b2cd PKGREL=1 MODULE_NAME=daedalus_v4l2 @@ -78,10 +78,53 @@ set -e NAME=${MODULE_NAME} VERSION=${PKGVER} +KERNELVER=\$(uname -r) + +# Yellow + bold ANSI for the warning so it stands out in apt's +# stream of "Setting up" lines. Disable colour on non-TTY. +if [ -t 1 ]; then + Y=\$(printf '\\033[1;33m'); R=\$(printf '\\033[0m') +else + Y=''; R='' +fi + +warn() { + printf '%s==> daedalus-v4l2-dkms: %s%s\\n' "\$Y" "\$1" "\$R" >&2 +} + +if [ "\$1" = "configure" ]; then + if ! command -v dkms >/dev/null 2>&1; then + warn "dkms not installed; module \$NAME/\$VERSION not registered." + warn "Install 'dkms' then run: dkms add \$NAME/\$VERSION && dkms autoinstall" + exit 0 + fi -if [ "\$1" = "configure" ] && command -v dkms >/dev/null 2>&1; then dkms add "\$NAME/\$VERSION" 2>/dev/null || true - dkms autoinstall "\$NAME/\$VERSION" || true + + # Don't let autoinstall failure mask the actual problem behind '|| true'. + # Run it, capture the result, then verify post-condition. + autoinstall_rc=0 + dkms autoinstall "\$NAME/\$VERSION" || autoinstall_rc=\$? + + # Verify the module actually built + installed for the running kernel. + status=\$(dkms status -m "\$NAME" -v "\$VERSION" -k "\$KERNELVER" 2>/dev/null || true) + if ! printf '%s\\n' "\$status" | grep -q -E 'installed|loaded'; then + warn "" + warn "DKMS build did NOT land for kernel \$KERNELVER." + warn " dkms status -m \$NAME -v \$VERSION -k \$KERNELVER:" + warn " \$(printf '%s' "\$status" | head -1)" + warn "" + warn "Most likely cause: kernel headers package is missing." + warn " Raspberry Pi OS / Pi 5: apt install linux-headers-rpi-2712" + warn " Debian generic: apt install linux-headers-\$KERNELVER" + warn "" + warn "After installing headers, finish the install with:" + warn " sudo dkms autoinstall \$NAME/\$VERSION" + warn " sudo modprobe daedalus_v4l2" + warn "" + warn "Until then daedalus_v4l2 will NOT be loadable and the" + warn "userspace daedalus-v4l2 daemon will have nothing to talk to." + fi fi #DEBHELPER# diff --git a/debian/daedalus-v4l2-dkms/debian/changelog b/debian/daedalus-v4l2-dkms/debian/changelog index 26c83642f7..0096ee5ad4 100644 --- a/debian/daedalus-v4l2-dkms/debian/changelog +++ b/debian/daedalus-v4l2-dkms/debian/changelog @@ -1,7 +1,7 @@ -daedalus-v4l2-dkms (0.1.0+r15+gf04d700-1) bookworm trixie; urgency=medium +daedalus-v4l2-dkms (0.1.0+r16+gf55b2cd-1) bookworm trixie; urgency=medium * Initial Debian DKMS packaging for the daedalus_v4l2 kernel module. - * Pinned to f04d700 (Phase 8.13 close): kernel-side framework + * Pinned to f55b2cd (Phase 8.13 close): kernel-side framework integration (V4L2 m2m, dmabuf-export, media controller, request API, NV12 single-plane + NV12M + P010 CAPTURE) that closes the libva→/dev/video0→daemon round-trip with byte-exact pixels. diff --git a/debian/daedalus-v4l2/build-deb.sh b/debian/daedalus-v4l2/build-deb.sh index e195c20dc5..915375a6b7 100755 --- a/debian/daedalus-v4l2/build-deb.sh +++ b/debian/daedalus-v4l2/build-deb.sh @@ -11,12 +11,12 @@ # Upstream repo: https://git.reauktion.de/reauktion/daedalus-v4l2 set -euo pipefail -# Same pin as the Arch PKGBUILD. f04d700 = "Phase 8.13: byte-exact +# Same pin as the Arch PKGBUILD. f55b2cd = "Phase 8.13: byte-exact # end-to-end via libva (consumer target hit)" — first commit where the # full ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands # a pixel-correct decoded frame back in ffmpeg. -UPSTREAM_COMMIT=f04d7000f858fe51d867aba14a529d3aef4fbd54 -PKGVER=0.1.0+r15+gf04d700 +UPSTREAM_COMMIT=f55b2cdab8a8c0bc04e8c1bb1d0b6ca85e7d96d2 +PKGVER=0.1.0+r16+gf55b2cd PKGREL=1 HERE=$(dirname "$(readlink -f "$0")") diff --git a/debian/daedalus-v4l2/debian/changelog b/debian/daedalus-v4l2/debian/changelog index 680fd670a1..632ab13fcc 100644 --- a/debian/daedalus-v4l2/debian/changelog +++ b/debian/daedalus-v4l2/debian/changelog @@ -1,7 +1,7 @@ -daedalus-v4l2 (0.1.0+r15+gf04d700-1) bookworm trixie; urgency=medium +daedalus-v4l2 (0.1.0+r16+gf55b2cd-1) bookworm trixie; urgency=medium * Initial Debian packaging for the daedalus-v4l2 userspace daemon. - * Pinned to f04d700 (Phase 8.13 close): first commit where the full + * Pinned to f55b2cd (Phase 8.13 close): first commit where the full ffmpeg -hwaccel vaapi → libva-v4l2-request-fourier → /dev/video0 → daemon path lands a pixel-correct decoded NV12 frame back in ffmpeg.