Mercurial > trustbridge
diff packaging/linux-installer-common.inc.in @ 1139:1c9001db6ea2
Split up linux installer in to be able to create a uninstaller (TODO).
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Wed, 17 Sep 2014 18:53:04 +0200 |
parents | |
children | 96ecd345c961 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/packaging/linux-installer-common.inc.in Wed Sep 17 18:53:04 2014 +0200 @@ -0,0 +1,187 @@ +#-*-sh-*- +ME=`basename "$0"` +DEFAULT_PREFIX="$HOME/TrustBridge" +SYSDEFAULT_PREFIX="/usr/local" +CFGPATH="${XDG_CONFIG_HOME:-$HOME/.config}/BSI" +DATAPATH="${XDG_DATA_HOME:-$HOME/.local/share}/BSI/TrustBridge" +SYSCFGPATH="/etc/TrustBridge" +# FIXME: +# Set the real data path for system wide installation once its known. +SYSDATAPATH="$DATAPATH" +INSTCFGNAME="TrustBridge-inst.cfg" +FORCE=0 +SYSINST=0 +DEINSTALL=0 +UPDATE=0 +BINNAMES="###BINNAMES###" +ICONNAME="###ICONNAME###" +HELPNAMES="###HELPNAMES###" +HELPNAMES_SOURCES="###HELPNAMES_SOURCES###" +HELPNAMES_STATIC="###HELPNAMES_STATIC###" +HELPNAMES_IMG="###HELPNAMES_IMG###" +ARCH="###ARCH###" + +declare -A instcfg oldinstcfg +declare inst_default_prefix instdata_path instcfg_path instcfg_file +instcfg=( + [TIMESTMP]=`date -u +%Y%m%d%H%M%S` + [VERSION]='@PROJECT_VERSION@' + [PREFIX]='' +) +oldinstcfg=( + [TIMESTMP]='' + [VERSION]='' + [PREFIX]='' +) + +declare -A L10N_DE +###INCLUDE:linux-installer.l10n-de + +getxt() +{ + # Poor mans gettext for l10n completely self contained in one shell + # script. + MSGID="$1" + shift + case ${LANGUAGE:-${LC_ALL:-${LC_MESSAGES:-$LANG}}} in + de*) + if [ "${L10N_DE[$MSGID]}" ] ; then + MSG="${L10N_DE[$MSGID]}" + else + MSG="$MSGID" + fi + ;; + *) + MSG="$MSGID" + ;; + esac + + printf "$MSG" "$@" +} + +version() +{ + cat <<EOF +TrustBridge ${instcfg[VERSION]} Installer + +Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik +Software engineering by Intevation GmbH + +This file is Free Software under the GNU GPL (v>=2) +and comes with ABSOLUTELY NO WARRANTY! +See LICENSE.txt for details. +EOF + exit 0 +} + +fatal() +{ + getxt "$1" >&2 + if [ $DEINSTALL -eq 1 ] ; then + getxt "Deinstallation failed.\n" >&2 + else + getxt "Installation failed.\n" >&2 + fi + exit 1 +} + +yorn() +{ + local c + while true ; do + read -n 1 c + echo + case "$c" in + y|Y|j|J) + return 0 + ;; + n|N) + return 1 + ;; + *) + getxt >&2 "Answer [Y]es or [N]o:\n" + esac + done +} + +check_priv() +{ + if [ $SYSINST -eq 1 -a "$UID" -ne 0 ] ; then + fatal "System wide installation or deinstallation requires root privileges!\n" + fi +} + +init_vars() +{ + if [ -n "${SUDO_USER-}" ] ; then + # Default to system wide installation when running with sudo + SYSINST=1 + fi + + if [ $SYSINST -eq 1 ] ; then + inst_default_prefix="$SYSDEFAULT_PREFIX" + instcfg_path="${SYSCFGPATH}" + instdata_path="${SYSDATAPATH}" + autostart_path="$(getent passwd "${SUDO_USER}" | cut -d ':' -f 6)/.config/autostart" + startmenu_path="/usr/share/applications" + else + inst_default_prefix="$DEFAULT_PREFIX" + instcfg_path="${CFGPATH}" + instdata_path="${DATAPATH}" + autostart_path=${XDG_CONFIG_HOME:-~/.config/autostart} + startmenu_path=${XDG_DATA_HOME:-~/.local/share/applications} + if [ $DEINSTALL -eq 1 ] ; then + if [ ! -r ${instcfg_path}/${INSTCFGNAME} ]; then + if [ -r ${SYSCFGPATH}/${INSTCFGNAME} ]; then + # Fall back to system uninstallation if no user config found + SYSINST=1 + init_vars + check_priv + fi + fi + else + # extra bin path not needed on deinstall: + extra_bin_path=`mktemp --tmpdir -d tmpbin.XXXXXXXXXX` + fi + fi + instcfg_file="${instcfg_path}/${INSTCFGNAME}" + HOST_ARCH=$(uname -m) +} + +read_oldinstcfg() +{ + if [ -r "$instcfg_file" ] ; then + getxt "Reading '%s' ...\n" "$instcfg_file" + for key in "${!oldinstcfg[@]}" ; do + oldinstcfg[$key]=`sed -n "/$key/s/[^=]*=\(.*\)/\1/p" "$instcfg_file"` + done + fi +} + + +setup_cronjob() +{ + local tmpcrontab=`mktemp` + + if [ $SYSINST -eq 1 -a "${SUDO_USER+X}" ] ; then + local crontabopt="-u $SUDO_USER" + else + local crontabopt='' + fi + + if [ "$1" != "deinstall" ] ; then + local trustbridge_tray_starter="${instcfg[PREFIX]}/bin/trustbridge-tray-starter.sh" + else + local trustbridge_tray_starter="${oldinstcfg[PREFIX]}/bin/trustbridge-tray-starter.sh" + fi + + crontab $crontabopt -l | \ + grep -vF "$trustbridge_tray_starter" \ + >"$tmpcrontab" + if [ "$1" != "deinstall" ] ; then + echo "$(( $RANDOM / 555 )) 12 * * * \"$trustbridge_tray_starter\"" \ + >>"$tmpcrontab" + fi + crontab $crontabopt "$tmpcrontab" + rm "$tmpcrontab" +}