diff --git a/debian/daedalus-v4l2-dkms/build-deb.sh b/debian/daedalus-v4l2-dkms/build-deb.sh index e0cea45c0..a78c517c3 100755 --- a/debian/daedalus-v4l2-dkms/build-deb.sh +++ b/debian/daedalus-v4l2-dkms/build-deb.sh @@ -16,7 +16,7 @@ set -euo pipefail UPSTREAM_COMMIT=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 PKGVER=0.1.0+r24+gf0d4186 -PKGREL=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) +PKGREL=2 # postinst: autoinstall for every installed kernel with headers (#64) MODULE_NAME=daedalus_v4l2 HERE=$(dirname "$(readlink -f "$0")") @@ -78,7 +78,6 @@ 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. @@ -101,29 +100,56 @@ if [ "\$1" = "configure" ]; then dkms add "\$NAME/\$VERSION" 2>/dev/null || 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=\$? + # Enumerate every kernel whose headers are actually present + # (/lib/modules//build resolves to a directory). We iterate + # all of them — not just \$(uname -r) — so that installing this + # package after a kernel update covers the newly-installed kernel + # too, and so that a later kernel-headers install for a previously + # uncovered version gets picked up on dpkg-reconfigure. Without + # this, autoinstall (which targets only the running kernel) leaves + # /dev/daedalus-v4l2 absent after a kernel switch + reboot + # (marfrit/marfrit-packages#64). + kvers='' + for d in /lib/modules/*/build; do + [ -d "\$d" ] || continue + k=\$(basename "\$(dirname "\$d")") + kvers="\$kvers \$k" + done - # 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 + if [ -z "\$kvers" ]; 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 "No kernels with headers found under /lib/modules/*/build." + warn "Install kernel headers (e.g. linux-headers-rpi-2712 on Pi OS)" + warn "then finish with:" warn " sudo dkms autoinstall \$NAME/\$VERSION" - warn " sudo modprobe daedalus_v4l2" + exit 0 + fi + + failed='' + for k in \$kvers; do + dkms autoinstall -k "\$k" "\$NAME/\$VERSION" >/dev/null 2>&1 || true + s=\$(dkms status -m "\$NAME" -v "\$VERSION" -k "\$k" 2>/dev/null || true) + if ! printf '%s\\n' "\$s" | grep -q -E 'installed|loaded'; then + failed="\$failed \$k" + fi + done + + if [ -n "\$failed" ]; then warn "" - warn "Until then daedalus_v4l2 will NOT be loadable and the" - warn "userspace daedalus-v4l2 daemon will have nothing to talk to." + warn "DKMS build did NOT land for kernel(s):\$failed" + warn "" + warn "Most likely cause: kernel headers missing for those versions." + warn " Raspberry Pi OS / Pi 5: apt install linux-headers-rpi-2712" + warn " Debian generic: apt install linux-headers-" + warn "" + warn "After installing headers, finish with:" + for k in \$failed; do + warn " sudo dkms autoinstall -k \$k \$NAME/\$VERSION" + done + warn " sudo modprobe daedalus_v4l2 (after booting that kernel)" + warn "" + warn "Until then daedalus_v4l2 will NOT be loadable on those kernels" + warn "and the userspace daedalus-v4l2 daemon will have nothing to talk to." fi fi diff --git a/debian/daedalus-v4l2-dkms/debian/changelog b/debian/daedalus-v4l2-dkms/debian/changelog index 763bde3c2..e78f9978b 100644 --- a/debian/daedalus-v4l2-dkms/debian/changelog +++ b/debian/daedalus-v4l2-dkms/debian/changelog @@ -1,3 +1,18 @@ +daedalus-v4l2-dkms (0.1.0+r24+gf0d4186-2) bookworm trixie; urgency=medium + + * postinst: autoinstall for every installed kernel with headers, not + just the running one. Previously `dkms autoinstall $NAME/$VERSION` + built only against `$(uname -r)`, so installing the package on + kernel A and then rebooting into a separately-installed kernel B + left /lib/modules/B/updates/dkms/ empty — /dev/daedalus-v4l2 absent, + daedalus daemon nothing to talk to, browser/VAAPI silently falling + back to software with no obvious diagnostic. Now we enumerate every + /lib/modules/*/build that resolves to a real directory and run + `dkms autoinstall -k ` for each, reporting per-kernel failure + only when headers are missing. Closes #64. + + -- Markus Fritsche Thu, 21 May 2026 09:30:00 +0000 + daedalus-v4l2-dkms (0.1.0+r24+gf0d4186-1) bookworm trixie; urgency=medium * Bump to f0d4186 — per-ctx vb2 lock fix. daedalus_queue_init now