1*b1cdbd2cSJim Jagielski#!/bin/sh 2*b1cdbd2cSJim Jagielski# ************************************************************* 3*b1cdbd2cSJim Jagielski# 4*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 5*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 6*b1cdbd2cSJim Jagielski# distributed with this work for additional information 7*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 8*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 9*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 10*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 11*b1cdbd2cSJim Jagielski# 12*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 13*b1cdbd2cSJim Jagielski# 14*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 15*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 16*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 18*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 19*b1cdbd2cSJim Jagielski# under the License. 20*b1cdbd2cSJim Jagielski# 21*b1cdbd2cSJim Jagielski# ************************************************************* 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim JagielskiGNOMEXCMDS="/usr/bin/gksu" 24*b1cdbd2cSJim JagielskiGNOMECMDS="/usr/bin/gnome-terminal /opt/gnome/bin/gnome-terminal" 25*b1cdbd2cSJim JagielskiKDEXCMDS="/usr/bin/kdesu /opt/kde/bin/kdesu /opt/kde?/bin/kdesu" 26*b1cdbd2cSJim JagielskiKDECMDS="/usr/bin/konsole /opt/kde/bin/konsole /opt/kde?/bin/konsole" 27*b1cdbd2cSJim JagielskiMISCCMDS="/usr/bin/x-terminal-emulator /usr/X11/bin/xterm /usr/openwin/bin/xterm" 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim JagielskiTITLE='${PRODUCTNAME} update' 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski# 32*b1cdbd2cSJim Jagielski# Usage 33*b1cdbd2cSJim Jagielski# 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim JagielskiUsage () { 36*b1cdbd2cSJim Jagielski if [ "`basename $0`" = "update" ]; then 37*b1cdbd2cSJim Jagielski echo "Usage: `basename $0` [<path to ${PRODUCTNAME} installation>]" 38*b1cdbd2cSJim Jagielski fi 39*b1cdbd2cSJim Jagielski echo 40*b1cdbd2cSJim Jagielski exit 2 41*b1cdbd2cSJim Jagielski} 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielskimake_tempfile() { 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski # Always prefer mktemp when available 46*b1cdbd2cSJim Jagielski if [ -x "$MKTEMP" ]; then 47*b1cdbd2cSJim Jagielski "$MKTEMP" "/tmp/$1.XXXXXX" 48*b1cdbd2cSJim Jagielski else 49*b1cdbd2cSJim Jagielski TMPCMD="/tmp/$1.$$" 50*b1cdbd2cSJim Jagielski touch $TMPCMD 51*b1cdbd2cSJim Jagielski echo $TMPCMD 52*b1cdbd2cSJim Jagielski fi 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski} 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski# 57*b1cdbd2cSJim Jagielski# make_command_file - generate a command file to pass to xterm & co 58*b1cdbd2cSJim Jagielski# 59*b1cdbd2cSJim Jagielskirun_in_terminal () { 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski TMPCMD=`make_tempfile 'Apache_OpenOffice-Online-Update'` 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski cat >> $TMPCMD 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski cat >> $TMPCMD << \EOF 66*b1cdbd2cSJim Jagielskiif [ $? -eq 0 -a ! -z "$DISPLAY" ]; then 67*b1cdbd2cSJim Jagielski echo 68*b1cdbd2cSJim Jagielski echo "Press <Enter> to close this window" 69*b1cdbd2cSJim Jagielski read DUMMY 70*b1cdbd2cSJim Jagielskifi 71*b1cdbd2cSJim JagielskiEOF 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski cat >> $TMPCMD << EOF 74*b1cdbd2cSJim Jagielskirm -f $TMPCMD 75*b1cdbd2cSJim JagielskiEOF 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski chmod a+x $TMPCMD 78*b1cdbd2cSJim Jagielski exec "$@" -e $TMPCMD 79*b1cdbd2cSJim Jagielski} 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski# 82*b1cdbd2cSJim Jagielski# run the command line passed as positional parameters either via 83*b1cdbd2cSJim Jagielski# gksu/kdesu or via su command in a terminal emulator. 84*b1cdbd2cSJim Jagielski# 85*b1cdbd2cSJim Jagielskielevate() { 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski TITLEOPT="" 88*b1cdbd2cSJim Jagielski GEOMOPT="" 89*b1cdbd2cSJim Jagielski case `basename $XTERM` in 90*b1cdbd2cSJim Jagielski "xterm") 91*b1cdbd2cSJim Jagielski TITLEOPT="-title" 92*b1cdbd2cSJim Jagielski GEOMOPT="-geometry " 93*b1cdbd2cSJim Jagielski ;; 94*b1cdbd2cSJim Jagielski "gnome-terminal" | "konsole" | "x-terminal-emulator") 95*b1cdbd2cSJim Jagielski TITLEOPT="--title" 96*b1cdbd2cSJim Jagielski GEOMOPT="--geometry=" 97*b1cdbd2cSJim Jagielski ;; 98*b1cdbd2cSJim Jagielski esac 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski case `basename $SU` in 101*b1cdbd2cSJim Jagielski "kdesu" ) 102*b1cdbd2cSJim Jagielski # --caption 103*b1cdbd2cSJim Jagielski SUOPT="-t" 104*b1cdbd2cSJim Jagielski ;; 105*b1cdbd2cSJim Jagielski "gksu" ) 106*b1cdbd2cSJim Jagielski # --title 107*b1cdbd2cSJim Jagielski SUOPT="" 108*b1cdbd2cSJim Jagielski ;; 109*b1cdbd2cSJim Jagielski "su" ) 110*b1cdbd2cSJim Jagielski SUOPT="- root -c" 111*b1cdbd2cSJim Jagielski ;; 112*b1cdbd2cSJim Jagielski esac 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski ( echo "echo The application \"$@\" will update your ${PRODUCTNAME} installation." 115*b1cdbd2cSJim Jagielski echo "echo" 116*b1cdbd2cSJim Jagielski echo "$SU" "$SUOPT" "$@" 117*b1cdbd2cSJim Jagielski ) | run_in_terminal "$XTERM" "$TITLEOPT" "$TITLE" ${GEOMOPT}+300+300 118*b1cdbd2cSJim Jagielski} 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielskiupdate_pkg() { 122*b1cdbd2cSJim Jagielski ADMINFILE=`make_tempfile 'Apache_OpenOffice-Online-Update-admin'` 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielskicat >> $ADMINFILE << EOF 125*b1cdbd2cSJim Jagielskiaction=nocheck 126*b1cdbd2cSJim Jagielskiconflict=nocheck 127*b1cdbd2cSJim Jagielskisetuid=nocheck 128*b1cdbd2cSJim Jagielskiidepend=nocheck 129*b1cdbd2cSJim Jagielskirdepend=nocheck 130*b1cdbd2cSJim Jagielskimail= 131*b1cdbd2cSJim JagielskiEOF 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski PKGLIST="" 134*b1cdbd2cSJim Jagielski for i in `cd $1; ls -d *`; do 135*b1cdbd2cSJim Jagielski pkginfo -q $i && PKGLIST="$PKGLIST $i" 136*b1cdbd2cSJim Jagielski done 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski pkgrm -n -a $ADMINFILE $PKGLIST 139*b1cdbd2cSJim Jagielski pkgadd -n -a $ADMINFILE -d $1 $PKGLIST 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski rm -f $ADMINFILE 142*b1cdbd2cSJim Jagielski} 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski# 145*b1cdbd2cSJim Jagielski# main 146*b1cdbd2cSJim Jagielski# 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim JagielskiCMD="`basename $0`" 149*b1cdbd2cSJim JagielskiBASEDIR="`dirname $0`" 150*b1cdbd2cSJim JagielskiABSBASEDIR="`cd $BASEDIR; pwd`" 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielskiif [ -z "$DISPLAY" ]; then 153*b1cdbd2cSJim Jagielski SU="su" 154*b1cdbd2cSJim Jagielski XTERM="" 155*b1cdbd2cSJim Jagielskielse 156*b1cdbd2cSJim Jagielski # define search order depending on the desktop in use .. 157*b1cdbd2cSJim Jagielski if [ "`uname -s`" = "SunOS" ]; then 158*b1cdbd2cSJim Jagielski XPROP=/usr/openwin/bin/xprop 159*b1cdbd2cSJim Jagielski GREP=/usr/xpg4/bin/grep 160*b1cdbd2cSJim Jagielski MKTEMP=/usr/bin/mktemp 161*b1cdbd2cSJim Jagielski else 162*b1cdbd2cSJim Jagielski if [ -x /usr/X11/bin/xprop ]; then 163*b1cdbd2cSJim Jagielski XPROP=/usr/X11/bin/xprop 164*b1cdbd2cSJim Jagielski else 165*b1cdbd2cSJim Jagielski XPROP=/usr/bin/xprop 166*b1cdbd2cSJim Jagielski fi 167*b1cdbd2cSJim Jagielski GREP=grep 168*b1cdbd2cSJim Jagielski MKTEMP=/bin/mktemp 169*b1cdbd2cSJim Jagielski fi 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski # use desktop specific tools where possible, but prefer X11 su over terminal emulators 172*b1cdbd2cSJim Jagielski if $XPROP -root | $GREP -q '^KWIN_RUNNING'; then 173*b1cdbd2cSJim Jagielski SULIST="$KDEXCMDS $GNOMEXCMDS" 174*b1cdbd2cSJim Jagielski XTERMLIST="$KDECMDS $MISCCMDS" 175*b1cdbd2cSJim Jagielski else 176*b1cdbd2cSJim Jagielski SULIST="$GNOMEXCMDS $KDEXCMDS" 177*b1cdbd2cSJim Jagielski XTERMLIST="$GNOMECMDS $MISCCMDS" 178*b1cdbd2cSJim Jagielski fi 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski # search for the first available terminal emulator 181*b1cdbd2cSJim Jagielski for i in $XTERMLIST; do 182*b1cdbd2cSJim Jagielski if [ -x $i ]; then 183*b1cdbd2cSJim Jagielski XTERM=$i 184*b1cdbd2cSJim Jagielski break 185*b1cdbd2cSJim Jagielski fi 186*b1cdbd2cSJim Jagielski done 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski # we prefer gksu or kdesu if available 189*b1cdbd2cSJim Jagielski SU="su" 190*b1cdbd2cSJim Jagielski for i in $SULIST; do 191*b1cdbd2cSJim Jagielski if [ -x $i ]; then 192*b1cdbd2cSJim Jagielski SU=$i 193*b1cdbd2cSJim Jagielski break 194*b1cdbd2cSJim Jagielski fi 195*b1cdbd2cSJim Jagielski done 196*b1cdbd2cSJim Jagielskifi 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielskiif [ "$CMD" = "update" ]; then 199*b1cdbd2cSJim Jagielski if [ $# -gt 0 ]; then 200*b1cdbd2cSJim Jagielski [ -d $1 -a $# -eq 1 ] || Usage 201*b1cdbd2cSJim Jagielski elevate "$ABSBASEDIR/$CMD" 202*b1cdbd2cSJim Jagielski else 203*b1cdbd2cSJim Jagielski if [ -d "$BASEDIR/RPMS" ]; then 204*b1cdbd2cSJim Jagielski # do not use --hash as the control sequence to edit the current line does not work 205*b1cdbd2cSJim Jagielski # in our setup (at least not with kdesu) 206*b1cdbd2cSJim Jagielski rpm -v --freshen `find "$BASEDIR"/RPMS -name '*.rpm'` 207*b1cdbd2cSJim Jagielski elif [ -d "$BASEDIR/DEBS" ]; then 208*b1cdbd2cSJim Jagielski dpkg --install --selected-only --recursive "$BASEDIR"/DEBS 209*b1cdbd2cSJim Jagielski elif [ -d "$BASEDIR/packages" ]; then 210*b1cdbd2cSJim Jagielski update_pkg "$BASEDIR/packages" 211*b1cdbd2cSJim Jagielski fi 212*b1cdbd2cSJim Jagielski fi 213*b1cdbd2cSJim Jagielskielse 214*b1cdbd2cSJim Jagielski Usage 215*b1cdbd2cSJim Jagielskifi 216