#!/bin/bash # pm_apt.sh - APT package manager implementation for Debian/Ubuntu systems # # To add a new package manager, create a file named pm_.sh with: # - pm__detect: Returns 0 if this PM is available, 1 otherwise # - pm__get_missing_deps: Prints space-separated list of missing packages # - pm__install_missing_deps: Installs the missing packages # Package names required by USM APT_DEPS="valac meson ninja-build git pkg-config gcc libglib2.0-dev libsodium-dev" # 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 }