:
#  ------------------------------------------------------------------------
#  Title        : Installations - Shellskript fuer neue BITs-Software
#  ------------------------------------------------------------------------
#                  This is an UNPUBLISHED work COPYRIGHT by
#		  "ArtCom, Atelier fr Computergrafik GmbH"
#		   Grazer Str. 8, D-28359 Bremen, Germany.
#       It may be used, copied, or distributed only as permitted in a
#                              written license.
#  ------------------------------------------------------------------------
#  Created      :            19-Mar-89 / 10:00 / (pf)
#  Version Impl.:       Fri, 11-Feb-2000 / 15:49 / (pf+,rb,mk,tc)
#  Portability  : XENIX Bourne shell
#  State        : under development
#  Purpose      : belongs to the XENIX port of BITS
#I Usage        : /bitslib/service/install
#I Remarks      : Dieses Skript wird von den Kunden zur Installation neuer
#I		  Software-Versionen verwendet.
#I                Installation ueber XENIX-Net nicht moeglich !
#  ------------------------------------------------------------------------
#
if [ "${LANGUAGE}" ]
then :
else LANGUAGE=deu
fi

if   [ -z "$1" ]
then if   [ "$OS" = "XENIX" ] || [ "$OS" = "SCOSV" ]
     then set -- tape
     else set -- cdrom
     fi
fi
media=$1

MSG_CAT=/bitslib/service/SERVImsg.${LANGUAGE}
. /bitslib/bin/.Messages

# einige nuetzliche Bourne Shell Prozeduren
#
# PROCEDURE Yes : Prompt for yes or no answer - returns non-zero for no
Yes() {
	while	read yn
	do	case $yn in
		       [yYjJ])	return 0 	;;
		       [nN])	return 1	;;
		       *) Error 46
		       ;;
		esac
	done
}
#
# PROCEDURE Error (msgNum : CARDINAL);
Error() {
	PARAM=$1
	(echo "\007\c"; Print install 47;
	 echo " : "; PrintLn install ${PARAM}) >&2
	return 1
}
#
# PROCEDURE Super : BOOLEAN;  (* are we root ? else error ! *)
Super() {
    if [ -w /etc/passwd ]
    then	return 0
    else	
#> Sie muessen Superuser ('root') -Zugriffsrechte haben.
		Error 48
#> Der Benutzer 'service' sollte die userid-Nummer '0' haben !
#> Bitte pruefen Sie, ob Sie sich als service eingeloggt haben und was
#> in der /etc/passwd steht.
		MultiPrint install 49 50 51
	    return 1
    fi
}
#
# PROCEDURE CleanUp (); 
# removes all /tmp files as defined by $cleanupFiles
cleanupFiles=
CleanUp() {
	if [ "$cleanupFiles" ]
	then	#> Loeschen der temporaeren (/tmp)-Dateien.
		PrintLn install 1 
		cd /tmp
		rm -rf $cleanupFiles 2> /dev/null
	fi
	return 0
}
# 
#
Interuptus() {
	#> *** Installation abgebrochen ***
	PrintLn install 2
	if [ "$cleanupFiles" ]
	then	#> Loeschen der temporaeren (/tmp)-Dateien.
		PrintLn install 1
		cd /tmp
		rm -rf $cleanupFiles 2> /dev/null
	fi
	exit 1
}
#
# PROCEDURE FirstTime ();
# create a service user for BITs Software :
FirstTime() {
	echo "service::0:64:BITs Software Service:/bitslib/service:/bin/sh" >>/etc/passwd
#> In Zukunft koennen Wartungsaufgaben, wie das Einspielen neuer
#> Software, das Einrichten von Benutzern, etc. durch Einloggen mit dem
#> Benutzerkuerzel 
#> 		'service' 
#> erfolgen. Da der neu eingerichtete Benutzer 'service' die gleichen
#> Rechte wie 'root' hat, sollten Sie ein sicheres Passwort waehlen.
#> Vergeben Sie jetzt bitte ein neues Passwort fuer den Benutzer 'service':
	MultiPrint install 3 4 5 6 7 8 9
	passwd service
	#> Der 'service'-Account wird installiert...\c
	Print install 10
	echo "PATH=/bin:/usr/bin:/etc:/bitslib/service
export PATH
exec /bitslib/service/serviceSH" >./bitslib/service/.profile
	$TAPEOP rew
	#tar xqf $TAPE ./bitslib/service/serviceSH ./bitslib/service/makedisks
	tar xqf $TAPE ./tmp/serviceSH ./bitslib/service/makedisks
	mv ./tmp/serviceSH ./bitslib/service
	PrintLn install 11 #> okay.\n
#> Loggen Sie sich jetzt bitte aus und fahren mit der Installation
#> fort, in dem Sie sich als 'service' einloggen und im Menue den Punkt
#> 	1. BITs Software Update installieren
#> auswaehlen.
#> 
#> Sie koennen aber auch den Menuepunkt 
#> 	5. Erstellung eines Sicherungsbandes der BITs-Software
#> auswaehlen, bevor Sie mit 1. die neue Version einspielen, um im 
#> Notfall ein Magnetband mit der bisherigen Version parat zu haben.
	MultiPrint install 12 13 14 15 16 17 18 19 20
	exit 0
}
#
# ===============================================================
# Main part starts here :
# ===============================================================
#
trap Interuptus 1 2 3 15 
# ASSERT, that we are 'root' :
Super || exit 1

if   [ "$media" = cdrom ] && [ ! "$OS" = Linux ]
then dir=
     default=
     case "$OS" in
          SunOS) default=/cdrom/cdrom0;;
	   IRIX) default=/CDROM;;
	      *) ;;
     esac
     export dir default
     BlockPrint install dirName
     while [ -z "$dir" ]
     do  read dir
         [ -z "$dir" ] && dir=$default
         if   [ -d "$dir" ] && [ -x "$dir/install" ] && [ -d "$dir/pkgs" ]
         then cd $dir; exec ./install
         else BlockPrint install wrongDir
	      dir=
         fi
     done
fi

# Welches device ?
if   [ "$OS" = SunOS ]
then lw=
     default=0; export default
     while [ -z "$lw" ]
     do  GetMsg install 100 # welches Laufwerk ?
         read lw
	 [ -z "$lw" ] && lw=$default
	 cd /tmp
	 if   mt -f /dev/rmt/${lw}bn rewind && tar xf /dev/rmt/${lw}bn
	 then :
	 else GetMsg install 101 # Fehler beim Lesen der Skripte
	      lw=
	 fi
     done
     exec ./installbits $lw
     exit 1
elif [ "$OS" = IRIX ]
then dev=
     default=/dev/exa; export default
     while [ -z "$dev" ]
     do  GetMsg install driveName # Name des Tape-Devices
	 read dev
	 [ -z "$dev" ] && dev=$default
	 cd /tmp
	 if   mt -f $dev rewind && tar xf $dev
	 then :
	 else GetMsg install 101 # Fehler beim Lesen der Skripte
              dev=
	 fi
     done
     exec ./installbits $dev
     exit 1
elif [ "$OS" = "Linux" ]
then for CD_MPT in /cdrom /misc/cd /cd /mnt /mnt/cd /var/adm/mount ; do
         mount /dev/cdrom $CD_MPT || mount $CD_MPT
	 if [ -r $CD_MPT/start.sh ]
	 then cd $CD_MPT
	      exec ./start.sh # Dieses Skript auf der CD erledigt dann alles
	      # 
	      echo "Wrong CD-Rom? The second stage install script 'start.sh'"
	      echo "seems to be missing from your CDROM"
	      echo "or may be the exec option is missing in your /etc/fstab"
	      sleep 2
	      umount $CD_MPT
	      exit 1
	 fi
	 umount $CD_MPT
     done
     echo "Can't mount cd ! Please check your CDROM drive or"
     echo "your automount setup (look at /etc/fstab)"
     sleep 2
     exit 1
else : #> Update vom Spulenmagnetband ?\c
     Print install 21
     if Yes
     then TAPEOP=mtape fname /dev/rmt0
	  TAPE="8"
     else TAPEOP="mtape fname /dev/exa"
	  TAPE="3"
     fi
fi
###$TAPEOP status >/dev/null 2>/dev/null 
###if [ ! $? -eq 2 ] 
###then	Error "Die Bandstation ist nicht ansprechbar !"
	###exit 1
###fi

# ASSERT, that a service account is available :
grep '^service:' /etc/passwd >/dev/null || FirstTime
#>
#> 		       @@@@@@   @@@@   @@@@@@          
#> 			@@  @@   @@    @ @@ @          
#> 			@@  @@   @@      @@     @@@@@  
#> 			@@@@@    @@      @@    @@      
#> 			@@  @@   @@      @@     @@@@   
#> 			@@  @@   @@      @@        @@  
#> 		       @@@@@@   @@@@    @@@@   @@@@@   
#> 					   
#> 		@@  @@             @@@             @            
#> 		@@  @@              @@            @@            
#> 		@@  @@  @@ @@@      @@   @@@@    @@@@@   @@@@   
#> 		@@  @@   @@  @@  @@@@@      @@    @@    @@  @@  
#> 		@@  @@   @@  @@ @@  @@   @@@@@    @@    @@@@@@  
#> 		@@  @@   @@@@@  @@  @@  @@  @@    @@ @  @@      
#> 		@@@@@@   @@      @@@ @@  @@@ @@    @@    @@@@   
#> 			@@@@                                    
#> 
#> 			   Installations-Programm
clear
MultiPrint install 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
cd /
# 
# Einspielen eines Shell-Skriptes mit aktuellen Kommandos (der aktuellen
# Version der tatsaechlichen Installation)
if [ "$TAPE" = "8" ]
then #> Bitte legen Sie das Band ein und schalten die Bandstation ONLINE
     PrintLn install 41
     #> Wenn fertig bitte <ENTER> druecken...\c
     Print install 42
     read answer
fi
$TAPEOP rew
while true ; do
#	if tar xqv$TAPE ./bitslib/service/actual.sh \
#			./bitslib/service/SERVImsg.deu \
#			./bitslib/bin/.Messages ./bitslib/bin/.Messages.awk
# Die Dateien werden zuerst nach '/tmp' eingelesen, um alte Versionen nicht
# ueberzubrezeln. (Fuer den Fall eines Abbruchs)
# 'actual.sh' muss diese Dateien dann in die richtigen '/bitslib'-
# Verzeichnisse bewegen.
	if tar xqv$TAPE ./tmp/actual.sh \
			./tmp/SERVImsg.deu \
			./tmp/SERVImsg.eng \
			./tmp/SERVImsg.fra \
			./tmp/SERVImsg.por \
			./tmp/SERVImsg.spa \
			./tmp/.Messages ./tmp/.Messages.awk \
			./tmp/releaseSize
	then	$TAPEOP rew
		if [ "$TAPE" = "8" ]
		then	exec ./tmp/actual.sh tape
		else	exec ./tmp/actual.sh exa
		fi
		Error 43 #> Hat nicht geklappt !
		exit 1
	else	#> Hat nicht geklappt. (nicht das richtige Band oder so)
		Error 44
		#> nochmal probieren : <ENTER> druecken...\c
		Print install 45
		read answer
	fi
done
