From c0eee076b48c9f8d038f55a066d030bd67a1c171 Mon Sep 17 00:00:00 2001 From: Gabriel Brown Date: Sun, 23 Aug 2026 13:20:42 -0400 Subject: [PATCH] Stop installing ffmpeg over ffmpeg-free, which a fresh machine refuses A clean Fedora Workstation ships ffmpeg-free, and desktop-packages listed ffmpeg (RPM Fusion). Those two conflict rather than add: dnf will not erase the preinstalled ffmpeg-free to make room, so the WHOLE desktop transaction failed to resolve and no desktop package installed. The codec section already does the trade correctly -- `dnf swap ffmpeg-free ffmpeg --allowerasing` -- so ffmpeg simply does not belong in the eager list. A machine that already had ffmpeg (every one this repo was ever run on) sailed past this; the first genuinely fresh Workstation install is what surfaced it. Also: report_missing false-warned that awk was unavailable. rpm -q --whatprovides matches a package's named provides, but awk is provided as the file path /usr/bin/awk (by gawk), which that query misses. Fall back to command -v so a capability provided by path is not reported as missing. Found by a fresh-VM certification run, which is exactly the failure mode a re-run on an already-configured machine cannot reproduce. Claude-Session: https://claude.ai/code/session_01Epx9ZC1gwm81K3jm9x9CKh --- setup/packages/desktop-packages | 7 ++++++- setup/scripts/install-packages | 11 ++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/setup/packages/desktop-packages b/setup/packages/desktop-packages index a98f72b..e2ae307 100644 --- a/setup/packages/desktop-packages +++ b/setup/packages/desktop-packages @@ -8,7 +8,12 @@ decibels espanso-wayland desktop-file-utils dnf-plugins-core -ffmpeg +# ffmpeg is deliberately NOT here: Fedora ships ffmpeg-free, and installing +# RPM Fusion's ffmpeg over it is a CONFLICT, not an addition -- dnf refuses +# the whole transaction rather than erase the preinstalled one. The codec +# section swaps ffmpeg-free -> ffmpeg with --allowerasing, which is the only +# correct way to make that trade. A fresh Workstation install found this; a +# machine that already had ffmpeg never would. firamono-nerd-fonts # A second engine to check pages against; Helium is the daily driver. Its # chrome is themed from config/firefox, which link-dotfiles places into the diff --git a/setup/scripts/install-packages b/setup/scripts/install-packages index c280d3f..cc059b0 100755 --- a/setup/scripts/install-packages +++ b/setup/scripts/install-packages @@ -28,9 +28,14 @@ packages_in() { report_missing() { local file="$1" name missing=() for name in $(packages_in "$file"); do - # --whatprovides, because several list entries are capabilities a - # differently-named package satisfies: awk is gawk, wget is wget2-wget. - rpm -q --whatprovides "$name" >/dev/null 2>&1 || missing+=("$name") + # Three ways a list entry can be satisfied: it is a package name + # (rpm -q), a capability another package provides (--whatprovides, + # e.g. wget -> wget2-wget), or a bare command name provided as a file + # path (command -v, e.g. awk -> /usr/bin/awk from gawk, which + # --whatprovides misses because the provide is the path, not the word). + rpm -q --whatprovides "$name" >/dev/null 2>&1 && continue + command -v "$name" >/dev/null 2>&1 && continue + missing+=("$name") done (( ${#missing[@]} > 0 )) && log "WARNING: not available on this machine: ${missing[*]}" return 0