1#!/bin/sh 2 3GNOMEXCMDS="/usr/bin/gksu" 4GNOMECMDS="/usr/bin/gnome-terminal /opt/gnome/bin/gnome-terminal" 5KDEXCMDS="/usr/bin/kdesu /opt/kde/bin/kdesu /opt/kde?/bin/kdesu" 6KDECMDS="/usr/bin/konsole /opt/kde/bin/konsole /opt/kde?/bin/konsole" 7MISCCMDS="/usr/bin/x-terminal-emulator /usr/X11/bin/xterm /usr/openwin/bin/xterm" 8 9TITLE='${PRODUCTNAME} update' 10 11# 12# Usage 13# 14 15Usage () { 16 if [ "`basename $0`" = "update" ]; then 17 echo "Usage: `basename $0` [<path to ${PRODUCTNAME} installation>]" 18 fi 19 echo 20 exit 2 21} 22 23make_tempfile() { 24 25 # Always prefer mktemp when available 26 if [ -x "$MKTEMP" ]; then 27 "$MKTEMP" "/tmp/$1.XXXXXX" 28 else 29 TMPCMD="/tmp/$1.$$" 30 touch $TMPCMD 31 echo $TMPCMD 32 fi 33 34} 35 36# 37# make_command_file - generate a command file to pass to xterm & co 38# 39run_in_terminal () { 40 41 TMPCMD=`make_tempfile 'OpenOffice.org-Online-Update'` 42 43 cat >> $TMPCMD 44 45 cat >> $TMPCMD << \EOF 46if [ $? -eq 0 -a ! -z "$DISPLAY" ]; then 47 echo 48 echo "Press <Enter> to close this window" 49 read DUMMY 50fi 51EOF 52 53 cat >> $TMPCMD << EOF 54rm -f $TMPCMD 55EOF 56 57 chmod a+x $TMPCMD 58 exec "$@" -e $TMPCMD 59} 60 61# 62# run the command line passed as positional parameters either via 63# gksu/kdesu or via su command in a terminal emulator. 64# 65elevate() { 66 67 TITLEOPT="" 68 GEOMOPT="" 69 case `basename $XTERM` in 70 "xterm") 71 TITLEOPT="-title" 72 GEOMOPT="-geometry " 73 ;; 74 "gnome-terminal" | "konsole" | "x-terminal-emulator") 75 TITLEOPT="--title" 76 GEOMOPT="--geometry=" 77 ;; 78 esac 79 80 case `basename $SU` in 81 "kdesu" ) 82 # --caption 83 SUOPT="-t" 84 ;; 85 "gksu" ) 86 # --title 87 SUOPT="" 88 ;; 89 "su" ) 90 SUOPT="- root -c" 91 ;; 92 esac 93 94 ( echo "echo The application \"$@\" will update your ${PRODUCTNAME} installation." 95 echo "echo" 96 echo "$SU" "$SUOPT" "$@" 97 ) | run_in_terminal "$XTERM" "$TITLEOPT" "$TITLE" ${GEOMOPT}+300+300 98} 99 100 101update_pkg() { 102 ADMINFILE=`make_tempfile 'OpenOffice.org-Online-Update-admin'` 103 104cat >> $ADMINFILE << EOF 105action=nocheck 106conflict=nocheck 107setuid=nocheck 108idepend=nocheck 109rdepend=nocheck 110mail= 111EOF 112 113 PKGLIST="" 114 for i in `cd $1; ls -d *`; do 115 pkginfo -q $i && PKGLIST="$PKGLIST $i" 116 done 117 118 pkgrm -n -a $ADMINFILE $PKGLIST 119 pkgadd -n -a $ADMINFILE -d $1 $PKGLIST 120 121 rm -f $ADMINFILE 122} 123 124# 125# main 126# 127 128CMD="`basename $0`" 129BASEDIR="`dirname $0`" 130ABSBASEDIR="`cd $BASEDIR; pwd`" 131 132if [ -z "$DISPLAY" ]; then 133 SU="su" 134 XTERM="" 135else 136 # define search order depending on the desktop in use .. 137 if [ "`uname -s`" = "SunOS" ]; then 138 XPROP=/usr/openwin/bin/xprop 139 GREP=/usr/xpg4/bin/grep 140 MKTEMP=/usr/bin/mktemp 141 else 142 if [ -x /usr/X11/bin/xprop ]; then 143 XPROP=/usr/X11/bin/xprop 144 else 145 XPROP=/usr/bin/xprop 146 fi 147 GREP=grep 148 MKTEMP=/bin/mktemp 149 fi 150 151 # use desktop specific tools where possible, but prefer X11 su over terminal emulators 152 if $XPROP -root | $GREP -q '^KWIN_RUNNING'; then 153 SULIST="$KDEXCMDS $GNOMEXCMDS" 154 XTERMLIST="$KDECMDS $MISCCMDS" 155 else 156 SULIST="$GNOMEXCMDS $KDEXCMDS" 157 XTERMLIST="$GNOMECMDS $MISCCMDS" 158 fi 159 160 # search for the first available terminal emulator 161 for i in $XTERMLIST; do 162 if [ -x $i ]; then 163 XTERM=$i 164 break 165 fi 166 done 167 168 # we prefer gksu or kdesu if available 169 SU="su" 170 for i in $SULIST; do 171 if [ -x $i ]; then 172 SU=$i 173 break 174 fi 175 done 176fi 177 178if [ "$CMD" = "update" ]; then 179 if [ $# -gt 0 ]; then 180 [ -d $1 -a $# -eq 1 ] || Usage 181 elevate "$ABSBASEDIR/$CMD" 182 else 183 if [ -d "$BASEDIR/RPMS" ]; then 184 # do not use --hash as the control sequence to edit the current line does not work 185 # in our setup (at least not with kdesu) 186 rpm -v --freshen `find "$BASEDIR"/RPMS -name '*.rpm'` 187 elif [ -d "$BASEDIR/DEBS" ]; then 188 dpkg --install --selected-only --recursive "$BASEDIR"/DEBS 189 elif [ -d "$BASEDIR/packages" ]; then 190 update_pkg "$BASEDIR/packages" 191 fi 192 fi 193else 194 Usage 195fi 196