blob: eaef41777934e6a6f0a0fdcce44daa49b8dc09fb [file] [log] [blame]
Oliver Smith60673e72021-05-31 09:45:07 +02001#!/bin/sh -e
2# SPDX-License-Identifier: AGPL-3.0-or-later
3# Copyright 2021 sysmocom s.f.m.c GmbH <info@sysmocom.de>
4#
5# Packagers are supposed to call this script in post-upgrade, so it can safely
6# upgrade the database scheme if required.
7
8DB="/var/lib/osmocom/hlr.db"
9IS_ACTIVE=0
10
11msg() {
12 echo "osmo-hlr-post-upgrade: $@"
13}
14
15err() {
16 msg "ERROR: $@"
17}
18
19open_db() {
20 # Attempt to open the database with osmo-hlr-db-tool, it will fail if
21 # upgrading the schema is required
22 osmo-hlr-db-tool -s -l "$DB" create
23}
24
25check_upgrade_required() {
26 if ! [ -e "$DB" ]; then
27 msg "nothing to do (no existing database)"
28 exit 0
29 fi
30
31 if open_db 2>/dev/null; then
32 msg "nothing to do (database version is up to date)"
33 exit 0
34 fi
35
36 msg "database upgrade is required"
37}
38
39stop_service() {
40 if systemctl is-active -q osmo-hlr; then
41 IS_ACTIVE=1
42 msg "stopping osmo-hlr service"
43 systemctl stop osmo-hlr
44
45 # Verify that it stopped
46 for i in $(seq 1 100); do
47 if ! systemctl is-active -q osmo-hlr; then
48 return
49 fi
50 sleep 0.1
51 done
52
53 err "failed to stop osmo-hlr service"
54 exit 1
55 else
56 msg "osmo-hlr service is not running"
57 fi
58}
59
60create_backup() {
61 backup="$DB.$(date +%Y%m%d%H%M%S).bak"
62 msg "creating backup: $backup"
63 if [ -e "$backup" ]; then
64 err "backup already exists: $backup"
65 exit 1
66 fi
67 cp "$DB" "$backup"
68}
69
70upgrade() {
71 msg "performing database upgrade"
72 osmo-hlr-db-tool -s -U -l "$DB" create
73
74 if ! open_db 2>/dev/null; then
75 err "failed to open the database after upgrade"
76 err "osmo-hlr-db-tool output:"
77 open_db
78 # exit because of "set -e"
79 fi
80
81 msg "database upgrade successful"
82}
83
84start_service() {
85 if [ "$IS_ACTIVE" = "1" ]; then
86 msg "starting osmo-hlr service"
87 systemctl start osmo-hlr
88 fi
89}
90
91check_upgrade_required
92stop_service
93create_backup
94upgrade
95start_service