pm_dnf.sh 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/bin/bash
  2. # pm_dnf.sh - DNF package manager implementation for Fedora/RHEL systems
  3. # Package name mappings for dnf
  4. declare -A DNF_PACKAGE_NAMES=(
  5. ["vala"]="vala"
  6. ["meson"]="meson"
  7. ["ninja"]="ninja-build"
  8. ["git"]="git"
  9. ["pkgconfig"]="pkgconf-pkg-config"
  10. ["gcc"]="gcc"
  11. ["glib"]="glib2-devel"
  12. ["libsodium"]="libsodium-devel"
  13. ["gtk"]="gtk3-devel"
  14. )
  15. # Check if a package is installed via dnf/rpm
  16. pm_is_installed() {
  17. local pkg="$1"
  18. rpm -q "$pkg" &>/dev/null
  19. }
  20. # Get the dnf package name for a generic dependency
  21. pm_get_package_name() {
  22. local dep="$1"
  23. if [[ -n "${DNF_PACKAGE_NAMES[$dep]}" ]]; then
  24. echo "${DNF_PACKAGE_NAMES[$dep]}"
  25. else
  26. echo "$dep"
  27. fi
  28. }
  29. # Update dnf cache
  30. pm_update() {
  31. local sudo=$(get_sudo)
  32. if [[ -n "$sudo" ]]; then
  33. $sudo dnf makecache -q 2>/dev/null || $sudo dnf clean metadata
  34. else
  35. dnf makecache -q 2>/dev/null || dnf clean metadata
  36. fi
  37. }
  38. # Install packages via dnf
  39. pm_install() {
  40. local -a pkgs=("$@")
  41. local sudo=$(get_sudo)
  42. local dnf_opts="-y --quiet"
  43. if [[ "$ASSUME_YES" == "true" ]]; then
  44. dnf_opts="-y --quiet --skip-broken"
  45. fi
  46. log_step "Installing packages via dnf: ${pkgs[*]}"
  47. if [[ -n "$sudo" ]]; then
  48. $sudo dnf install $dnf_opts "${pkgs[@]}"
  49. else
  50. dnf install $dnf_opts "${pkgs[@]}"
  51. fi
  52. }
  53. # Get list of missing dependencies (dnf-specific override)
  54. get_missing_deps() {
  55. local -a missing=()
  56. local deps=("vala" "meson" "ninja" "git" "pkgconfig" "gcc" "glib" "libsodium")
  57. for dep in "${deps[@]}"; do
  58. local pkg_name=$(pm_get_package_name "$dep")
  59. if ! pm_is_installed "$pkg_name"; then
  60. missing+=("$pkg_name")
  61. fi
  62. done
  63. echo "${missing[@]}"
  64. }