pm_dnf.sh 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/bin/bash
  2. # pm_dnf.sh - DNF package manager implementation for Fedora/RHEL systems
  3. #
  4. # To add a new package manager, create a file named pm_<name>.sh with:
  5. # - pm_<name>_detect: Returns 0 if this PM is available, 1 otherwise
  6. # - pm_<name>_get_missing_deps: Prints space-separated list of missing packages
  7. # - pm_<name>_install_missing_deps: Installs the missing packages
  8. # Package names required by USM
  9. DNF_DEPS="vala meson ninja-build git pkgconf-pkg-config gcc glib2-devel libsodium-devel"
  10. # Check if this package manager is available
  11. pm_dnf_detect() {
  12. command -v dnf &>/dev/null
  13. }
  14. # Get list of missing dependencies
  15. pm_dnf_get_missing_deps() {
  16. local -a missing=()
  17. for pkg in $DNF_DEPS; do
  18. if ! rpm -q "$pkg" &>/dev/null; then
  19. missing+=("$pkg")
  20. fi
  21. done
  22. echo "${missing[*]}"
  23. }
  24. # Install missing dependencies
  25. pm_dnf_install_missing_deps() {
  26. local missing=$(pm_dnf_get_missing_deps)
  27. if [[ -z "$missing" ]]; then
  28. log_info "All dependencies are already installed"
  29. return 0
  30. fi
  31. log_step "Installing packages via dnf: ${missing}"
  32. local sudo=""
  33. if ! is_root; then
  34. sudo=$(get_sudo)
  35. fi
  36. local dnf_opts="-y --quiet"
  37. if [[ "$ASSUME_YES" == "true" ]]; then
  38. dnf_opts="-y --quiet --skip-broken"
  39. fi
  40. if [[ -n "$sudo" ]]; then
  41. $sudo dnf makecache -q 2>/dev/null || $sudo dnf clean metadata
  42. $sudo dnf install $dnf_opts $missing
  43. else
  44. dnf makecache -q 2>/dev/null || dnf clean metadata
  45. dnf install $dnf_opts $missing
  46. fi
  47. }