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