Files
pmg/scripts/mdm/pmg_uninstall_macos.sh
T
Abhisek DattaandGitHub b15ce33fe4 fix: MacOS MDM based Deployment (#277)
* fix: MacOS MDM deployment script

* fix: Handle shell alias for bash on macos

* fix: Code review fixes

* fix: Code review fixes

* feat: Add support for global config file

* feat: Add support for global config file

* fix: Code review fixes

* fix: Avoid blocking CLI for analytics flush
2026-05-21 14:32:30 +05:30

73 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# pmg_uninstall_macos.sh — Remove PMG from a Mac.
#
# Deploy via Jamf or any MDM, alongside lib_macos.sh in the same directory.
# Run as root, it cleans up every local user's config, aliases, shims, and (for
# the logged-in user) Keychain credentials, then removes the machine-wide binary.
# Run as a user, it cleans up just that user. See lib_macos.sh for the model.
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=lib_macos.sh
source "${SCRIPT_DIR}/lib_macos.sh"
require_macos
PMG_BIN=$(resolve_pmg || true)
remove_user_state() {
local user="$1" home="$2"
log "Removing pmg state for $user"
if [[ -n "$PMG_BIN" ]]; then
run_user_file "$user" "$PMG_BIN" setup remove \
|| warn "failed to remove aliases/shims for $user"
else
warn "pmg binary not found; shell rc entries for $user may remain"
fi
run_user_file "$user" rm -rf \
"$(pmg_config_dir "$home")" "$(pmg_cache_dir "$home")" \
"$home/.pmg" "$home/.pmg.rc" "$home/.local/bin/pmg" \
|| warn "failed to remove pmg directories for $user"
if [[ -z "$PMG_BIN" ]]; then
return
fi
if user_has_session "$user"; then
run_user_session "$user" "$PMG_BIN" cloud logout \
|| warn "failed to clear Keychain credentials for $user"
else
log " $user is not logged in; Keychain credentials (if any) will clear on next login"
fi
}
while IFS=$'\t' read -r user _ home; do
remove_user_state "$user" "$home"
done < <(each_target_user)
remove_binary() {
local brew_bin
if brew_bin=$(find_brew) && run_brew "$brew_bin" ls --versions safedep/tap/pmg &>/dev/null; then
log "Uninstalling pmg via Homebrew"
run_brew "$brew_bin" uninstall safedep/tap/pmg || warn "brew uninstall failed"
return
fi
# Not brew-managed: remove machine-wide binaries from the locations resolve_pmg
# checks, so a manual install in either prefix is not left behind.
local path
for path in /usr/local/bin/pmg /opt/homebrew/bin/pmg; do
if [[ -e "$path" ]]; then
log "Removing $path"
run_as_root rm -f "$path" || warn "failed to remove $path (need root)"
fi
done
}
remove_binary
remove_global_config
log "pmg uninstall complete"