Keep the zram fallback until its replacement is installed
zram-generator creates no device at all when nothing configures one, so the /etc copy is the only thing holding up swap until the vendor drop-in lands. Removing it early costs a machine its zram entirely, not just its tuning. The update pipeline installs packages before it runs migrations, so a packaged machine always has the drop-in by then. A dev checkout does not: omarchy-update-dev pulls migrations from a release the installed package has never seen, and no ordering of the pipeline can produce a file that has not been built yet. Checking for the drop-in is what makes the removal safe rather than well sequenced. The tests pinned the drop-in path to a fixture as well. Left at the real path they would pass or fail on whether the machine running them happened to carry the packaged copy. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9ec7916c0b
commit
171b6374c6
@@ -1,6 +1,7 @@
|
|||||||
echo "Move zram tuning to a vendor drop-in"
|
echo "Move zram tuning to a vendor drop-in"
|
||||||
|
|
||||||
zram_conf="${OMARCHY_ZRAM_CONF:-/etc/systemd/zram-generator.conf}"
|
zram_conf="${OMARCHY_ZRAM_CONF:-/etc/systemd/zram-generator.conf}"
|
||||||
|
zram_dropin="${OMARCHY_ZRAM_DROPIN:-/usr/lib/systemd/zram-generator.conf.d/90-omarchy.conf}"
|
||||||
|
|
||||||
# The tuning ships as /usr/lib/systemd/zram-generator.conf.d/90-omarchy.conf.
|
# The tuning ships as /usr/lib/systemd/zram-generator.conf.d/90-omarchy.conf.
|
||||||
# Drop-ins outrank the main config file, so a leftover /etc copy decides nothing
|
# Drop-ins outrank the main config file, so a leftover /etc copy decides nothing
|
||||||
@@ -8,6 +9,13 @@ zram_conf="${OMARCHY_ZRAM_CONF:-/etc/systemd/zram-generator.conf}"
|
|||||||
|
|
||||||
[[ -f $zram_conf ]] || exit 0
|
[[ -f $zram_conf ]] || exit 0
|
||||||
|
|
||||||
|
# Only once the replacement is on disk. zram-generator makes no device at all
|
||||||
|
# when nothing configures one, so until the drop-in lands the /etc copy is the
|
||||||
|
# only thing standing between this machine and no zram swap. The update pipeline
|
||||||
|
# installs packages before it runs migrations, but a dev checkout carries
|
||||||
|
# migrations from a release the installed package does not have yet.
|
||||||
|
[[ -f $zram_dropin ]] || exit 0
|
||||||
|
|
||||||
# Package-owned copies go away with their package on upgrade.
|
# Package-owned copies go away with their package on upgrade.
|
||||||
pacman -Qo "$zram_conf" &>/dev/null && exit 0
|
pacman -Qo "$zram_conf" &>/dev/null && exit 0
|
||||||
|
|
||||||
|
|||||||
@@ -26,11 +26,17 @@ STUB
|
|||||||
|
|
||||||
chmod +x "$stub_bin/pacman" "$stub_bin/sudo"
|
chmod +x "$stub_bin/pacman" "$stub_bin/sudo"
|
||||||
|
|
||||||
|
# The migration removes the /etc copy only once the drop-in that replaces it is
|
||||||
|
# installed. Point that at a fixture so the result does not depend on whether
|
||||||
|
# the machine running the tests happens to carry the real one.
|
||||||
|
dropin="$TMPDIR/90-omarchy.conf"
|
||||||
|
: >"$dropin"
|
||||||
|
|
||||||
# omarchy-migrate runs each migration with `bash -euo pipefail` and stops the
|
# omarchy-migrate runs each migration with `bash -euo pipefail` and stops the
|
||||||
# whole chain on a non-zero exit, so match that invocation exactly.
|
# whole chain on a non-zero exit, so match that invocation exactly.
|
||||||
run_migration() {
|
run_migration() {
|
||||||
local conf="$1"
|
local conf="$1"
|
||||||
PATH="$stub_bin:$PATH" OMARCHY_ZRAM_CONF="$conf" \
|
PATH="$stub_bin:$PATH" OMARCHY_ZRAM_CONF="$conf" OMARCHY_ZRAM_DROPIN="$dropin" \
|
||||||
bash -euo pipefail "$migration" >/dev/null ||
|
bash -euo pipefail "$migration" >/dev/null ||
|
||||||
fail "migration exits clean for $(basename "$conf")"
|
fail "migration exits clean for $(basename "$conf")"
|
||||||
}
|
}
|
||||||
@@ -74,7 +80,7 @@ pass "migration keeps a locally edited config"
|
|||||||
# them.
|
# them.
|
||||||
conf="$TMPDIR/owned.conf"
|
conf="$TMPDIR/owned.conf"
|
||||||
printf '[zram0]\ncompression-algorithm = zstd\n' >"$conf"
|
printf '[zram0]\ncompression-algorithm = zstd\n' >"$conf"
|
||||||
PATH="$stub_bin:$PATH" PACMAN_OWNS=1 OMARCHY_ZRAM_CONF="$conf" \
|
PATH="$stub_bin:$PATH" PACMAN_OWNS=1 OMARCHY_ZRAM_CONF="$conf" OMARCHY_ZRAM_DROPIN="$dropin" \
|
||||||
bash -euo pipefail "$migration" >/dev/null ||
|
bash -euo pipefail "$migration" >/dev/null ||
|
||||||
fail "migration exits clean for a package-owned config"
|
fail "migration exits clean for a package-owned config"
|
||||||
[[ -f $conf ]] || fail "migration keeps a package-owned config"
|
[[ -f $conf ]] || fail "migration keeps a package-owned config"
|
||||||
@@ -85,3 +91,14 @@ conf="$TMPDIR/absent.conf"
|
|||||||
run_migration "$conf"
|
run_migration "$conf"
|
||||||
run_migration "$conf"
|
run_migration "$conf"
|
||||||
pass "migration no-ops when the config is already gone"
|
pass "migration no-ops when the config is already gone"
|
||||||
|
|
||||||
|
# Without the drop-in installed, the /etc copy is the only thing configuring
|
||||||
|
# zram at all. Removing it would leave the machine with no zram device, so the
|
||||||
|
# migration has to leave it alone and stay clean doing it.
|
||||||
|
conf="$TMPDIR/no-dropin.conf"
|
||||||
|
printf '[zram0]\ncompression-algorithm = zstd\n' >"$conf"
|
||||||
|
PATH="$stub_bin:$PATH" OMARCHY_ZRAM_CONF="$conf" OMARCHY_ZRAM_DROPIN="$TMPDIR/absent-dropin.conf" \
|
||||||
|
bash -euo pipefail "$migration" >/dev/null ||
|
||||||
|
fail "migration exits clean when the drop-in is missing"
|
||||||
|
[[ -f $conf ]] || fail "migration keeps the config when the drop-in is missing"
|
||||||
|
pass "migration keeps the config until the drop-in is installed"
|
||||||
|
|||||||
Reference in New Issue
Block a user