mirror of
https://github.com/openhop-dev/openhop_repeater.git
synced 2026-09-02 00:58:33 +00:00
133 lines
4.7 KiB
Bash
Executable File
133 lines
4.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Update the Debian LXC and its openHop Repeater installation.
|
|
|
|
set -Eeuo pipefail
|
|
|
|
readonly REPO_DIR="/root/openhop-repeater"
|
|
readonly CONSOLE_REPO_DIR="/root/pymc_console"
|
|
readonly CONSOLE_REPO_URL="https://github.com/Treehouse-00/pymc_console-dist.git"
|
|
readonly CONSOLE_UI_DIR="/opt/pymc_console/web/html"
|
|
|
|
if [[ "$EUID" -ne 0 ]]; then
|
|
echo "This command must be run as root." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -d "$REPO_DIR/.git" || ! -f "$REPO_DIR/manage.sh" ]]; then
|
|
echo "openHop Repeater source checkout not found at $REPO_DIR." >&2
|
|
exit 1
|
|
fi
|
|
|
|
BRANCH=$(git -C "$REPO_DIR" branch --show-current)
|
|
if [[ -z "$BRANCH" ]]; then
|
|
echo "The openHop Repeater checkout is in detached HEAD state; update aborted." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -n "$(git -C "$REPO_DIR" status --porcelain)" ]]; then
|
|
echo "The openHop Repeater checkout has local changes; update aborted." >&2
|
|
exit 1
|
|
fi
|
|
|
|
CONSOLE_INSTALLED=false
|
|
CONSOLE_CHECKOUT=false
|
|
[[ -f "$CONSOLE_UI_DIR/index.html" ]] && CONSOLE_INSTALLED=true
|
|
[[ -d "$CONSOLE_REPO_DIR/.git" && -f "$CONSOLE_REPO_DIR/manage.sh" ]] \
|
|
&& CONSOLE_CHECKOUT=true
|
|
|
|
echo "This update will:"
|
|
echo " - update installed Debian packages"
|
|
echo " - fast-forward openHop Repeater branch: $BRANCH"
|
|
echo " - run openHop Repeater manage.sh upgrade"
|
|
if [[ "$CONSOLE_INSTALLED" == "true" && "$CONSOLE_CHECKOUT" == "true" ]]; then
|
|
echo " - fast-forward and upgrade openHop Console"
|
|
elif [[ "$CONSOLE_INSTALLED" == "true" ]]; then
|
|
echo " - create /root/pymc_console and upgrade openHop Console"
|
|
else
|
|
echo " - leave openHop Console unchanged (not installed)"
|
|
fi
|
|
echo ""
|
|
read -rp "Continue? [y/N]: " reply
|
|
if [[ ! "$reply" =~ ^[Yy]([Ee][Ss])?$ ]]; then
|
|
echo "Update cancelled."
|
|
exit 0
|
|
fi
|
|
|
|
echo "==> Checking openHop Repeater branch: $BRANCH"
|
|
git -C "$REPO_DIR" fetch origin --prune
|
|
if ! git -C "$REPO_DIR" show-ref --verify --quiet "refs/remotes/origin/$BRANCH"; then
|
|
echo "Remote branch origin/$BRANCH does not exist; update aborted." >&2
|
|
exit 1
|
|
fi
|
|
if ! git -C "$REPO_DIR" merge-base --is-ancestor HEAD "origin/$BRANCH"; then
|
|
echo "The local branch cannot be fast-forwarded to origin/$BRANCH; update aborted." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$CONSOLE_INSTALLED" == "true" ]]; then
|
|
if [[ "$CONSOLE_CHECKOUT" != "true" ]]; then
|
|
if [[ -e "$CONSOLE_REPO_DIR" ]]; then
|
|
echo "$CONSOLE_REPO_DIR exists but is not a valid Console checkout; update aborted." >&2
|
|
exit 1
|
|
fi
|
|
echo "==> Creating openHop Console checkout"
|
|
git clone --depth 1 --single-branch --branch main --no-tags \
|
|
"$CONSOLE_REPO_URL" "$CONSOLE_REPO_DIR"
|
|
CONSOLE_CHECKOUT=true
|
|
fi
|
|
|
|
CONSOLE_BRANCH=$(git -C "$CONSOLE_REPO_DIR" branch --show-current)
|
|
if [[ -z "$CONSOLE_BRANCH" ]]; then
|
|
echo "The openHop Console checkout is in detached HEAD state; update aborted." >&2
|
|
exit 1
|
|
fi
|
|
if [[ -n "$(git -C "$CONSOLE_REPO_DIR" status --porcelain)" ]]; then
|
|
echo "The openHop Console checkout has local changes; update aborted." >&2
|
|
exit 1
|
|
fi
|
|
git -C "$CONSOLE_REPO_DIR" fetch origin --prune
|
|
if ! git -C "$CONSOLE_REPO_DIR" show-ref --verify --quiet \
|
|
"refs/remotes/origin/$CONSOLE_BRANCH"; then
|
|
echo "Remote Console branch origin/$CONSOLE_BRANCH does not exist; update aborted." >&2
|
|
exit 1
|
|
fi
|
|
if ! git -C "$CONSOLE_REPO_DIR" merge-base --is-ancestor \
|
|
HEAD "origin/$CONSOLE_BRANCH"; then
|
|
echo "The local Console branch cannot be fast-forwarded; update aborted." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
|
|
echo "==> Updating Debian packages"
|
|
apt-get update
|
|
apt-get upgrade -y
|
|
|
|
echo "==> Updating openHop Repeater branch: $BRANCH"
|
|
git -C "$REPO_DIR" pull --ff-only origin "$BRANCH"
|
|
|
|
echo "==> Running openHop Repeater upgrade"
|
|
cd "$REPO_DIR"
|
|
OPENHOP_UPGRADE_REF="$BRANCH" TERM="${TERM:-xterm}" bash manage.sh upgrade
|
|
|
|
if [[ "$CONSOLE_INSTALLED" == "true" ]]; then
|
|
echo "==> Updating openHop Console branch: $CONSOLE_BRANCH"
|
|
git -C "$CONSOLE_REPO_DIR" pull --ff-only origin "$CONSOLE_BRANCH"
|
|
echo "==> Running openHop Console upgrade"
|
|
cd "$CONSOLE_REPO_DIR"
|
|
ASSUME_YES=1 NO_COLOR=1 bash manage.sh upgrade
|
|
fi
|
|
|
|
# Keep the documented management copy in /opt aligned with the source used for
|
|
# this successful upgrade.
|
|
install -m 0755 "$REPO_DIR/manage.sh" /opt/openhop_repeater/manage.sh
|
|
|
|
# Refresh the installed helper for the next run without replacing this script
|
|
# until all update steps have completed successfully.
|
|
install -m 0755 "$REPO_DIR/scripts/openhop-update" /usr/local/bin/openhop-update.new
|
|
mv /usr/local/bin/openhop-update.new /usr/local/bin/openhop-update
|
|
ln -sfn /usr/local/bin/openhop-update /usr/local/bin/update
|
|
|
|
echo "==> Update complete"
|