pm_apt.sh 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/bin/bash
  2. # pm_apt.sh - APT package manager implementation for Debian/Ubuntu 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. APT_DEPS="valac meson ninja-build pkg-config gcc libglib2.0-dev libsodium-dev libjson-glib-dev libarchive-dev libgee-0.8-dev xz-utils gobject-introspection"
  10. # Check if this package manager is available
  11. pm_apt_detect() {
  12. command -v apt-get &>/dev/null
  13. }
  14. # Get list of missing dependencies
  15. pm_apt_get_missing_deps() {
  16. local -a missing=()
  17. for pkg in $APT_DEPS; do
  18. if ! dpkg -l "$pkg" 2>/dev/null | grep -q "^ii"; then
  19. missing+=("$pkg")
  20. fi
  21. done
  22. echo "${missing[*]}"
  23. }
  24. # Install missing dependencies
  25. pm_apt_install_missing_deps() {
  26. local missing=$(pm_apt_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 apt: ${missing}"
  32. local sudo=""
  33. if ! is_root; then
  34. sudo=$(get_sudo)
  35. fi
  36. local apt_opts="-y -qq"
  37. if [[ "$ASSUME_YES" == "true" ]]; then
  38. apt_opts="-y -qq --allow-downgrades --allow-remove-essential --allow-change-held-packages"
  39. fi
  40. if [[ -n "$sudo" ]]; then
  41. DEBIAN_FRONTEND=noninteractive $sudo apt-get update -qq
  42. DEBIAN_FRONTEND=noninteractive $sudo apt-get install $apt_opts $missing
  43. else
  44. DEBIAN_FRONTEND=noninteractive apt-get update -qq
  45. DEBIAN_FRONTEND=noninteractive apt-get install $apt_opts $missing
  46. fi
  47. }