diff options
| -rw-r--r-- | indra/viewer_components/updater/scripts/linux/update_install | 30 | 
1 files changed, 18 insertions, 12 deletions
| diff --git a/indra/viewer_components/updater/scripts/linux/update_install b/indra/viewer_components/updater/scripts/linux/update_install index 7c08966830..167e2b7881 100644 --- a/indra/viewer_components/updater/scripts/linux/update_install +++ b/indra/viewer_components/updater/scripts/linux/update_install @@ -53,7 +53,7 @@ function sudo_mv {      # If we have write permission to both parent directories, shouldn't need      # sudo.      if [ -w "$(dirname "$1")" -a -w "$(dirname "$2")" ] -    then mv "$1" "$2" || fail "Couldn't move $1 to $2" +    then mv "$1" "$2"      else # use one of the likely sudo programs           sudo="$(which gksudo)"           if [ -z "$sudo" ] @@ -61,9 +61,9 @@ function sudo_mv {           fi           if [ -z "$sudo" ]           then # couldn't find either one, just try it anyway -              mv "$1" "$2" || fail "Couldn't move $1 to $2" +              mv "$1" "$2"           else # even with sudo, could fail, e.g. different filesystems -              "$sudo" mv "$1" "$2" || fail "Couldn't move $1 to $2" +              "$sudo" mv "$1" "$2"           fi      fi  } @@ -94,9 +94,9 @@ logname="$logsdir/updater.log"  # move aside old updater.log; we're about to create a new one  [ -f "$logname" ] && mv "$logname" "$logname.old" -# Set up redirections for this script such that stderr is logged, while -# special stdout messages drive our UI, as described in xmenity. -exec 2> "$logname" | "$mydir/xmenity" +# Set up redirections for this script such that stderr is logged. (But first +# move the previous stderr to file descriptor 3.) +exec 3>&2- 2> "$logname"  # Piping to xmenity requires that we end with a line consisting of the string  # "100" to terminate zenity progress bar.  cleanup echo 100 @@ -131,19 +131,25 @@ INSTALL_DIR="$(cd "$mydir/.." ; pwd)"  # Considering we're launched from a subdirectory of INSTALL_DIR, would be  # surprising if it did NOT already exist... -if [ -f "$INSTALL_DIR" ] +if [ -e "$INSTALL_DIR" ]  then backup="$INSTALL_DIR.backup"       backupn=1 -     while [ -f "$backup" ] +     while [ -e "$backup" ]       do backup="$INSTALL_DIR.backup.$backupn"          ((backupn += 1))       done -     sudo_mv "$INSTALL_DIR" "$backup" +     sudo_mv "$INSTALL_DIR" "$backup" || fail "Couldn't move $INSTALL_DIR to $backup"  fi  # We unpacked the tarball into tempinstall. Move that. -sudo_mv "$tempinstall" "$INSTALL_DIR" +if ! sudo_mv "$tempinstall" "$INSTALL_DIR" +then # If we failed to move the temp install to INSTALL_DIR, try to restore +     # INSTALL_DIR from backup +     sudo_mv "$backup" "$INSTALL_DIR" +     fail "Couldn't move $1 to $2" +fi  rm -f "$tarball" -# launch the updated viewer -"$INSTALL_DIR/secondlife" & +# Launch the updated viewer. Restore original stderr from file descriptor 3, +# though -- otherwise updater.log gets cluttered with the viewer log! +"$INSTALL_DIR/secondlife" 2>&3- & | 
