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