chore(nix): add version tracking and upgrade handling for amber-pm

1. 在包构建时写入版本文件到生成的状态目录
2. 在NixOS模块中添加版本检测逻辑,当版本变更时重新初始化状态
3. 新增首次初始化、版本升级和已有状态的不同处理流程
This commit is contained in:
2026-06-07 21:03:49 +08:00
parent 9fe7714b7b
commit 8fce0cad4a
2 changed files with 25 additions and 2 deletions
+22 -1
View File
@@ -29,8 +29,29 @@ in
boot.kernel.sysctl."kernel.apparmor_restrict_unprivileged_userns" = lib.mkDefault 0; boot.kernel.sysctl."kernel.apparmor_restrict_unprivileged_userns" = lib.mkDefault 0;
system.activationScripts.amber-pm-state = lib.mkIf cfg.initializeState '' system.activationScripts.amber-pm-state = lib.mkIf cfg.initializeState ''
if [ ! -e /var/lib/apm/apm ]; then target="/var/lib/apm/apm"
version_file="$target/.amber-pm-version"
current_version="${cfg.package.version}"
if [ ! -e "$target" ]; then
echo "APM state directory not found, initializing..."
${cfg.package}/bin/amber-pm-init-state ${cfg.package}/bin/amber-pm-init-state
echo "Running ace-init for first-time setup..."
/var/lib/apm/apm/files/bin/ace-init
elif [ -f "$version_file" ]; then
stored_version="$(cat "$version_file")"
if [ "$stored_version" != "$current_version" ]; then
echo "APM version changed ($stored_version -> $current_version), re-initializing..."
${cfg.package}/bin/amber-pm-init-state --force
echo "Running ace-init..."
/var/lib/apm/apm/files/bin/ace-init
else
echo "APM version unchanged ($current_version), skipping ace-init."
fi
else
echo "No version file found, refreshing state and running ace-init..."
${cfg.package}/bin/amber-pm-init-state --force
/var/lib/apm/apm/files/bin/ace-init
fi fi
''; '';
}; };
+3 -1
View File
@@ -174,13 +174,15 @@ fi
mkdir -p "$target" mkdir -p "$target"
cp -a "$seed"/. "$target"/ cp -a "$seed"/. "$target"/
echo '@version@' > "$target/.amber-pm-version"
chmod -R u+rwX "$target" chmod -R u+rwX "$target"
echo "Initialized $target" echo "Initialized $target"
echo "Next step: run '/var/lib/apm/apm/files/bin/ace-init' as root, or run 'apm --help' for CLI smoke testing." echo "Next step: run '/var/lib/apm/apm/files/bin/ace-init' as root, or run 'apm --help' for CLI smoke testing."
EOF EOF
substituteInPlace "$out/bin/amber-pm-init-state" \ substituteInPlace "$out/bin/amber-pm-init-state" \
--replace-fail '@bash@' '${bash}' \ --replace-fail '@bash@' '${bash}' \
--replace-fail '@out@' "$out" --replace-fail '@out@' "$out" \
--replace-fail '@version@' '${version}'
chmod +x "$out/bin/amber-pm-init-state" chmod +x "$out/bin/amber-pm-init-state"
runHook postInstall runHook postInstall