123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- #! /bin/sh
- #
- # Product setup script
- #
- # Go to the proper setup directory (if not already there)
- cd `dirname $0`
- # defaults
- FATAL_ERROR="Fatal error, no tech support email configured in this setup"
- # try to get root prior to running setup?
- # 0: no
- # 1: prompt, but run anyway if fails
- # 2: require, abort if root fails
- GET_ROOT=0
- XSU_ICON=""
- # You may want to set USE_XHOST to 1 if you want an X11 application to
- # be launched with root privileges right after installation
- USE_XHOST=0
- # this is the message for su call, printf
- SU_MESSAGE="You need to run this installation as the super user.\nPlease enter the root password."
- NULL=/dev/null
- # See if we have the XPG4 utilities (Solaris)
- if test -d /usr/xpg4/bin; then
- PATH=/usr/xpg4/bin:$PATH
- fi
- # Return the appropriate architecture string
- DetectARCH()
- {
- status=1
- case `uname -m` in
- amd64 | x86_64)
- echo "amd64"
- status=0;;
- i?86 | i86*)
- echo "x86"
- status=0;;
- 90*/*)
- echo "hppa"
- status=0;;
- *)
- case `uname -s` in
- IRIX*)
- echo "mips"
- status=0;;
- AIX*)
- echo "ppc"
- status=0;;
- *)
- arch=`uname -p 2> /dev/null || uname -m`
- if test "$arch" = powerpc; then
- echo "ppc"
- else
- echo $arch
- fi
- status=0;;
- esac
- esac
- return $status
- }
- # Return the appropriate version string
- DetectLIBC()
- {
- status=1
- if [ `uname -s` != Linux ]; then
- echo "glibc-2.1"
- return $status
- fi
- if [ -f `echo /lib/libc.so.6* | tail -n 1` ]; then
- # I'm not using glibc-specific binaries
- # this step even fails on amd64 gentoo, only has GLIBC_2.2 2.3 in it's strings
- echo "glibc-2.1"
- status=0
- # if [ fgrep GLIBC_2.1 /lib/libc.so.6* 2> $NULL >> $NULL ]; then
- # echo "glibc-2.1"
- # status=0
- # else
- # echo "glibc-2.0"
- # status=0
- # fi
- elif [ -f /lib/libc.so.5 ]; then
- echo "libc5"
- status=0
- else
- echo "unknown"
- fi
- return $status
- }
- DetectOS()
- {
- os=`uname -s`
- if test "$os" = "OpenUNIX"; then
- echo SCO_SV
- else
- echo $os
- fi
- return 0
- }
- # Detect the environment
- arch=`DetectARCH`
- libc=`DetectLIBC`
- os=`DetectOS`
- args=""
- # Import preferences from a secondary script
- if [ -f setup.data/config.sh ]; then
- . setup.data/config.sh
- elif [ -f SETUP.DAT/CONFIG.SH\;1 ]; then
- # HP-UX and other systems unable to get LFN correctly
- . SETUP.DAT/CONFIG.SH\;1
- fi
- # Add some standard paths for compatibility
- PATH=$PATH:/usr/ucb
- # call setup with -auth when ran through su/xsu
- auth=0
- if [ "$1" = "-auth" ]
- then
- auth=1
- shift
- fi
- # Find the installation program
- # try_run [-absolute] [-fatal] INSTALLER_NAME [PARAMETERS_PASSED]
- # -absolute option: if what you are trying to execute has an absolute path
- # NOTE: maybe try_run_absolute would be easier
- # -fatal option: if you want verbose messages in case
- # - the script could not be found
- # - it's execution would fail
- # INSTALLER_NAME: setup.gtk or setup
- # PARAMETERS_PASSED: additional arguments passed to the setup script
- try_run()
- {
- absolute=0
- if [ "$1" = "-absolute" ]; then
- absolute=1
- shift
- fi
- fatal=0
- # older bash < 2.* don't like == operator, using =
- if [ "$1" = "-fatal" ]; then
- # got fatal
- fatal=1
- shift
- fi
- setup=$1
- shift
-
- # First find the binary we want to run
- failed=0
- if [ "$absolute" -eq 0 ]
- then
- setup_bin="setup.data/bin/$os/$arch/$libc/$setup"
- # trying $setup_bin
- if [ ! -f "$setup_bin" ]; then
- setup_bin="setup.data/bin/$os/$arch/$setup"
- # libc dependant version failed, trying again
- if [ ! -f "$setup_bin" ]; then
- failed=1
- fi
- fi
- if [ "$failed" -eq 1 ]; then
- if [ "$fatal" -eq 1 ]; then
- cat <<__EOF__
- This installation doesn't support $libc on $os / $arch
- (tried to run $setup)
- $FATAL_ERROR
- __EOF__
- fi
- return $failed
- fi
- # Try to run the binary ($setup_bin)
- # The executable is here but we can't execute it from CD
- # NOTE TTimo: this is dangerous, we also use $setup to store the name of the try_run
- setup="$HOME/.setup$$"
- rm -f "$setup"
- cp "$setup_bin" "$setup"
- chmod 700 "$setup"
- trap "rm -f $setup" 1 2 3 15
- fi
- # echo Running "$setup" "$@"
- if [ "$fatal" -eq 0 ]; then
- "$setup" "$@"
- failed="$?"
- else
- "$setup" "$@" 2>> $NULL
- failed="$?"
- fi
- if [ "$absolute" -eq 0 ]
- then
- # don't attempt removal when we are passed an absolute path
- # no, I don't want to imagine a faulty try_run as root on /bin/su
- rm -f "$setup"
- fi
- return "$failed"
- }
- if [ "$GET_ROOT" -eq 3 ]
- then
- GOT_ROOT=`id -u`
- if [ "$GOT_ROOT" != "0" ]
- then
- printf "$SU_MESSAGE\n"
- echo "Press Enter to continue or Ctrl-C to abort"
- read
- fi
- GET_ROOT=0
- fi
- # if we have not been through the auth yet, and if we need to get root, then prompt
- if [ "$auth" -eq 0 ] && [ "$GET_ROOT" -ne 0 ]
- then
- GOT_ROOT=`id -u`
- if [ "$GOT_ROOT" != "0" ]
- then
- if [ "$USE_XHOST" -eq 1 ]; then
- xhost +127.0.0.1 2> $NULL > $NULL
- fi
- if [ "$GET_ROOT" -eq 1 ]
- then
- try_run xsu -e -a -u root -c "sh `pwd`/setup.sh -auth" $XSU_ICON -m "$XSU_MESSAGE"
- else
- try_run xsu -e -a -u root -c "sh `pwd`/setup.sh -auth" $XSU_ICON
- fi
- status="$?"
- # echo "got $status"
- # if try_run successfully executed xsu, it will return xsu's exit code
- # xsu returns 2 if ran and cancelled (i.e. the user 'doesn't want' to auth)
- # it will return 0 if the command was executed correctly
- # summing up, if we get 1, something failed
- if [ "$status" -eq 0 ]
- then
- # the auth command was properly executed
- exit 0
- elif [ "$status" -eq 1 ]
- then
- # xsu wasn't found, or failed to run
- # if xsu actually ran and the auth was cancelled, $status is > 1
- # try with su
- # su will return 1 if auth failed
- # we need to distinguish between su auth failed and su working, and still get setup.sh return code
- printf "$SU_MESSAGE\n"
- try_run -absolute /bin/su root -c "export DISPLAY=$DISPLAY;sh `pwd`/setup.sh -auth"
- status="$?"
- if [ "$status" -eq 1 ] && [ "$GET_ROOT" -eq 1 ]
- then
- echo "Running setup as user"
- else
- exit $status
- fi
- elif [ "$status" -eq 3 ]
- then
- if [ "$GET_ROOT" -eq 1 ]
- then
- echo "Running setup as user"
- else
- # the auth failed or was canceled
- # we don't want to even start the setup if not root
- echo "Please run this installation as the super user"
- exit 1
- fi
- fi
- # continue running as is
- fi
- fi
- # run the setup program (setup.gtk first, then setup)
- # except when trying setup.gtk first then console setup, always exit with 0
- # if the setup was cancelled, it is not our problem
- try_run setup.gtk $args $*
- status="$?"
- if [ "$status" -ne 0 ] && [ "$status" -ne 3 ]; then # setup.gtk couldn't connect to X11 server - ignore
- try_run setup $args $*
- status="$?"
- if [ "$auth" -eq 1 ] && [ "$status" -ne 0 ]
- then
- # distinguish between failed su and failed su'ed setup.sh
- exit 2
- fi
- exit $status
- fi
|