xref: /aoo4110/main/setup_native/scripts/update.sh (revision b1cdbd2c)
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