summaryrefslogblamecommitdiffstats
path: root/satellit_upgrader/updater.template.sh
blob: 427d2886657859addb506c8f3f88cfcec109c9e7 (plain) (tree)





































                                                                                                      
                                         

                                             


                                                      










                                                                               
                                                                                                                                   
                                                                                     




                                                                                                            
 
                                                            





                                                                                    


























                                                                                                                                            




                   
#!/bin/bash

# Use special param to make sure we're running under bash (in case user does "sh install.sh")
[ "x$1" != "x--exec-self" ] && exec /bin/bash "$0" --exec-self "$@"

IGNORE_ERRORS=
while [ $# -gt 0 ]; do
	[ "x$1" = "x--ignore-errors" ] && IGNORE_ERRORS=jup
	shift
done

declare -rg SELFPID=$$
perror () {
	if [ -n "$IGNORE_ERRORS" ]; then
		echo "[ERROR] $@"
		return 0
	fi
	echo "[FATAL] $@"
	[ "$$" != "$SELFPID" ] && kill "$SELFPID"
	exit 1
}

if [ "$UID" != "0" ]; then
	perror "Must be running as root"
fi

# ** Extract value from text file containing key=value pairs
extractfield () {
	grep -m1 "^\s*$2\b" "$1" | awk -F '=' '{print $2}' | sed 's/\s//g'
}

# ** Wrap mysql command line client so we're always using the deb-sys-maint credentials
mysql () {
	"$(which mysql)" --defaults-extra-file=/etc/mysql/debian.cnf --default-character-set=utf8 "$@"
}

# ** Constants - to be patched by the packaging script
declare -rg TARGET_WEBIF_VERSION="%TARGET_WEBIF_VERSION%"
declare -rg TGZ_SLXADMIN="%TGZ_SLXADMIN%"
declare -rg PAYLOAD_OFFSET="%PAYLOAD_OFFSET%"

# ** Constants - hardcoded or determined at runtime
declare -rg PATH_SLXADMIN="/srv/openslx/www/slx-admin"

# ** Check if constants have been filled, bail out otherwise
if [ -z "$TARGET_WEBIF_VERSION" ] || [[ "$TARGET_WEBIF_VERSION" == %*% ]]; then
	perror "Bad upgrader: TARGET_WEBIF_VERSION not set"
fi
if [ -z "$PAYLOAD_OFFSET" ] || [[ "$PAYLOAD_OFFSET" == %*% ]]; then
	perror "Bad upgrader: PAYLOAD_OFFSET not set"
fi

# **********************************************************

# Get current webif version
declare -rg CURRENT_WEBIF_VERSION=$(mysql -e 'SELECT value FROM openslx.property WHERE name = "webif-version" LIMIT 1' | tail -n 1)
[ -z "$CURRENT_WEBIF_VERSION" ] && perror "Could not determine current webif version"
if [ "$TARGET_WEBIF_VERSION" = "missing" ] || [ "$CURRENT_WEBIF_VERSION" -le "$TARGET_WEBIF_VERSION" ]; then
	:
else
	perror "This update seems to be older than the server version you're currently running"
fi

# ************** Extract payload ***************************
TMPDIR=$(mktemp -d)
[ -z "$TMPDIR" ] && perror "Could not create temporary directory for installer"
dd "bs=$PAYLOAD_OFFSET" "if=$0" skip=1 | tar -z -x -C "$TMPDIR"
RET=$?
[ "$RET" -ne 0 ] && perror "Extracting installer payload failed with exit code $RET"

# **********************************************************

# ************************** SLX-Admin *********************
if [ -n "$TGZ_SLXADMIN" ]; then
	[ -e "$TMPDIR/$TGZ_SLXADMIN" ] || perror "$TGZ_SLXADMIN missing from payload."
	echo "* SLX-Admin: $CURRENT_WEBIF_VERSION -> $TARGET_WEBIF_VERSION"
	# Cheap hack: extract, then delete, extract again to get rid of old unused files. If the extraction fails, we don't leave
	# the user with a broken webif, because we didn't remove the directories yet
	tar -x -C "$PATH_SLXADMIN" -f "$TMPDIR/$TGZ_SLXADMIN" || perror "Could not extract $TGZ_SLXADMIN to $PATH_SLXADMIN"
	rm -rf -- "$PATH_SLXADMIN/inc" "$PATH_SLXADMIN/apis" "$PATH_SLXADMIN/modules" "$PATH_SLXADMIN/templates"
	tar -x -C "$PATH_SLXADMIN" -f "$TMPDIR/$TGZ_SLXADMIN"
	rm -- "$PATH_SLXADMIN/config.php.example"
	chmod -R go+rX-w,u+rwX "$PATH_SLXADMIN"
	chown -R root:root "$PATH_SLXADMIN"
	chmod 0640 "$PATH_SLXADMIN/config.php"
	chown root:www-data "$PATH_SLXADMIN/config.php"
	curl -s "http://localhost/slx-admin/api.php?do=update" > /dev/null
	curl -s "http://localhost/slx-admin/api.php?do=update" | grep -q 'Up to date' || perror "Updating the web interface database failed"
	echo "Web interface upgrade complete"
fi

# ************************* Dozmod *************************
echo "* Dozentenmodul"
echo "Adjusting mysql permissions of user sat"
mysql -e 'GRANT CREATE, ALTER ON sat.* TO sat@localhost' || perror "Could not GRANT permissions ON sat.* to sat@localhost"
mysql -e 'GRANT SELECT ON openslx.location TO sat@localhost' || perror "Could not GRANT permissions ON openslx.location to sat@localhost"


# File end
exit 0
# Payload to follow