diff options
Diffstat (limited to 'contrib/osmo-hlr-post-upgrade.sh')
-rw-r--r-- | contrib/osmo-hlr-post-upgrade.sh | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/contrib/osmo-hlr-post-upgrade.sh b/contrib/osmo-hlr-post-upgrade.sh new file mode 100644 index 0000000..88416a1 --- /dev/null +++ b/contrib/osmo-hlr-post-upgrade.sh @@ -0,0 +1,95 @@ +#!/bin/sh -e +# SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright 2021 sysmocom s.f.m.c GmbH <info@sysmocom.de> +# +# Packagers are supposed to call this script in post-upgrade, so it can safely +# upgrade the database scheme if required. + +DB="/var/lib/osmocom/hlr.db" +IS_ACTIVE=0 + +msg() { + echo "osmo-hlr-post-upgrade: $@" +} + +err() { + msg "ERROR: $@" +} + +open_db() { + # Attempt to open the database with osmo-hlr-db-tool, it will fail if + # upgrading the schema is required + osmo-hlr-db-tool -s -l "$DB" create +} + +check_upgrade_required() { + if ! [ -e "$DB" ]; then + msg "nothing to do (no existing database)" + exit 0 + fi + + if open_db 2>/dev/null; then + msg "nothing to do (database version is up to date)" + exit 0 + fi + + msg "database upgrade is required" +} + +stop_service() { + if systemctl is-active -q osmo-hlr; then + IS_ACTIVE=1 + msg "stopping osmo-hlr service" + systemctl stop osmo-hlr + + # Verify that it stopped + for i in $(seq 1 100); do + if ! systemctl is-active -q osmo-hlr; then + return + fi + sleep 0.1 + done + + err "failed to stop osmo-hlr service" + exit 1 + else + msg "osmo-hlr service is not running" + fi +} + +create_backup() { + backup="$DB.$(date +%Y%m%d%H%M%S).bak" + msg "creating backup: $backup" + if [ -e "$backup" ]; then + err "backup already exists: $backup" + exit 1 + fi + cp "$DB" "$backup" +} + +upgrade() { + msg "performing database upgrade" + osmo-hlr-db-tool -s -U -l "$DB" create + + if ! open_db 2>/dev/null; then + err "failed to open the database after upgrade" + err "osmo-hlr-db-tool output:" + open_db + # exit because of "set -e" + fi + + msg "database upgrade successful" +} + +start_service() { + if [ "$IS_ACTIVE" = "1" ]; then + msg "starting osmo-hlr service" + systemctl start osmo-hlr + fi +} + +check_upgrade_required +stop_service +create_backup +upgrade +start_service |