Change in osmo-hlr[master]: Add post-upgrade script for automatic db upgrade

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

osmith gerrit-no-reply at lists.osmocom.org
Tue Jun 1 07:26:26 UTC 2021


osmith has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-hlr/+/24493 )


Change subject: Add post-upgrade script for automatic db upgrade
......................................................................

Add post-upgrade script for automatic db upgrade

Closes: OS#5138
Change-Id: I34e943e5020285f63a2162010eb42675af1520bf
---
M contrib/Makefile.am
A contrib/osmo-hlr-post-upgrade.sh
M contrib/osmo-hlr.spec.in
M debian/osmo-hlr.install
A debian/postinst
5 files changed, 116 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-hlr refs/changes/93/24493/1

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 @@
 	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 at 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 @@
 
 %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 @@
 %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

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-hlr/+/24493
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-Change-Id: I34e943e5020285f63a2162010eb42675af1520bf
Gerrit-Change-Number: 24493
Gerrit-PatchSet: 1
Gerrit-Owner: osmith <osmith at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210601/da7d09ab/attachment.htm>


More information about the gerrit-log mailing list