Wax/Trace: auto-restore captured backup ZIP during imaging

Wires the three pieces that make the per-bay backup restore happen as
part of the PXE imaging pass, no manual post-imaging step required:

1. sync-waxtrace.sh: stage per-asset backup ZIPs from
   /home/camp/pxe-images/wt/<asset>/formtracepak_backup_*.zip (newest)
   into installers-post/waxtrace/backups/<asset>.zip on the PXE share.
   Also pushes scripts/Install-FormtracepakSettings.ps1 alongside the
   bootstrap bundle so 09-Setup can call it post-vendor-install.
2. startnet.cmd: after the FTPak ISO cherry-pick, xcopy
   Y:\installers-post\waxtrace\backups\%MACHINENUM%.zip to
   W:\WaxTrace-Install\backup\%MACHINENUM%.zip. Logs INFO if no per-asset
   ZIP exists - 09-Setup will then skip the restore step.
3. 09-Setup-WaxAndTrace.ps1 Step 3b: between cal ISO and OpenText
   auto-start steps, look for C:\WaxTrace-Install\backup\<asset>.zip
   and invoke Install-FormtracepakSettings.ps1 -BackupPath ...
   -RestoreData -RestoreConfig -Force. Registry restore is intentionally
   omitted - captured HKLM is overwritten by the vendor MSI install in
   Step 2 anyway, and captured HKEY_USERS would land at the source
   bay's SID (which doesn't exist on the freshly imaged bay).

bay-config.csv refresh: 17 captured bays with full version/model/
user_id/hw_sn/hw_id/host. Versions stick to the original bay-config.csv
target values where the live binary drifted to a release we don't have
an ISO for (e.g. WJRP2035 live 5.7.0.82 -> imaging targets 6.0).
WJF00450 flagged MISSING_DATA in user_id + hw_id columns so the
imaging path aborts cleanly until the dongle is read.

Smoke tested on win11 VM with WJF00545's real capture: staged the
expected bay-side layout (C:\WaxTrace-Install\Install-FormtracepakSettings.ps1
+ C:\WaxTrace-Install\backup\WJF00545.zip), invoked the resolve +
call path from a simulated Step 3b - 17 files restored cleanly, 0
errors.
This commit is contained in:
cproudlock
2026-05-24 12:55:37 -04:00
parent 6602afde38
commit d0dcce5427
4 changed files with 101 additions and 16 deletions

View File

@@ -74,6 +74,13 @@ fi
if [ -f "$WAXTRACE_DIR/resolve-bay-config.ps1" ]; then
cp "$WAXTRACE_DIR/resolve-bay-config.ps1" "$STAGE/"
fi
# Install-FormtracepakSettings.ps1 - called from 09-Setup-WaxAndTrace.ps1
# Step 3b to restore captured layouts / prefs / data from the per-asset
# backup ZIP. Path on the bay post-startnet-xcopy:
# C:\WaxTrace-Install\Install-FormtracepakSettings.ps1.
if [ -f "$WAXTRACE_DIR/scripts/Install-FormtracepakSettings.ps1" ]; then
cp "$WAXTRACE_DIR/scripts/Install-FormtracepakSettings.ps1" "$STAGE/"
fi
cp "$WAXTRACE_DIR/captured-binary/prereqs/"*.exe "$STAGE/prereqs/"
# FormTracePak vendor installer ISOs - all available versions get pushed.
@@ -99,11 +106,34 @@ if [ -d "$CAL_ISO_DIR" ]; then
cp "$CAL_ISO_DIR/INDEX.csv" "$STAGE/calibrations/" 2>/dev/null || true
fi
# Per-asset FormTracePak backup ZIPs. The tech captures these on the live
# bays via Backup-FormtracepakSettings.bat (lands at
# S:\DT\Shopfloor\backup\waxandtrace\<asset>\formtracepak_backup_*.zip on
# tsgwp00525), then mirrors them down to /home/camp/pxe-images/wt/<asset>/
# on this Linux host. Pick the newest ZIP per asset and stage as
# <asset>.zip so startnet.cmd can cherry-pick a known filename per bay.
BACKUP_SRC_DIR="${WAXTRACE_BACKUP_DIR:-/home/camp/pxe-images/wt}"
mkdir -p "$STAGE/backups"
BACKUP_COUNT=0
if [ -d "$BACKUP_SRC_DIR" ]; then
for asset_dir in "$BACKUP_SRC_DIR"/WJ*/; do
[ -d "$asset_dir" ] || continue
asset=$(basename "$asset_dir")
newest=$(ls -1t "$asset_dir"/formtracepak_backup_*.zip 2>/dev/null | head -1)
if [ -n "$newest" ] && [ -s "$newest" ]; then
cp "$newest" "$STAGE/backups/${asset}.zip"
BACKUP_COUNT=$((BACKUP_COUNT+1))
fi
done
fi
echo "Staged $BACKUP_COUNT per-asset backup ZIP(s) from $BACKUP_SRC_DIR"
echo "==> Local stage size: $(du -sh $STAGE | cut -f1)"
ls "$STAGE/"
ls "$STAGE/prereqs/"
ls "$STAGE/formtracepak/" 2>/dev/null || echo "(no FormTracePak ISO)"
ls "$STAGE/calibrations/" 2>/dev/null || echo "(no cal ISOs)"
ls "$STAGE/backups/" 2>/dev/null || echo "(no per-asset backup ZIPs)"
echo "==> Pushing to $PXE_USER@$PXE_HOST:$REMOTE_TEMP"
ssh_run "rm -rf '$REMOTE_TEMP' && mkdir -p '$REMOTE_TEMP'"