130 lines
3.7 KiB
Bash
Executable File
130 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
if [ -f "${SCRIPT_DIR}/platform-paths.sh" ]; then
|
|
# shellcheck source=platform-paths.sh
|
|
. "${SCRIPT_DIR}/platform-paths.sh"
|
|
else
|
|
# shellcheck source=../../pkg/common/platform-paths.sh
|
|
. "${SCRIPT_DIR}/../../pkg/common/platform-paths.sh"
|
|
fi
|
|
backone_resolve_paths
|
|
|
|
HOME_DIR="${BACKONE_HOME}"
|
|
STAMP="${HOME_DIR}/.installed-version"
|
|
LOG_DIR="${BACKONE_LOG_DIR:-/var/log/backone}"
|
|
LOG_FILE="${LOG_DIR}/updater.log"
|
|
MIGRATIONS="${BACKONE_ADDONS_DIR}/updater/migrations"
|
|
LEGACY_HOME="/var/lib/zerotier-one"
|
|
|
|
log() {
|
|
mkdir -p "$LOG_DIR"
|
|
echo "$(date -Iseconds) $*" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
read_version() {
|
|
if [ -f "$STAMP" ]; then
|
|
cat "$STAMP"
|
|
else
|
|
echo '{"package":"backone","version":"0.0.0","schemaVersion":0}'
|
|
fi
|
|
}
|
|
|
|
write_version() {
|
|
local version="${1:-$(cat debian/version 2>/dev/null || echo 1.15.0)}"
|
|
mkdir -p "$HOME_DIR"
|
|
cat > "$STAMP" <<EOF
|
|
{"package":"backone","version":"${version}","schemaVersion":2,"updatedAt":"$(date -Iseconds)"}
|
|
EOF
|
|
chown backone:backone "$STAMP" 2>/dev/null || true
|
|
}
|
|
|
|
run_migrations() {
|
|
local scope="${1:-all}"
|
|
[ -d "$MIGRATIONS" ] || return 0
|
|
for script in "$MIGRATIONS"/*; do
|
|
[ -f "$script" ] || continue
|
|
case "$(basename "$script")" in
|
|
001_*)
|
|
[ "$scope" = "all" ] || [ "$scope" = "core" ] || continue
|
|
;;
|
|
002_*)
|
|
[ "$scope" = "all" ] || [ "$scope" = "core" ] || continue
|
|
;;
|
|
003_*)
|
|
[ "$scope" = "all" ] || [ "$scope" = "core" ] || continue
|
|
;;
|
|
*)
|
|
if [ "$scope" != "all" ] && [ "$scope" != "$ADDON_SCOPE" ]; then
|
|
continue
|
|
fi
|
|
;;
|
|
esac
|
|
log "Running migration: $(basename "$script")"
|
|
BACKONE_HOME="$HOME_DIR" bash "$script" || log "Migration warning: $(basename "$script")"
|
|
done
|
|
}
|
|
|
|
migrate_zerotier() {
|
|
if [ -d "$LEGACY_HOME" ] && [ ! -f "$HOME_DIR/identity.public" ]; then
|
|
log "Migrating $LEGACY_HOME -> $HOME_DIR"
|
|
mkdir -p "$HOME_DIR"
|
|
cp -a "$LEGACY_HOME/." "$HOME_DIR/" 2>/dev/null || true
|
|
ln -sfn "$HOME_DIR" "$LEGACY_HOME" 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
rebuild_manifest() {
|
|
local registry="${HOME_DIR}/addons.d/enabled.json"
|
|
mkdir -p "${HOME_DIR}/addons.d"
|
|
if [ ! -f "$registry" ]; then
|
|
echo '[]' > "$registry"
|
|
fi
|
|
local script_dir manifest_script
|
|
script_dir="$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" && pwd)"
|
|
manifest_script="${script_dir}/rebuild-addon-manifest.sh"
|
|
if [ ! -x "$manifest_script" ]; then
|
|
echo "backone-updater: ${manifest_script} not found" >&2
|
|
exit 1
|
|
fi
|
|
local count
|
|
count="$(BACKONE_HOME="$HOME_DIR" BACKONE_ADDONS_DIR="${BACKONE_ADDONS_DIR}" bash "$manifest_script")"
|
|
log "Wrote ${HOME_DIR}/app/addons/manifest.json (${count} UI addons)"
|
|
}
|
|
|
|
cmd_migrate() {
|
|
local scope="all"
|
|
ADDON_SCOPE=""
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--core) scope="core"; shift ;;
|
|
--addon) ADDON_SCOPE="$2"; scope="addon"; shift 2 ;;
|
|
--dry-run)
|
|
log "Dry run: would migrate scope=$scope addon=$ADDON_SCOPE"
|
|
ls -1 "$MIGRATIONS" 2>/dev/null || true
|
|
exit 0
|
|
;;
|
|
*) shift ;;
|
|
esac
|
|
done
|
|
migrate_zerotier
|
|
run_migrations "$scope"
|
|
write_version
|
|
rebuild_manifest
|
|
log "Migration complete"
|
|
}
|
|
|
|
cmd_status() {
|
|
echo "Installed: $(read_version)"
|
|
echo "Package version: $(cat "${BACKONE_ADDONS_DIR}/comms-core/addon.json" 2>/dev/null | grep '"version"' | head -1 || cat debian/version 2>/dev/null || echo unknown)"
|
|
echo "Addons registry: ${HOME_DIR}/addons.d/enabled.json"
|
|
}
|
|
|
|
case "${1:-}" in
|
|
migrate) shift; cmd_migrate "$@" ;;
|
|
status) cmd_status ;;
|
|
rebuild-manifest) rebuild_manifest ;;
|
|
*) echo "Usage: backone-updater migrate [--core|--addon ID] [--dry-run] | status | rebuild-manifest" >&2; exit 1 ;;
|
|
esac
|