blob: 4877ce87d9674bd61dd24865f5335dc9e6ef6475 [file] [log] [blame]
#!/bin/sh
# *************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# *************************************************************
GNOMEXCMDS="/usr/bin/gksu"
GNOMECMDS="/usr/bin/gnome-terminal /opt/gnome/bin/gnome-terminal"
KDEXCMDS="/usr/bin/kdesu /opt/kde/bin/kdesu /opt/kde?/bin/kdesu"
KDECMDS="/usr/bin/konsole /opt/kde/bin/konsole /opt/kde?/bin/konsole"
MISCCMDS="/usr/bin/x-terminal-emulator /usr/X11/bin/xterm /usr/openwin/bin/xterm"
TITLE='${PRODUCTNAME} update'
#
# Usage
#
Usage () {
if [ "`basename $0`" = "update" ]; then
echo "Usage: `basename $0` [<path to ${PRODUCTNAME} installation>]"
fi
echo
exit 2
}
make_tempfile() {
# Always prefer mktemp when available
if [ -x "$MKTEMP" ]; then
"$MKTEMP" "/tmp/$1.XXXXXX"
else
TMPCMD="/tmp/$1.$$"
touch $TMPCMD
echo $TMPCMD
fi
}
#
# make_command_file - generate a command file to pass to xterm & co
#
run_in_terminal () {
TMPCMD=`make_tempfile 'Apache_OpenOffice-Online-Update'`
cat >> $TMPCMD
cat >> $TMPCMD << \EOF
if [ $? -eq 0 -a ! -z "$DISPLAY" ]; then
echo
echo "Press <Enter> to close this window"
read DUMMY
fi
EOF
cat >> $TMPCMD << EOF
rm -f $TMPCMD
EOF
chmod a+x $TMPCMD
exec "$@" -e $TMPCMD
}
#
# run the command line passed as positional parameters either via
# gksu/kdesu or via su command in a terminal emulator.
#
elevate() {
TITLEOPT=""
GEOMOPT=""
case `basename $XTERM` in
"xterm")
TITLEOPT="-title"
GEOMOPT="-geometry "
;;
"gnome-terminal" | "konsole" | "x-terminal-emulator")
TITLEOPT="--title"
GEOMOPT="--geometry="
;;
esac
case `basename $SU` in
"kdesu" )
# --caption
SUOPT="-t"
;;
"gksu" )
# --title
SUOPT=""
;;
"su" )
SUOPT="- root -c"
;;
esac
( echo "echo The application \"$@\" will update your ${PRODUCTNAME} installation."
echo "echo"
echo "$SU" "$SUOPT" "$@"
) | run_in_terminal "$XTERM" "$TITLEOPT" "$TITLE" ${GEOMOPT}+300+300
}
update_pkg() {
ADMINFILE=`make_tempfile 'Apache_OpenOffice-Online-Update-admin'`
cat >> $ADMINFILE << EOF
action=nocheck
conflict=nocheck
setuid=nocheck
idepend=nocheck
rdepend=nocheck
mail=
EOF
PKGLIST=""
for i in `cd $1; ls -d *`; do
pkginfo -q $i && PKGLIST="$PKGLIST $i"
done
pkgrm -n -a $ADMINFILE $PKGLIST
pkgadd -n -a $ADMINFILE -d $1 $PKGLIST
rm -f $ADMINFILE
}
#
# main
#
CMD="`basename $0`"
BASEDIR="`dirname $0`"
ABSBASEDIR="`cd $BASEDIR; pwd`"
if [ -z "$DISPLAY" ]; then
SU="su"
XTERM=""
else
# define search order depending on the desktop in use ..
if [ "`uname -s`" = "SunOS" ]; then
XPROP=/usr/openwin/bin/xprop
GREP=/usr/xpg4/bin/grep
MKTEMP=/usr/bin/mktemp
else
if [ -x /usr/X11/bin/xprop ]; then
XPROP=/usr/X11/bin/xprop
else
XPROP=/usr/bin/xprop
fi
GREP=grep
MKTEMP=/bin/mktemp
fi
# use desktop specific tools where possible, but prefer X11 su over terminal emulators
if $XPROP -root | $GREP -q '^KWIN_RUNNING'; then
SULIST="$KDEXCMDS $GNOMEXCMDS"
XTERMLIST="$KDECMDS $MISCCMDS"
else
SULIST="$GNOMEXCMDS $KDEXCMDS"
XTERMLIST="$GNOMECMDS $MISCCMDS"
fi
# search for the first available terminal emulator
for i in $XTERMLIST; do
if [ -x $i ]; then
XTERM=$i
break
fi
done
# we prefer gksu or kdesu if available
SU="su"
for i in $SULIST; do
if [ -x $i ]; then
SU=$i
break
fi
done
fi
if [ "$CMD" = "update" ]; then
if [ $# -gt 0 ]; then
[ -d $1 -a $# -eq 1 ] || Usage
elevate "$ABSBASEDIR/$CMD"
else
if [ -d "$BASEDIR/RPMS" ]; then
# do not use --hash as the control sequence to edit the current line does not work
# in our setup (at least not with kdesu)
rpm -v --freshen `find "$BASEDIR"/RPMS -name '*.rpm'`
elif [ -d "$BASEDIR/DEBS" ]; then
dpkg --install --selected-only --recursive "$BASEDIR"/DEBS
elif [ -d "$BASEDIR/packages" ]; then
update_pkg "$BASEDIR/packages"
fi
fi
else
Usage
fi