From 8e37925205ba9baa2f82f78abe81e462c7707f59 Mon Sep 17 00:00:00 2001 From: LyAhn Date: Mon, 8 Jun 2026 21:18:39 +0000 Subject: [PATCH] add apt-unlock script Used for when there is a phantom lock on the apt process preventing updating and upgrading --- apt-unlock/README.md | 3 +++ apt-unlock/apt-unlock | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 apt-unlock/README.md create mode 100755 apt-unlock/apt-unlock diff --git a/apt-unlock/README.md b/apt-unlock/README.md new file mode 100644 index 0000000..fd8c19d --- /dev/null +++ b/apt-unlock/README.md @@ -0,0 +1,3 @@ +# apt-unlock + +This script is used for when a phantom lock is holding any apt session preventing updates/upgrades diff --git a/apt-unlock/apt-unlock b/apt-unlock/apt-unlock new file mode 100755 index 0000000..4157195 --- /dev/null +++ b/apt-unlock/apt-unlock @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -euo pipefail + +LOCK_FILES=( + /var/lib/dpkg/lock + /var/lib/dpkg/lock-frontend + /var/lib/apt/lists/lock + /var/cache/apt/archives/lock +) + +killed=0 + +for lock in "${LOCK_FILES[@]}"; do + if [ ! -f "$lock" ]; then + continue + fi + + pid=$(sudo fuser "$lock" 2>/dev/null || true) + if [ -z "$pid" ]; then + continue + fi + + pid=$(echo "$pid" | tr -s ' ' '\n' | grep -v '^$' | head -1) + name=$(ps -p "$pid" -o comm= 2>/dev/null || echo "unknown") + + echo "Killing PID $pid ($name) holding $lock" + sudo kill -9 "$pid" 2>/dev/null || true + killed=$((killed + 1)) +done + +if [ $killed -eq 0 ]; then + echo "No apt locks held by any process." +else + # Wait briefly and clean up any stale lock files + sleep 1 + for lock in "${LOCK_FILES[@]}"; do + if [ -f "$lock" ] && ! sudo fuser "$lock" &>/dev/null 2>&1; then + sudo rm -f "$lock" + fi + done + echo "Done. $killed lock(s) cleared." +fi