wilde@680: #!/bin/bash bernhard@1048: # Um TrustBridge zu installieren: bernhard@1048: # 1. Prüfen Sie ob Sie dieser Datei genügend vertrauen, um ihr die Kontrolle bernhard@1048: # über diesen Rechner zu übergeben. Beispielsweise durch Vergleich mit bernhard@1048: # einer starken Prüfsumme aus einer zweiten, unabhängigen Quelle. bernhard@1048: # 2. Öffnen Sie eine Kommandozeile, z.B. klicken Sie auf das "Terminal"-Symbol. bernhard@1048: # 3. Wechseln Sie in das Verzeichnis, in welchem diese Datei gespeichert ist. bernhard@1048: # Geben Sie Z.B. in die Kommandozeile ein: cd ~/Schreibtisch bernhard@1049: # 4. Starten Sie die Anwendung auf der Kommandozeile, beispielsweise bernhard@1049: # als Installation nur für den aktuellen Nutzer, indem Sie eingeben: bernhard@1049: # bash TrustBridge-1.0.0-i386.sh bernhard@1048: # Tipp: Die Tab-Taste nach dem "Tr" ergänzt oft den ganzen Namen. bernhard@1048: # bernhard@1048: # NB: Wir konnten kein übliches .deb Paket verwenden, da wir Ihnen bernhard@1048: # auch die Installation als reiner Nutzer ohne Admin-Rechte ermöglichen. bernhard@1048: # bernhard@1048: # To install TrustBridge: bernhard@1048: # 1. Verify that you trust this specific file far enough, that you are willing bernhard@1048: # to hand over the control of your computer to it. For example compare bernhard@1048: # a strong checksum of the file to one from a second, independent source. bernhard@1048: # 2. Open a command line, e.g. click on the "Terminal"-Symbol. bernhard@1048: # 3. Change your working directory to where this file is stored. bernhard@1048: # For example type "cd ~/Desktop" on your command line. bernhard@1049: # 4. Start the installation on the command line, e.g. for the current user bernhard@1049: # only by typing something like "bash TrustBridge-1.0.0-i386.sh". bernhard@1049: # Hint: If you press the tab-key after "Tr" it may complete the filename. bernhard@1048: # bernhard@1048: # N.B. We could not have used a .deb package, because the installation must bernhard@1048: # also work without without adminstrator priviledges. bernhard@1048: # bernhard@1048: # bernhard@1048: # Search the file for 'version()' to find the license information. wilde@707: set -u wilde@680: wilde@698: ME=`basename "$0"` wilde@704: DEFAULT_PREFIX="$HOME/TrustBridge" wilde@707: SYSDEFAULT_PREFIX="/usr/local" wilde@724: CFGPATH="${XDG_CONFIG_HOME:-$HOME/.config}/BSI" wilde@724: DATAPATH="${XDG_DATA_HOME:-$HOME/.local/share}/BSI/TrustBridge" wilde@700: SYSCFGPATH="/etc/TrustBridge" wilde@727: # FIXME: wilde@727: # Set the real data path for system wide installation once its known. wilde@727: SYSDATAPATH="$DATAPATH" wilde@724: INSTCFGNAME="TrustBridge-inst.cfg" wilde@705: FORCE=0 wilde@707: SYSINST=0 wilde@711: DEINSTALL=0 andre@1066: UPDATE=0 andre@1066: SHOWAFTERUPDATE=0 wilde@711: BINNAMES="###BINNAMES###" andre@872: ICONNAME="###ICONNAME###" andre@938: HELPNAMES="###HELPNAMES###" andre@938: HELPNAMES_SOURCES="###HELPNAMES_SOURCES###" andre@938: HELPNAMES_STATIC="###HELPNAMES_STATIC###" andre@938: HELPNAMES_IMG="###HELPNAMES_IMG###" andre@972: ARCH="###ARCH###" wilde@698: wilde@705: declare -A instcfg oldinstcfg wilde@724: declare inst_default_prefix instdata_path instcfg_path instcfg_file wilde@700: instcfg=( wilde@700: [TIMESTMP]=`date -u +%Y%m%d%H%M%S` wilde@700: [VERSION]='@PROJECT_VERSION@' wilde@700: [PREFIX]='' wilde@700: ) wilde@705: oldinstcfg=( wilde@705: [TIMESTMP]='' wilde@705: [VERSION]='' wilde@705: [PREFIX]='' wilde@705: ) wilde@698: wilde@795: declare -A L10N_DE wilde@795: ###L10N_DE### wilde@795: wilde@795: getxt() wilde@795: { wilde@795: # Poor mans gettext for l10n completely self contained in one shell wilde@795: # script. wilde@795: MSGID="$1" wilde@795: shift wilde@795: case ${LANGUAGE:-${LC_ALL:-${LC_MESSAGES:-$LANG}}} in wilde@795: de*) wilde@795: if [ "${L10N_DE[$MSGID]}" ] ; then wilde@795: MSG="${L10N_DE[$MSGID]}" wilde@795: else wilde@795: MSG="$MSGID" wilde@795: fi wilde@795: ;; wilde@795: *) wilde@795: MSG="$MSGID" wilde@795: ;; wilde@795: esac wilde@795: wilde@795: printf "$MSG" "$@" wilde@795: } wilde@795: wilde@698: version() wilde@698: { wilde@698: cat <=2) bernhard@1038: and comes with ABSOLUTELY NO WARRANTY! bernhard@1038: See LICENSE.txt for details. wilde@698: EOF wilde@698: exit 0 wilde@698: } wilde@680: wilde@680: fatal() wilde@680: { wilde@795: getxt "$1" >&2 wilde@711: if [ $DEINSTALL -eq 1 ] ; then wilde@795: getxt "Deinstallation failed.\n" >&2 wilde@711: else wilde@795: getxt "Installation failed.\n" >&2 wilde@711: fi wilde@680: exit 1 wilde@680: } wilde@680: wilde@698: usage() wilde@698: { wilde@799: getxt "Usage: %s [OPTION]...\n" "$ME" wilde@799: getxt "Install TrustBridge.\n\n" wilde@799: getxt "Options:\n" wilde@799: getxt " -p, --prefix=PATH install files in PATH\n" wilde@799: getxt " -f, --force install to given prefix, even when a current\n" wilde@799: getxt " installation with different prefix exists.\n" wilde@799: getxt " -d, --deinstall deinstall files from current installation\n" wilde@799: getxt " -s, --system create a system wide (de)installation\n" wilde@799: getxt " --help display this help and exit\n" wilde@799: getxt " --version output version information and exit\n" wilde@698: exit $1 wilde@698: } wilde@698: wilde@711: yorn() wilde@711: { wilde@711: local c wilde@711: while true ; do wilde@711: read -n 1 c wilde@711: echo wilde@711: case "$c" in wilde@711: y|Y|j|J) wilde@711: return 0 wilde@711: ;; wilde@711: n|N) wilde@711: return 1 wilde@711: ;; wilde@711: *) wilde@795: getxt >&2 "Answer [Y]es or [N]o:\n" wilde@711: esac wilde@711: done wilde@711: } wilde@711: wilde@698: parse_args() wilde@698: { wilde@698: OPTS=`getopt \ andre@1066: -l deinstall,update,show-after-update,force,help,prefix:,system,version \ wilde@711: -o d,f,p:,s -n "$ME" -- "$@"` wilde@698: [ $? -eq 0 ] || usage 23 wilde@698: wilde@698: eval set -- "$OPTS" wilde@698: wilde@698: while true ; do wilde@698: case "$1" in wilde@698: --prefix|-p) wilde@700: instcfg[PREFIX]="$2" wilde@698: shift 2 wilde@698: ;; wilde@707: --system|-s) wilde@707: SYSINST=1 wilde@707: shift 1 wilde@707: ;; wilde@705: --force|-f) wilde@705: FORCE=1 wilde@705: shift 1 wilde@705: ;; wilde@711: --deinstall|-d) wilde@711: DEINSTALL=1 wilde@711: shift 1 wilde@711: ;; andre@1066: --update) andre@1066: UPDATE=1 andre@1066: shift 1 andre@1066: ;; andre@1066: --show-after-update) andre@1066: SHOWAFTERUPDATE=1 andre@1066: shift 1 andre@1066: ;; wilde@698: --help) wilde@698: usage 0 wilde@698: ;; wilde@698: --version) wilde@698: version wilde@698: ;; wilde@698: --) wilde@698: shift wilde@698: break wilde@698: ;; wilde@698: esac wilde@698: done wilde@698: } wilde@698: wilde@707: init_vars() wilde@707: { andre@1066: if [ -n "${SUDO_USER-}" ] ; then andre@1066: # Default to system wide installation when running with sudo andre@1066: SYSINST=1 andre@1066: fi andre@1066: wilde@707: if [ $SYSINST -eq 1 ] ; then wilde@707: inst_default_prefix="$SYSDEFAULT_PREFIX" wilde@723: instcfg_path="${SYSCFGPATH}" wilde@727: instdata_path="${SYSDATAPATH}" andre@785: autostart_path="$(getent passwd "${SUDO_USER}" | cut -d ':' -f 6)/.config/autostart" andre@872: startmenu_path="/usr/share/applications" wilde@707: else wilde@707: inst_default_prefix="$DEFAULT_PREFIX" wilde@723: instcfg_path="${CFGPATH}" wilde@724: instdata_path="${DATAPATH}" andre@785: autostart_path=${XDG_CONFIG_HOME:-~/.config/autostart} andre@872: startmenu_path=${XDG_DATA_HOME:-~/.local/share/applications} andre@1040: if [ $DEINSTALL -eq 1 ] ; then andre@1040: if [ ! -r ${instcfg_path}/${INSTCFGNAME} ]; then andre@1040: if [ -r ${SYSCFGPATH}/${INSTCFGNAME} ]; then andre@1040: # Fall back to system uninstallation if no user config found andre@1040: SYSINST=1 andre@1040: init_vars andre@1040: check_priv andre@1040: fi andre@1040: fi andre@1040: fi wilde@707: fi wilde@873: instcfg_file="${instcfg_path}/${INSTCFGNAME}" wilde@873: extra_bin_path=`mktemp --tmpdir -d tmpbin.XXXXXXXXXX` andre@972: HOST_ARCH=$(uname -m) wilde@873: } wilde@873: andre@1066: finished() andre@1066: { andre@1066: echo andre@1066: echo "#################################################################################" andre@1066: if [ $SYSINST -eq 1 ]; then andre@1066: getxt "System wide installation successful.\n" bernhard@1075: RUNCMD="su -l $SUDO_USER -c " andre@1066: else andre@1066: getxt "Single user installation successful.\n" bernhard@1075: RUNCMD="" andre@1066: fi andre@1066: getxt "TrustBridge has been installed to: '%s'\n\n" "${instcfg[PREFIX]}" andre@1066: bernhard@1112: getxt "To remove the application and the root certificates it has inserted,\n" bernhard@1112: getxt "call the deinstall command:\n" bernhard@1075: echo " $RUNCMD ${instcfg[PREFIX]}/bin/trustbridge-deinstall-TODO.sh" bernhard@1075: andre@1066: echo "#################################################################################" andre@1066: getxt "Press enter to launch '%s'\n" "${instcfg[PREFIX]}/bin/trustbridge" andre@1066: if [ $UPDATE -eq 0 ]; then andre@1066: read andre@1068: $RUNCMD "${instcfg[PREFIX]}/bin/trustbridge" & andre@1066: else andre@1066: if [ $SHOWAFTERUPDATE -eq 0 ]; then andre@1068: $RUNCMD "${instcfg[PREFIX]}/bin/trustbridge" --tray & andre@1066: else andre@1068: $RUNCMD "${instcfg[PREFIX]}/bin/trustbridge" & andre@1066: fi andre@1066: fi andre@1066: } andre@1066: wilde@873: cleanup() wilde@873: { wilde@935: getxt "Cleaning up temporary stuff ...\n" wilde@1132: wilde@1132: # remove temporary directories: wilde@1132: local -a temp_dirs wilde@1132: if [ "${lock_dir}" ]; then wilde@1132: # $lock_dir is generate by the shar wilde@1132: temp_dirs+=("${instcfg[PREFIX]}/$lock_dir") andre@937: fi wilde@1132: temp_dirs+=("$extra_bin_path") wilde@1132: wilde@1132: for dir in "${temp_dirs[@]}" ; do wilde@935: [ -d "$dir" ] && wilde@935: rm -rf "$dir" wilde@935: done wilde@707: } wilde@707: wilde@700: write_instcfg() wilde@700: { wilde@700: install -d `dirname "$instcfg_file"` wilde@700: echo "# Created by TrustBridge-Installer, don't touch!" >"$instcfg_file" wilde@700: for key in "${!instcfg[@]}" ; do wilde@700: echo "${key}=${instcfg[$key]}" >>"$instcfg_file" wilde@700: done wilde@700: } wilde@700: wilde@705: read_oldinstcfg() wilde@705: { wilde@705: if [ -r "$instcfg_file" ] ; then wilde@795: getxt "Reading '%s' ...\n" "$instcfg_file" wilde@705: for key in "${!oldinstcfg[@]}" ; do wilde@705: oldinstcfg[$key]=`sed -n "/$key/s/[^=]*=\(.*\)/\1/p" "$instcfg_file"` wilde@705: done wilde@707: fi wilde@705: } wilde@705: wilde@707: check_priv() wilde@707: { wilde@707: if [ $SYSINST -eq 1 -a "$UID" -ne 0 ] ; then andre@1040: fatal "System wide installation or deinstallation requires root privileges!\n" wilde@707: fi wilde@707: } wilde@707: wilde@728: rm_empty_dirs() wilde@728: { wilde@728: # Args: $1 - DIRECTORY wilde@728: # wilde@728: # Recursively remove DIRECTORY and all it _parent_ directories as wilde@728: # long as they are empty. wilde@728: local directory="$1" wilde@752: while [ -d "$directory" -a -z "$(ls 2>/dev/null -A "$directory")" ] ; do wilde@795: getxt "Deleting empty directory '%s' ...\n" "$directory" wilde@728: rmdir "$directory" wilde@728: directory=`dirname "$directory"` wilde@728: done wilde@728: } wilde@728: wilde@752: rm_files() wilde@752: { wilde@752: for file in "$@" ; do wilde@752: if [ -e "$file" ] ; then wilde@795: getxt "Deleting '%s' ...\n" "$file" wilde@752: rm "$file" wilde@752: fi wilde@752: done wilde@752: } wilde@752: wilde@749: setup_cronjob() wilde@749: { wilde@749: local tmpcrontab=`mktemp` wilde@765: wilde@764: if [ $SYSINST -eq 1 -a "${SUDO_USER+X}" ] ; then wilde@765: local crontabopt="-u $SUDO_USER" wilde@765: else wilde@765: local crontabopt='' wilde@764: fi wilde@765: wilde@766: if [ "$1" != "deinstall" ] ; then wilde@766: local trustbridge_tray_starter="${instcfg[PREFIX]}/bin/trustbridge-tray-starter.sh" wilde@766: else wilde@766: local trustbridge_tray_starter="${oldinstcfg[PREFIX]}/bin/trustbridge-tray-starter.sh" wilde@766: fi wilde@766: wilde@764: crontab $crontabopt -l | \ wilde@766: grep -vF "$trustbridge_tray_starter" \ wilde@764: >"$tmpcrontab" wilde@750: if [ "$1" != "deinstall" ] ; then wilde@766: echo "$(( $RANDOM / 555 )) 12 * * * \"$trustbridge_tray_starter\"" \ wilde@750: >>"$tmpcrontab" wilde@750: fi wilde@764: crontab $crontabopt "$tmpcrontab" wilde@749: rm "$tmpcrontab" wilde@749: } wilde@749: wilde@750: remove_cronjob() wilde@750: { wilde@750: setup_cronjob deinstall wilde@750: } wilde@750: wilde@723: deinstall_certs() wilde@723: { wilde@723: local cinst="${oldinstcfg[PREFIX]}/bin/cinst" andre@858: local certlist=`ls 2>/dev/null -1 ${instdata_path}/list-installed.txt` wilde@723: wilde@795: getxt "Uninstalling certificates ...\n" wilde@728: wilde@723: if [ "$certlist" ] ; then wilde@795: getxt "Using certificate list '%s'.\n" "$certlist" wilde@725: if [ -x "$cinst" ] ; then wilde@723: "$cinst" "list=$certlist" "choices=uninstall" wilde@723: else wilde@795: getxt >&2 "WARNING: can't execute %s for certificate deinstallation.\n" "$cinst" wilde@723: fi wilde@723: else wilde@795: getxt "No certificate list found. Nothing to do.\n" wilde@723: fi wilde@723: } wilde@723: wilde@729: deinstall_etc() wilde@729: { wilde@795: getxt "Removing cron job ...\n" wilde@750: remove_cronjob wilde@750: wilde@729: # FIXME: delete all files created by the application. wilde@751: local tbcfg_files=( "${instcfg_path}/TrustBridge.ini" wilde@751: "${instcfg_path}/trustbridge-tray-starter.cfg" wilde@751: "$instcfg_file" ) wilde@752: wilde@795: getxt "Removing certificate lists from: %s:\n" "$instdata_path" wilde@752: rm_files "$instdata_path"/list-*.txt wilde@795: wilde@795: getxt "Removing PID file from: %s:\n" "$instdata_path" wilde@795: rm_files "$instdata_path"/*.pid wilde@729: rm_empty_dirs "$instdata_path" wilde@751: wilde@795: getxt "Removing configuration files:\n" wilde@752: rm_files "${tbcfg_files[@]}" wilde@729: rm_empty_dirs "$instcfg_path" andre@777: wilde@795: getxt "Removing TrustBridge from autostart\n" emanuel@854: rm_files "${autostart_path}/trustbridge.desktop" andre@916: update-desktop-database 2>&1 || true andre@872: andre@872: getxt "Removing TrustBridge from start menu\n" andre@872: rm_files "${startmenu_path}/trustbridge.desktop" wilde@729: } wilde@729: wilde@711: deinstall() wilde@711: { wilde@711: if [ "${oldinstcfg[PREFIX]}" ] ; then wilde@795: getxt "Really deinstall TrustBridge from '%s'? [y/n]\n" "${oldinstcfg[PREFIX]}" wilde@711: yorn || exit 0 wilde@723: deinstall_certs wilde@711: local deinstdir="${oldinstcfg[PREFIX]}/bin" wilde@795: getxt "Deinstalling from '%s'.\n" "${oldinstcfg[PREFIX]}" wilde@711: for file in $BINNAMES ; do wilde@711: local path="${deinstdir}/$file" wilde@795: getxt "Deleting '%s' ...\n" "$path" wilde@795: rm "$path" || getxt >&2 "WARNING: Could not delete: '%s'!\n" "$path" wilde@711: done wilde@728: rm_empty_dirs "$deinstdir" andre@938: andre@938: # images andre@938: deinstdir="${oldinstcfg[PREFIX]}/share/doc/trustbridge/_images" andre@938: for file in $HELPNAMES_IMG; do andre@938: local path="${deinstdir}/$file" andre@938: if [ -f "$path" ]; then andre@938: getxt "Deleting '%s' ...\n" "$path" andre@938: rm "$path" || getxt >&2 "WARNING: Could not delete: '%s'!\n" "$path" andre@938: fi andre@938: done andre@938: rm_empty_dirs "$deinstdir" andre@938: andre@938: # Javascript sources andre@938: deinstdir="${oldinstcfg[PREFIX]}/share/doc/trustbridge/_sources" andre@938: for file in $HELPNAMES_SOURCES; do andre@938: local path="${deinstdir}/$file" andre@938: if [ -f "$path" ]; then andre@938: getxt "Deleting '%s' ...\n" "$path" andre@938: rm "$path" || getxt >&2 "WARNING: Could not delete: '%s'!\n" "$path" andre@938: fi andre@938: done andre@938: rm_empty_dirs "$deinstdir" andre@938: andre@938: # Static files andre@938: deinstdir="${oldinstcfg[PREFIX]}/share/doc/trustbridge/_static" andre@938: for file in $HELPNAMES_STATIC; do andre@938: local path="${deinstdir}/$file" andre@938: if [ -f "$path" ]; then andre@938: getxt "Deleting '%s' ...\n" "$path" andre@938: rm "$path" || getxt >&2 "WARNING: Could not delete: '%s'!\n" "$path" andre@938: fi andre@938: done andre@938: rm_empty_dirs "$deinstdir" andre@938: andre@938: # The actual html andre@938: deinstdir="${oldinstcfg[PREFIX]}/share/doc/trustbridge" andre@938: for file in $HELPNAMES; do andre@938: local path="${deinstdir}/$file" andre@938: if [ -f "$path" ]; then andre@938: getxt "Deleting '%s' ...\n" "$path" andre@938: rm "$path" || getxt >&2 "WARNING: Could not delete: '%s'!\n" "$path" andre@938: fi andre@938: done andre@938: rm_empty_dirs "$deinstdir" andre@872: deinstdir="${oldinstcfg[PREFIX]}/share/pixmaps/trustbridge" andre@872: getxt "Deinstalling from '%s'.\n" "${oldinstcfg[PREFIX]}" andre@872: for file in $ICONNAME; do andre@872: local path="${deinstdir}/$file" andre@872: getxt "Deleting '%s' ...\n" "$path" andre@872: rm "$path" || getxt >&2 "WARNING: Could not delete: '%s'!\n" "$path" andre@872: done andre@872: deinstdir="${oldinstcfg[PREFIX]}/share/pixmaps/trustbridge" andre@872: rm_empty_dirs "$deinstdir" andre@872: deinstdir="${oldinstcfg[PREFIX]}/share/pixmaps" andre@872: rm_empty_dirs "$deinstdir" andre@872: deinstdir="${oldinstcfg[PREFIX]}/share" andre@872: rm_empty_dirs "$deinstdir" wilde@729: deinstall_etc wilde@795: getxt "Deinstallation finished.\n" wilde@711: else wilde@795: getxt "No current installation found! No harm done.\n" wilde@711: fi wilde@711: } wilde@711: andre@777: write_autostart() andre@777: { andre@777: cat > "$1" << EOF andre@777: [Desktop Entry] andre@777: Type=Application andre@777: Name=TrustBridge andre@777: Exec="${instcfg[PREFIX]}/bin/trustbridge" --tray andre@777: EOF andre@777: chown "${SUDO_USER:-${USER}}" "$1" andre@777: chmod 700 "$1" andre@777: } andre@777: andre@872: write_startmenu() andre@872: { andre@872: cat > "$1" << EOF andre@872: [Desktop Entry] andre@872: Type=Application andre@872: Name=TrustBridge andre@872: Comment=Install and update trusted root certificates andre@872: Comment[de]=Vertrauenswürdige Wurzelzertifikate installieren und aktualisieren andre@872: Exec=${instcfg[PREFIX]}/bin/trustbridge andre@872: Icon=${instcfg[PREFIX]}/share/pixmaps/trustbridge/trustbridge.png andre@872: Terminal=false andre@872: Categories=Network;Qt; andre@872: StartupNotify=false andre@872: EOF andre@872: } andre@872: andre@872: setup_startmenu() andre@872: { andre@872: # Supported desktop environments: Unity, GNOME, XFCE, LXDE, KDE andre@872: # System wide installation with a nonstandard XDG_DATA_HOME is not andre@872: # respected with regards to autostart. andre@872: if [ ! -d "${startmenu_path}" ]; then andre@872: install -d "${startmenu_path}" || \ andre@872: fatal "Failed to create startmenu directory: '%s'\n" "$startmenu_path" andre@872: fi andre@872: andre@872: write_startmenu "${startmenu_path}/trustbridge.desktop" andre@872: update-desktop-database 2>&1 || true andre@872: } andre@872: andre@777: setup_autostart() andre@777: { andre@777: # Supported desktop environments: Unity, GNOME, XFCE, LXDE, KDE andre@785: # System wide installation with a nonstandard XDG_CONFIG_HOME or KDEHOME is not andre@785: # respected with regards to autostart. andre@785: if [ ! -d "${autostart_path}" ]; then andre@785: install -d "${autostart_path}" || \ wilde@795: fatal "Failed to create autostart directory: '%s'\n" "$autostart_path" andre@785: fi andre@777: emanuel@854: write_autostart "${autostart_path}/trustbridge.desktop" andre@777: } wilde@707: wilde@873: provide_uudecode_maybe() wilde@873: { wilde@873: # The shar needs uudecode, which might not be installed. If its not wilde@873: # available we will provide our own python based implementation. wilde@873: if which uudecode >/dev/null 2>&1 ; then wilde@873: getxt "Found system uudecode.\n" wilde@873: else wilde@873: local myuudecode="$extra_bin_path/uudecode" wilde@873: cat >"$myuudecode" < 1: wilde@873: f = open(sys.argv[1], 'r') wilde@873: else: wilde@873: f = sys.stdin wilde@873: uu.decode(f, None, None, 1) wilde@873: EOF wilde@873: chmod 755 "$myuudecode" wilde@873: PATH="${extra_bin_path}:$PATH" wilde@873: getxt "Using python uudecode provided by installer.\n" wilde@873: fi wilde@873: } wilde@873: wilde@698: #====================================================================== wilde@698: # main() wilde@935: trap cleanup EXIT wilde@698: wilde@698: parse_args "$@" andre@1040: check_priv wilde@707: init_vars wilde@705: read_oldinstcfg wilde@698: wilde@680: cat <