mirror of
https://gitee.com/amber-ce/amber-pm
synced 2026-06-21 21:53:55 +08:00
chore(nix): add version tracking and upgrade handling for amber-pm
1. 在包构建时写入版本文件到生成的状态目录 2. 在NixOS模块中添加版本检测逻辑,当版本变更时重新初始化状态 3. 新增首次初始化、版本升级和已有状态的不同处理流程
This commit is contained in:
+22
-1
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user