#!/bin/bash # pm_dnf.sh - DNF package manager implementation for Fedora/RHEL systems # # To add a new package manager, create a file named pm_.sh with: # - pm__detect: Returns 0 if this PM is available, 1 otherwise # - pm__get_missing_deps: Prints space-separated list of missing packages # - pm__install_missing_deps: Installs the missing packages # Package names required by USM DNF_DEPS="vala meson ninja-build pkgconf-pkg-config gcc glib2-devel libsodium-devel json-glib-devel libarchive-devel libgee-devel" # Check if this package manager is available pm_dnf_detect() { command -v dnf &>/dev/null } # Get list of missing dependencies pm_dnf_get_missing_deps() { local -a missing=() for pkg in $DNF_DEPS; do if ! rpm -q "$pkg" &>/dev/null; then missing+=("$pkg") fi done echo "${missing[*]}" } # Install missing dependencies pm_dnf_install_missing_deps() { local missing=$(pm_dnf_get_missing_deps) if [[ -z "$missing" ]]; then log_info "All dependencies are already installed" return 0 fi log_step "Installing packages via dnf: ${missing}" local sudo="" if ! is_root; then sudo=$(get_sudo) fi local dnf_opts="-y --quiet" if [[ "$ASSUME_YES" == "true" ]]; then dnf_opts="-y --quiet --skip-broken" fi if [[ -n "$sudo" ]]; then $sudo dnf makecache -q 2>/dev/null || $sudo dnf clean metadata $sudo dnf install $dnf_opts $missing else dnf makecache -q 2>/dev/null || dnf clean metadata dnf install $dnf_opts $missing fi }