Skip to content

Commit 57cfa8b

Browse files
committed
fix: robust legacy backup migration — read repopath from system.ini
Previously the backup migration blindly assumed backup/restic-repo inside the apphub_data volume. Now the transform script: 1. Discovers the legacy system.ini FIRST, then reads [volume_backup] repopath 2. Maps the legacy container path (/data/...) to the volume-relative path 3. Falls back to default paths (backup/restic-repo, restic-repo) when repopath is unavailable or doesn't map 4. Emits clear diagnostic logs at every stage: - whether apphub_data volume was resolved on the host - which repopath was discovered and which source path was used - whether the copy succeeded or failed (no more silent 2>/dev/null) 5. Skips gracefully with an explicit log message when the volume is missing
1 parent 09e3ad0 commit 57cfa8b

1 file changed

Lines changed: 54 additions & 8 deletions

File tree

install/lib/upgrade-legacy.sh

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -341,14 +341,7 @@ if [ -d /legacy/apphub_logs ]; then
341341
cp -a /legacy/apphub_logs/. /data/logs/legacy-apphub/ 2>/dev/null || true
342342
fi
343343
344-
# ---------------- Legacy AppHub backup (restic-repo) ----------------
345-
if [ -d /legacy/apphub_data/backup/restic-repo ]; then
346-
log_step "Copying legacy app backup repository (restic-repo)"
347-
mkdir -p /data/backup/restic-repo
348-
cp -a /legacy/apphub_data/backup/restic-repo/. /data/backup/restic-repo/ 2>/dev/null || true
349-
fi
350-
351-
# ---------------- Legacy config handoff ----------------
344+
# ---------------- Legacy config handoff (must precede backup migration) ----------------
352345
cfg=""
353346
sysini=""
354347
product_auth_dir=""
@@ -369,6 +362,50 @@ done
369362
[ -n "$sysini" ] && { mkdir -p /data/.w9-migration; cp -a "$sysini" /data/.w9-migration/system.ini; } || true
370363
[ -f /legacy/docker-daemon.json ] && { mkdir -p /data/.w9-migration; cp -a /legacy/docker-daemon.json /data/.w9-migration/legacy-daemon.json; } || true
371364
365+
# ---------------- Legacy AppHub backup (restic-repo) ----------------
366+
# Must run AFTER config discovery so we can read the legacy repopath.
367+
if [ -d /legacy/apphub_data ]; then
368+
_w9_backup_src=""
369+
# 1) Respect the legacy system.ini repopath if available.
370+
if [ -n "$sysini" ] && [ -f "$sysini" ]; then
371+
_w9_legacy_repopath="$(ini_get "$sysini" volume_backup repopath)"
372+
if [ -n "$_w9_legacy_repopath" ]; then
373+
# Legacy repopath is typically /data/backup/restic-repo.
374+
# /data was a symlink to /app/data inside the old AppHub container,
375+
# so the volume-relative path is the repopath with /data/ stripped.
376+
_w9_rel="${_w9_legacy_repopath#/data/}"
377+
if [ -n "$_w9_rel" ] && [ "$_w9_rel" != "$_w9_legacy_repopath" ] && [ -d "/legacy/apphub_data/${_w9_rel}" ]; then
378+
_w9_backup_src="/legacy/apphub_data/${_w9_rel}"
379+
log_info "Legacy repopath from system.ini: ${_w9_legacy_repopath} -> volume path: ${_w9_rel}"
380+
fi
381+
fi
382+
fi
383+
# 2) Fallback: default path inside the volume.
384+
if [ -z "$_w9_backup_src" ] && [ -d /legacy/apphub_data/backup/restic-repo ]; then
385+
_w9_backup_src="/legacy/apphub_data/backup/restic-repo"
386+
log_info "Using default legacy backup path: backup/restic-repo"
387+
fi
388+
# 3) Fallback: restic-repo directly at volume root (older variants).
389+
if [ -z "$_w9_backup_src" ] && [ -d /legacy/apphub_data/restic-repo ]; then
390+
_w9_backup_src="/legacy/apphub_data/restic-repo"
391+
log_info "Using volume-root legacy backup path: restic-repo"
392+
fi
393+
394+
if [ -n "$_w9_backup_src" ]; then
395+
log_step "Copying legacy app backup repository from ${_w9_backup_src}"
396+
mkdir -p /data/backup/restic-repo
397+
if cp -a "${_w9_backup_src}/." /data/backup/restic-repo/; then
398+
log_info "Legacy app backup repository copied successfully"
399+
else
400+
log_info "WARNING: Failed to copy legacy app backup repository (cp exited non-zero)"
401+
fi
402+
else
403+
log_info "Legacy apphub_data volume is mounted but no backup repository found inside it"
404+
fi
405+
else
406+
log_info "Legacy apphub_data volume not found — skipping app backup migration"
407+
fi
408+
372409
if [ -n "$product_auth_dir" ] && [ -d "$product_auth_dir" ]; then
373410
log_step "Copying legacy product auth data"
374411
mkdir -p /data/config/product-auth
@@ -450,6 +487,15 @@ _legacy_transform_volumes() {
450487
_add_ro_volume apphub_logs apphub_logs
451488
_add_ro_volume apphub_media apphub_media
452489
_add_ro_volume apphub_data apphub_data
490+
491+
# Diagnostic: log whether the apphub_data (backup) volume was resolved.
492+
_w9_apphub_data_resolved="$(legacy_resolve_volume_for_role apphub_data 2>/dev/null || true)"
493+
if [ -n "$_w9_apphub_data_resolved" ]; then
494+
log_info "Legacy apphub_data volume resolved: ${_w9_apphub_data_resolved}"
495+
else
496+
log_info "Legacy apphub_data volume NOT found — app backups will not be migrated"
497+
fi
498+
453499
local host_compose_dir service_root_dir download_root_dir
454500
host_compose_dir="$(legacy_host_compose_dir 2>/dev/null || true)"
455501
service_root_dir="$(legacy_service_root_dir 2>/dev/null || true)"

0 commit comments

Comments
 (0)