aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2021-05-31 09:45:07 +0200
committerOliver Smith <osmith@sysmocom.de>2021-06-01 09:13:57 +0200
commit41ee4e8534e50e5d565bf73c2144860331c635a4 (patch)
tree5f98b0394f3bc83e95cd3b723041b357183f5189
parentca8e6efca611c955f62981ea4ff2316e5a8cc794 (diff)
Add post-upgrade script for automatic db upgradeosmith/auto-db-upgrade
-rw-r--r--contrib/Makefile.am10
-rw-r--r--contrib/osmo-hlr-post-upgrade.sh95
-rw-r--r--contrib/osmo-hlr.spec.in5
-rw-r--r--debian/osmo-hlr.install1
-rwxr-xr-xdebian/postinst5
5 files changed, 116 insertions, 0 deletions
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index cfd0b15..37c4aa4 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -2,3 +2,13 @@ SUBDIRS = \
systemd \
dgsm \
$(NULL)
+
+EXTRA_DIST = osmo-hlr-post-upgrade.sh
+
+install-data-hook:
+ install -Dm755 $(srcdir)/osmo-hlr-post-upgrade.sh \
+ -t $(DESTDIR)$(datadir)/osmocom/
+
+uninstall-hook:
+ @$(PRE_UNINSTALL)
+ $(RM) $(DESTDIR)$(datadir)/osmocom/osmo-hlr-post-upgrade.sh
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
diff --git a/contrib/osmo-hlr.spec.in b/contrib/osmo-hlr.spec.in
index c4029be..d0a1b57 100644
--- a/contrib/osmo-hlr.spec.in
+++ b/contrib/osmo-hlr.spec.in
@@ -136,10 +136,13 @@ make %{?_smp_mflags} check || (find . -name testsuite.log -exec cat {} +)
%pre
%service_add_pre %{name}.service
+%endif
%post
+%if 0%{?suse_version}
%service_add_post %{name}.service
%endif
+/usr/share/osmocom/osmo-hlr-post-upgrade.sh
%post -n libosmo-gsup-client0 -p /sbin/ldconfig
%postun -n libosmo-gsup-client0 -p /sbin/ldconfig
@@ -162,6 +165,8 @@ make %{?_smp_mflags} check || (find . -name testsuite.log -exec cat {} +)
%dir %{_sysconfdir}/osmocom
%config %{_sysconfdir}/osmocom/osmo-hlr.cfg
%{_unitdir}/osmo-hlr.service
+%dir %{_datadir}/osmocom
+%{_datadir}/osmocom/osmo-hlr-post-upgrade.sh
%files -n libosmo-gsup-client0
%{_libdir}/libosmo-gsup-client.so.0*
diff --git a/debian/osmo-hlr.install b/debian/osmo-hlr.install
index 1b2cb56..421d5f4 100644
--- a/debian/osmo-hlr.install
+++ b/debian/osmo-hlr.install
@@ -5,4 +5,5 @@
/usr/share/doc/osmo-hlr/sql/hlr.sql
/usr/share/doc/osmo-hlr/sql/hlr_data.sql
/usr/share/doc/osmo-hlr/examples/osmo-hlr.cfg
+/usr/share/osmocom/osmo-hlr-post-upgrade.sh
/var/lib/osmocom
diff --git a/debian/postinst b/debian/postinst
new file mode 100755
index 0000000..390d304
--- /dev/null
+++ b/debian/postinst
@@ -0,0 +1,5 @@
+#!/bin/sh -e
+# Debian's postinst script is called on both installation and upgrade. Call the
+# post-upgrade script in both cases, it won't do anything if there is nothing
+# to do.
+/usr/share/osmocom/osmo-hlr-post-upgrade.sh