Prune the package cache before updating (#6734)
The pacman cache grows without bound across updates, and nothing in the update flow ever reclaimed it. On a machine that has been updating for a while it reaches several gigabytes of superseded versions that nothing will ever install again. Prune it with paccache -rk2 as the first step of an update. Both halves of that placement are load-bearing. Keeping two versions rather than one preserves the rollback path. The cache is Arch's only offline downgrade: when an update breaks a single package, reinstalling its predecessor from here is the surgical fix, where a snapshot rollback would revert every other package too. Pruning before the packages update means the installed version is still the newest cached, so it survives along with a spare. Retention is by version order and never consults what is installed, so that holds while the installed version is among the two newest cached; a deliberate downgrade or repeated failed transactions can stack newer archives on top of it. Running before the snapshot is what actually frees the space. The cache sits on the snapshotted root subvolume, so a prune taken afterwards leaves the fresh snapshot holding those extents and reclaims nothing until it ages out of the number cleanup. A failed prune warns and continues. Cache housekeeping should not trip the update's ERR trap and tell the user their update went wrong. This runs after omarchy-update-requires-free-space, so it reclaims space during healthy updates but does not rescue a machine already under the 10 GiB gate. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
cd84583b56
commit
fd23ca023a
@@ -22,6 +22,10 @@ trap 'omarchy-update-stay-awake stop' EXIT
|
||||
omarchy-update-requires-free-space
|
||||
|
||||
if [[ ${1:-} == "-y" ]] || omarchy-update-confirm; then
|
||||
# Before the snapshot: the cache is on the snapshotted subvolume, so pruning
|
||||
# after it frees nothing until that snapshot ages out.
|
||||
omarchy-update-pkg-prune
|
||||
|
||||
# 127 means Snapper is deliberately absent. Any other failure already said
|
||||
# what went wrong, and a missing snapshot is not worth blocking an update
|
||||
# over, but it must not pass for one either.
|
||||
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Prune superseded versions from the pacman package cache
|
||||
# omarchy:requires-sudo=true
|
||||
|
||||
set -e
|
||||
|
||||
# The cache is the only offline downgrade path, so keep two. Run before the
|
||||
# packages update and the installed version survives with a spare. paccache
|
||||
# retains by version order, never by what is installed.
|
||||
echo -e "\e[32m\nPrune package cache\e[0m"
|
||||
sudo paccache -rk2 || echo -e "\e[33mCould not prune the package cache.\e[0m" >&2
|
||||
Reference in New Issue
Block a user