| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #!/bin/bash
- # pm_apt.sh - APT package manager implementation for Debian/Ubuntu systems
- #
- # To add a new package manager, create a file named pm_<name>.sh with:
- # - pm_<name>_detect: Returns 0 if this PM is available, 1 otherwise
- # - pm_<name>_get_missing_deps: Prints space-separated list of missing packages
- # - pm_<name>_install_missing_deps: Installs the missing packages
- # Package names required by USM
- 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"
- # Check if this package manager is available
- pm_apt_detect() {
- command -v apt-get &>/dev/null
- }
- # Get list of missing dependencies
- pm_apt_get_missing_deps() {
- local -a missing=()
-
- for pkg in $APT_DEPS; do
- if ! dpkg -l "$pkg" 2>/dev/null | grep -q "^ii"; then
- missing+=("$pkg")
- fi
- done
-
- echo "${missing[*]}"
- }
- # Install missing dependencies
- pm_apt_install_missing_deps() {
- local missing=$(pm_apt_get_missing_deps)
-
- if [[ -z "$missing" ]]; then
- log_info "All dependencies are already installed"
- return 0
- fi
-
- log_step "Installing packages via apt: ${missing}"
-
- local sudo=""
- if ! is_root; then
- sudo=$(get_sudo)
- fi
-
- local apt_opts="-y -qq"
- if [[ "$ASSUME_YES" == "true" ]]; then
- apt_opts="-y -qq --allow-downgrades --allow-remove-essential --allow-change-held-packages"
- fi
-
- if [[ -n "$sudo" ]]; then
- DEBIAN_FRONTEND=noninteractive $sudo apt-get update -qq
- DEBIAN_FRONTEND=noninteractive $sudo apt-get install $apt_opts $missing
- else
- DEBIAN_FRONTEND=noninteractive apt-get update -qq
- DEBIAN_FRONTEND=noninteractive apt-get install $apt_opts $missing
- fi
- }
|