pm_apk.sh 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/bin/bash
  2. # pm_apk.sh - APK package manager implementation for Alpine Linux 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. APK_DEPS="vala meson ninja pkgconf gcc musl-dev glib-dev libsodium-dev json-glib-dev libarchive-dev libgee-dev xz gobject-introspection gobject-introspection-dev"
  10. # Check if this package manager is available
  11. pm_apk_detect() {
  12. command -v apk &>/dev/null
  13. }
  14. # Get list of missing dependencies
  15. pm_apk_get_missing_deps() {
  16. local -a missing=()
  17. for pkg in $APK_DEPS; do
  18. if ! apk info -e "$pkg" &>/dev/null; then
  19. missing+=("$pkg")
  20. fi
  21. done
  22. echo "${missing[*]}"
  23. }
  24. # Install missing dependencies
  25. pm_apk_install_missing_deps() {
  26. local missing=$(pm_apk_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 apk: ${missing}"
  32. local sudo=""
  33. if ! is_root; then
  34. sudo=$(get_sudo)
  35. fi
  36. local apk_opts="--quiet"
  37. if [[ "$ASSUME_YES" == "true" ]]; then
  38. apk_opts="--quiet --force"
  39. fi
  40. if [[ -n "$sudo" ]]; then
  41. $sudo apk update
  42. $sudo apk add $apk_opts $missing
  43. else
  44. apk update
  45. apk add $apk_opts $missing
  46. fi
  47. }