From 7213b238616fd4591a62c0d4c7989be72114fcae Mon Sep 17 00:00:00 2001 From: claude-noether Date: Thu, 21 May 2026 11:07:35 +0200 Subject: [PATCH] =?UTF-8?q?daedalus-v4l2-dkms:=20postinst=20=E2=80=94=20au?= =?UTF-8?q?toinstall=20for=20all=20installed=20kernels=20(#64)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously dkms autoinstall ran only against $(uname -r), so installing the package on kernel A and rebooting into 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 for the user. Now we enumerate every /lib/modules/*/build that resolves to a real directory (i.e. headers are actually installed for that kernel) and run 'dkms autoinstall -k ' for each. Per-kernel verify; aggregated warning only for the kernels that didn't build. Tested locally: enumeration filters dangling /build symlinks correctly (2 kernels installed, 1 has headers → only that one is built against). Bumps PKGREL 1 → 2. Closes #64. Co-Authored-By: Claude Opus 4.7 --- debian/daedalus-v4l2-dkms/build-deb.sh | 68 +++++++++++++++------- debian/daedalus-v4l2-dkms/debian/changelog | 15 +++++ 2 files changed, 62 insertions(+), 21 deletions(-) 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