home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 July & August / Pcwk78a98.iso / Wtestowe / Clico / UNIX / HSS / MAS_HP.TAR / mvw / install next >
Text File  |  1997-09-08  |  28KB  |  1,139 lines

  1. #! /bin/sh
  2. #
  3. # @(#) install Version 1.6 Created 96/12/06 12:29:23
  4. # ------------------------------------------------------------------------
  5. # Copyright (C) JSB Computer Systems Ltd, 1996.
  6. #
  7. # This module contains proprietary information of JSB Computer Systems Ltd,
  8. # and should be treated as Confidential.
  9. #
  10. #
  11. #  install/mvw.license - Installation and User License upgrade Script 
  12. #                        for MultiView Mascot 4.0.x
  13. # ------------------------------------------------------------------------
  14.  
  15. ##
  16. #  Common Environment Variables.
  17. ##
  18.  
  19. HOMEDIR=`pwd`
  20. CENTRAL=$HOMEDIR/mvw    ## the default central directory for install
  21. DEFAULTCENTRAL=/usr/mvw ## the default central directory for mvw.license
  22.                         ## NB #MVWDIR overrides $DEFAULTCENTRAL 
  23. BINDIR=/usr/bin
  24. ## Default Demonstration Key
  25. DEMOPREFIX=JSB
  26. DEMONUMBER=999999
  27. DEMOKEY=BN8DzD7n
  28.  
  29. ## Compressed file name
  30. TARFILE=Mascot.tar
  31. EXPANDFILE=$TARFILE.Z
  32.  
  33. if [ -x /usr/5bin/echo ]
  34. then
  35.     ECHO=/usr/5bin/echo
  36. else
  37.     ECHO=echo
  38. fi
  39.  
  40. PAGER=${PAGER:-more}
  41. README=readme
  42. ## make sure permissions in the central directory are OK
  43. CHECK_PERMS=TRUE
  44.  
  45. ## Auto brand vars
  46. AUTOBRAND=FALSE
  47. NEWKEY=FALSE
  48.  
  49. ##
  50. ## Internationalisation begins here
  51. ##
  52. #  Error Messages.
  53. ##
  54. ERR01="    Could not find "
  55. ERR02="failed with following error :"
  56. ERR03="aborted\n"
  57. ERR04="    Incorrect serialisation"
  58. ERR05="    Could not create directory "
  59. ERR06="    Could not change permissions on directory "
  60. ERR07="    You are installing from the wrong directory - check installation notes"
  61. ERR08="    Missing file - "
  62. ERR09="    Could not change ownership for  "
  63. ERR10="    Could not change group for  "
  64. ERR11="    Could not link Mascot "
  65. ERR12="    Could not link Host Support "
  66. ERR13="    Serialisation aborted at user request "
  67. ERR14="    Installation aborted at user request "
  68. ERR15="    Could not change permissions for "
  69. ERR16="    Could not create backup directory "
  70. ERR17="    Conversion of command file(s) failed, please see audit.txt"
  71. ERR18="    File expansion has failed"
  72.  
  73. BRAND00="\nSerial Number OK."
  74. BRAND01="\nInvalid Serial Number / Activation Key sequence."
  75. BRAND02="\nSerial Number or Activation Key has incorrect format."
  76. BRAND03="\nInvalid upgrade path - no action taken."
  77. BRAND04="\nThis key has already been used."
  78. BRAND05="\nYou must run as root to install / upgrade."
  79. BRAND06="\nInvalid argument."
  80. BRAND07="\nFailed to access Mascot."
  81. BRAND08="\nFailed to access Host Support."
  82. BRAND09="\nFailed to open binary."
  83. BRAND10="\nFailed to write binary stamp area."
  84. BRAND11="\nFailed to find the binary stamp area."
  85. BRAND12="\nFailed to read the binary stamp area."
  86. BRAND13="\nInvalid Serial Number / Activation Key sequence."
  87. BRAND14="\nFailed to open binary because somebody else is using it."
  88. BRAND15="\nSerial number does not match product."
  89. BRAND16="\nInternal error - key does not match product."
  90. BRAND17="\nFailed to access license configuration file - check MVWDIR."
  91. BRAND18="\nLicense configuration corrupt - the product should be reinstalled."
  92. BRAND19="\n\nChecking for existing Mascot serial numbers and activation keys\n"
  93. BRAND20="Autobranding binaries with serial no.: "
  94. BRAND21=" and act.  key: "
  95.  
  96.  
  97. LIC01="This procedure may be used to increase your MultiView Mascot user license.\nTo do this you must  :\n\n1. Be a running as a super-user ( root )\n2. Make sure that no one is using MultiView Mascot or the\n   MultiView DeskTop Host Support Server.\n\nDo you wish to continue \c"
  98. LIC02="Can't find Mascot Central Directory - type in the pathname\c"
  99. ##
  100. #  Prompts
  101. ##
  102. PRM01="\nInstallation of MultiView Mascot\n================================\n"
  103. PRM02="\nMultiView Mascot User License upgrade\n=====================================\n"
  104. PRM03="\nDo you wish to try again \c"
  105. PRM04=", or d for a demo copy\c"
  106. PRM05="completed successfully."
  107. PRM06="\n\nEnter Serial Number\c"
  108. PRM07="Enter Activation Key\c"
  109. PRM08="Can't find mascot binary - type in the path name\c"
  110. PRM09="Can't find mvw_ixsrv binary - type in the path name\c"
  111. PRM10="Invalid input "
  112. PRM11="\nDo you have any other Activation Keys \c"
  113. PRM12=", or q to quit : \c"
  114. PRM13="Warning : "
  115. PRM14="Checking file permissions\c"
  116. PRM15="\nInstallation"
  117. PRM16="\nUser License increase"
  118. PRM17="\nThere is a readme file containing notes specific \nto this release. Do you wish to read it now \c"
  119. PRM18="\nMoving files into place\c"
  120. PRM19="\nMascot already installed, saving existing files"
  121. PRM20="\nCreating directory structure \c"
  122. PRM21="\nConverting the central mascot.rc command file to new format \c"
  123. PRM22="\nMascot has been upgraded.\n\nYour original copy has been saved in\c"
  124. PRM23="\nYour old command file has been converted to the new format.\nPlease reference the file 'audit.txt' and the section 'Mascot command\nfiles' in chapter 'Mascot Files' in the Configuration Guide for more\ninformation on the new command files. The 'readme' issued with this product\ngives details on how to upgrade other mascot.rc type command files."
  125. PRM24="Uncompressing archive ...\c"
  126. PRM25="\n\nExtracting files from archive ...\c"
  127.  
  128. CHKYN00=Y
  129. CHKYN01=y
  130. CHKYN02=N
  131. CHKYN03=n
  132. CHKYN04=Q
  133. CHKYN05=q
  134. CHKYN06="(y/n)? \c"
  135. CHKYN07=D
  136. CHKYN08=d
  137. ##
  138. ## Internationalisation ends here
  139. ##
  140.  
  141. ##
  142. #  UNIX Tools List
  143. ##
  144. TOOLSLIST="/bin/cat /bin/chmod /bin/ln /bin/mkdir /bin/mv /bin/pwd /bin/rm \
  145.  /usr/bin/awk /usr/bin/cut /bin/ed /bin/find /usr/bin/tar /usr/bin/uncompress \
  146.  /bin/grep"
  147.  
  148. ##
  149. # ValidateString()
  150. # $1 = string to validate
  151. # $2 = numeric upper alphanumeric
  152. #     Note :- upper only checks the First 3 Characters as it's used 
  153. #             for the Prefix _only_
  154. # $3 = length
  155. # returns 0 on success 
  156. #         1 on fail - ie invalid format
  157. ##
  158. ValidateString()
  159. {
  160.     len=`$ECHO $1 | awk '{ print length($1) }' `
  161.     [ "$len" = "$3" ] || return 1
  162.  
  163.     case "$2" in
  164.       numeric)      $ECHO "$1" | grep -v "[0-9]" > /dev/null 2>&1 
  165.                     [ $? -ne 0 ] || return 1 ;;
  166.  
  167.       upper)        $ECHO "$1" | grep -v "[A-Z]"  > /dev/null 2>&1
  168.                     [ $? -ne 0 ] || return 1 ;;
  169.  
  170.       alphanumeric) $ECHO $1 | grep -v "[a-z,A-Z,0-9]" > /dev/null 2>&1 
  171.                     [ $? -ne 0 ] || return 1 ;;
  172.     esac
  173.     return 0
  174. }
  175.  
  176. ##
  177. # Function   : FindBinaries()
  178. # Purpose    : looks for the mascot and mvw_ixsrv binaries in 
  179. #              $BINDIR and $CENTRAL/bin. If it can't find them
  180. #              It prompts the user for the path name
  181. #              $MAS and $HS are set containing the full pathname 
  182. #              of the binaries
  183. #              If the binaries are not found in $CENTRAL/bin 
  184. #              then $Upgrade flag is set to TRUE
  185. #              
  186. #   Returns :  0 on Success
  187. #              1 on Fail
  188. ##
  189. FindBinaries()
  190. {
  191.     Upgrade=FALSE
  192.  
  193.     if [ -x $CENTRAL/init/mascot ]
  194.     then
  195.        MAS=$CENTRAL/init/mascot
  196.     else
  197.         if [ -x $CENTRAL/tmp/init/mascot ]
  198.         then
  199.             MAS=$CENTRAL/init/mascot
  200.         else
  201.             if [ -x $BINDIR/mascot ]
  202.             then 
  203.                 MAS=$BINDIR/mascot
  204.                 Upgrade=TRUE
  205.             else
  206.             ## can't find mascot binary prompt user for it
  207.             Found=FALSE
  208.             while [ $Found = FALSE ]
  209.             do
  210.                 $ECHO  $PRM08 
  211.                 $ECHO  $PRM12 
  212.                 MAS=`line`
  213.                 [ -d "$MAS" ] && MAS=$MAS/mascot
  214.          
  215.                 if [ -x "$MAS" ]
  216.                 then
  217.                     Upgrade=TRUE
  218.                     Found=TRUE
  219.                 else
  220.                     ## check for q or Q 
  221.                     [ "$MAS" = "$CHKYN04" -o "$MAS" = "$CHKYN05" ] && return 1
  222.                 fi
  223.              done
  224.           fi
  225.       fi
  226.   fi
  227.  
  228.   if [ -x $CENTRAL/init/mvw_ixsrv ]
  229.   then 
  230.       HS=$CENTRAL/init/mvw_ixsrv
  231.   else
  232.      if [ -x $CENTRAL/tmp/init/mvw_ixsrv ]
  233.      then 
  234.          HS=$CENTRAL/init/mvw_ixsrv
  235.      else
  236.          if [ -x $BINDIR/mvw_ixsrv ]
  237.          then 
  238.              HS=$BINDIR/mvw_ixsrv
  239.              Upgrade=TRUE
  240.          else
  241.             ## can't find mvw_ixsrv binary prompt user for it
  242.             Found=FALSE
  243.             while [ $Found = FALSE ]
  244.             do
  245.                $ECHO  $PRM09
  246.                $ECHO  $PRM12
  247.                HS=`line`
  248.                [ -d "$HS" ] && HS=$HS/mvw_ixsrv
  249.      
  250.                if [ -x "$HS" ]
  251.                then
  252.                    Upgrade=TRUE
  253.                    Found=TRUE
  254.               else
  255.                   ## check for q or Q 
  256.                   [ "$HS" = $CHKYN04 -o "$HS" = $CHKYN05 ] && return 1
  257.               fi
  258.            done
  259.      fi 
  260.       fi
  261.   fi
  262.  return 0
  263.   
  264. }
  265.  
  266. ##
  267. #  Function  : GetSerialNumber() 
  268. #  Purpose   : Prompts user for Serial Number and activation key 
  269. #              if input = "q" exit on user request
  270. #  Arguments : None
  271. #  Returns   : 0 on Success
  272. #              1 on Fail
  273. #              2 if demo copy required 
  274. #  
  275. ##
  276. GetSerialNumber()
  277. {
  278.    Done=FALSE
  279.    while [ $Done != TRUE ]
  280.    do
  281.       InvalidInput=FALSE
  282.       SerialNumber=
  283.       while [ -z "$SerialNumber" ]
  284.       do
  285.         $ECHO $PRM06
  286.         if [ $Upgrade = FALSE ]
  287.         then
  288.            $ECHO $PRM04  # or c to continue
  289.         fi
  290.         $ECHO $PRM12
  291.         SerialNumber=`line`
  292.       done
  293.  
  294.       if [ $Upgrade = FALSE ]
  295.       then
  296.         # look for user typing c to continue
  297.         if [ "$SerialNumber" = "$CHKYN07" -o "$SerialNumber" = "$CHKYN08" ] 
  298.         then
  299.            return 2
  300.         fi
  301.       fi
  302.  
  303.       # look for user typing c to continue
  304.       [ "$SerialNumber" = $CHKYN04 -o "$SerialNumber" = $CHKYN05 ] && return 1
  305.       ActivationKey=
  306.       while [ -z "$ActivationKey" ]
  307.       do
  308.          $ECHO $PRM07
  309.          $ECHO $PRM12
  310.          ActivationKey=`line`
  311.       done
  312.       [ "$ActivationKey" = $CHKYN04 -o "$ActivationKey" = $CHKYN05 ] && return 1
  313.       ##
  314.       ## validate the user input - If its an upgrade and we already have 
  315.       ## a serial number we don't need to validate it again 
  316.       ##
  317.       len=`$ECHO $SerialNumber | awk '{ print length($1) }' `
  318.       if [ "$len" -eq 9 ] 
  319.       then 
  320.          Prefix=`$ECHO $SerialNumber | cut -c1-3 `
  321.          Number=`$ECHO $SerialNumber | cut -c4-9 `
  322.          ValidateString $Prefix upper 3 || InvalidInput=TRUE 
  323.          ValidateString $Number numeric 6 || InvalidInput=TRUE 
  324.       else
  325.          InvalidInput=TRUE
  326.       fi
  327.       ValidateString "$ActivationKey" alphanumeric 8 || InvalidInput=TRUE 
  328.       if [ $InvalidInput = FALSE ]
  329.       then 
  330.         Done=TRUE 
  331.       else
  332.         $ECHO $PRM10
  333.       fi
  334.    done
  335.  
  336.    return 0 
  337. }
  338.  
  339.  
  340. ##
  341. #  check() - serialise Mascot
  342. ##
  343.  
  344. check()
  345. {
  346.      HSS=FALSE
  347.      Finished=FALSE
  348.  
  349.      while [ $Finished = FALSE ]
  350.      do
  351.     if [ $AUTOBRAND = TRUE ]
  352.     then
  353.       if [ $NEWKEY = FALSE ]
  354.       then
  355.         Finished=TRUE
  356.           fi
  357.     else
  358.           GetSerialNumber 
  359.           Returned=$?
  360.  
  361.           if [ $Returned -eq 1 ]
  362.           then 
  363.             infail "$ERR13" 
  364.       fi
  365.  
  366.           if [ $Returned -eq 2 ] 
  367.           then
  368.              ## this is a test drive pack  
  369.             Finished=TRUE
  370.             Prefix=$DEMOPREFIX
  371.         Number=$DEMONUMBER
  372.             ActivationKey=$DEMOKEY
  373.           fi
  374.     fi
  375.  
  376.         if [ $Upgrade = FALSE ]
  377.         then
  378.            SaveMvw
  379.            MoveNew
  380.            Saved=TRUE
  381.         fi
  382.  
  383.         cd $CENTRAL/init
  384.  
  385.     if [ $AUTOBRAND = TRUE -a $NEWKEY = TRUE ]
  386.     then
  387.       Returned=0
  388.     else
  389.           ./mvw.check -M$MAS -H$HS -p$Prefix -s$Number -a$ActivationKey  > /dev/null 2>&1
  390.         Returned=$?
  391.     fi
  392.  
  393.         case $Returned in
  394.            1) if [ $Finished = TRUE ]
  395.               then
  396.                  infail "$BRAND01" 
  397.               else
  398.                  $ECHO $BRAND01       ## invalid sequence
  399.                  $ECHO $PRM03
  400.                  chkyn || infail "$ERR13" 
  401.                fi ;;
  402.            2) if [ $Finished = TRUE ]
  403.               then
  404.                  infail "$BRAND02" 
  405.               else
  406.                  $ECHO $BRAND02       ## incorrect format
  407.                  $ECHO $PRM03
  408.                  chkyn || infail "$ERR13" 
  409.                fi ;;
  410.            3) if [ $Finished = TRUE ]
  411.               then
  412.                  infail "$BRAND03" 
  413.               else
  414.                  $ECHO $BRAND03       ## can't upgrade with this SN
  415.                  $ECHO $PRM03
  416.                  chkyn || infail "$ERR13" 
  417.                fi ;;
  418.            4) if [ $Finished = TRUE ]
  419.               then
  420.                  infail "$BRAND03" 
  421.               else
  422.                  $ECHO $BRAND03       ## invalid upgrade path
  423.                  $ECHO $PRM03
  424.                  chkyn || infail "$ERR13" 
  425.                fi ;;
  426.            6) if [ $Finished = TRUE ]
  427.               then
  428.                  infail "$BRAND06" 
  429.               else
  430.                  $ECHO $BRAND06       ## invalid argument
  431.                  $ECHO $PRM03
  432.                  chkyn || infail "$ERR13" 
  433.                fi ;;
  434.            7) if [ $Finished = TRUE ]
  435.               then
  436.                  infail "$BRAND07" 
  437.               else
  438.                  $ECHO $BRAND07       ## failed to access mascot
  439.                  $ECHO $PRM03
  440.                  chkyn || infail "$ERR13" 
  441.                fi ;;
  442.            8) if [ $Finished = TRUE ]
  443.               then
  444.                  infail "$BRAND08" 
  445.               else
  446.                  $ECHO $BRAND08       ## failed to access mvw_ixsrv
  447.                  $ECHO $PRM03
  448.                  chkyn || infail "$ERR13" 
  449.                fi ;;
  450.            9) if [ $Finished = TRUE ]
  451.               then
  452.                  infail "$BRAND09" 
  453.               else
  454.                  $ECHO $BRAND09       ## failed to open binary
  455.                  $ECHO $PRM03
  456.                  chkyn || infail "$ERR13" 
  457.                fi ;;
  458.            10) if [ $Finished = TRUE ]
  459.               then
  460.                  infail "$BRAND10" 
  461.               else
  462.                  $ECHO $BRAND10      ## failed to write stamparea
  463.                  $ECHO $PRM03
  464.                  chkyn || infail "$ERR13" 
  465.                fi ;;
  466.            11) if [ $Finished = TRUE ]
  467.               then
  468.                  infail "$BRAND11" 
  469.               else
  470.                  $ECHO $BRAND11      ## failed to find stamparea
  471.                  $ECHO $PRM03
  472.                  chkyn || infail "$ERR13" 
  473.                fi ;;
  474.            12) if [ $Finished = TRUE ]
  475.               then
  476.                  infail "$BRAND12" 
  477.               else
  478.                  $ECHO $BRAND12      ## failed to read stamparea
  479.                  $ECHO $PRM03
  480.                  chkyn || infail "$ERR13" 
  481.                fi ;;
  482.            13) if [ $Finished = TRUE ]
  483.               then
  484.                  infail "$BRAND13" 
  485.               else
  486.                  $ECHO $BRAND13      ## internal error
  487.                  $ECHO $PRM03
  488.                  chkyn || infail "$ERR13" 
  489.                fi ;;
  490.            14) if [ $Finished = TRUE ]
  491.               then
  492.                  infail "$BRAND14" 
  493.               else
  494.                  $ECHO $BRAND14      ## Text file busy 
  495.                  $ECHO $PRM03
  496.                  chkyn || infail "$ERR13" 
  497.                fi ;;
  498.            15) if [ $Finished = TRUE ]
  499.               then
  500.                  infail "$BRAND15" 
  501.               else
  502.                  $ECHO $BRAND15      ## Wrong Binary 
  503.                  $ECHO $PRM03
  504.                  chkyn || infail "$ERR13" 
  505.                fi ;;
  506.            16) if [ $Finished = TRUE ]
  507.               then
  508.                  infail "$BRAND16" 
  509.               else
  510.                  $ECHO $BRAND16      ## internal error (personality 2)
  511.                  $ECHO $PRM03
  512.                  chkyn || infail "$ERR13" 
  513.                fi ;;
  514.            17) if [ $Finished = TRUE ]
  515.               then
  516.                  infail "$BRAND17" 
  517.               else
  518.                  $ECHO $BRAND17      ## access license file
  519.                  $ECHO $PRM03
  520.                  chkyn || infail "$ERR13" 
  521.                fi ;;
  522.            18) infail "$BRAND18" ;; ## corrupt license file
  523.            19) if [ $Finished = TRUE ]
  524.               then
  525.                  infail "$BRAND04" 
  526.               else
  527.                  $ECHO $BRAND04      ## duplicate key
  528.                  $ECHO $PRM03
  529.                  chkyn || infail "$ERR13" 
  530.                fi ;;
  531.             0) if [ $Finished = FALSE ]
  532.                then
  533.                   $ECHO $BRAND00      ## SN OK
  534.                   $ECHO $PRM11
  535.  
  536.                   chkyn || Finished=TRUE; AUTOBRAND=FALSE
  537.                fi ;;
  538.         esac
  539.    done
  540.  
  541.    if [ $AUTOBRAND = TRUE -a $NEWKEY = FALSE ]
  542.    then
  543.      return
  544.    fi
  545.  
  546.    if [ $Upgrade = FALSE ]
  547.    then
  548.       $ECHO "\n$PRM18 \c"
  549.       $ECHO ".\c"
  550.       mv mascot $BINDIR || infail "$ERR11"
  551.       MAS=$BINDIR/mascot
  552.       $ECHO ".\c"
  553.       mv mvw_ixsrv $BINDIR || infail "$ERR12"
  554.       HS=$BINDIR/mvw_ixsrv
  555.    fi
  556.  
  557.    chmod 4755 $MAS || infail "$ERR15" $MAS
  558.    $ECHO ".\c"
  559.    chmod 4755 $HS || infail "$ERR15" $HS
  560.    cd $HOMEDIR
  561.    $ECHO ".\c"
  562. }
  563.  
  564. ##
  565. #  chkyn() - Get yes or no answer
  566. ##
  567. chkyn()
  568. {
  569.    while :
  570.    do
  571.       $ECHO $CHKYN06
  572.       read reply 
  573.  
  574.       case $reply in
  575.     $CHKYN00*|$CHKYN01*)    return 0    ;;
  576.     $CHKYN02*|$CHKYN03*)    return 1    ;;
  577.       esac
  578.    done
  579. }
  580.  
  581.  
  582. ##
  583. #  infail() - report error and exit
  584. ##
  585. infail()
  586. {
  587.     if [ $Upgrade = FALSE ]
  588.     then
  589.         $ECHO "\n\n$PRM15 $ERR02\n"
  590.     else
  591.         $ECHO "\n\n$PRM16 $ERR02\n"
  592.     fi
  593.     $ECHO $1 $2
  594.     if [ $Upgrade = FALSE ]
  595.     then
  596.     $ECHO "$PRM15 $ERR03"
  597.     else
  598.     $ECHO "$PRM16 $ERR03"
  599.     fi
  600.  
  601. ##  if script in the middle of autobrand when error occured put original
  602. ##  license file back so when rerun will try to autobrand again
  603.  
  604.     if [ -n "$CENTRAL" ]
  605.     then
  606.       if [ -r $CENTRAL/init/License.auto ]
  607.       then
  608.         mv $CENTRAL/init/License.auto $CENTRAL/init/License
  609.       fi
  610.     fi
  611.  
  612.     exit 1
  613. }
  614.  
  615. ##
  616. #  start_up() - Start Up message 
  617. ##
  618. start_up()
  619. {
  620.    if [ $SCRIPTNAME = "mvw.license" ]
  621.    then                                    
  622.        Upgrade=TRUE
  623.        $ECHO $PRM02
  624.        $ECHO $LIC01
  625.        chkyn
  626.        if [ $? -eq 1 ]
  627.        then
  628.          exit 0
  629.        fi
  630.        ## its a user license increase and we need to find the central directory
  631.        ## first test for $MVWDIR environment variable
  632.        CENTRAL=
  633.        if [ -n "$MVWDIR"  -a -d "$MVWDIR" ]
  634.        then
  635.           CENTRAL=$MVWDIR
  636.        else
  637.            ## then test for $DEFAULTCENTRAL variable at head of this file
  638.           if [ -n "$DEFAULTCENTRAL"  -a -d "$DEFAULTCENTRAL" ]
  639.           then
  640.              CENTRAL=$DEFAULTCENTRAL
  641.           else
  642.              ## if not present ask the user
  643.              Found=FALSE
  644.              while [ $Found = FALSE ]
  645.              do
  646.                 CENTRAL=
  647.                 while [ -z "$CENTRAL" ]
  648.                 do
  649.                    $ECHO  $LIC02 
  650.                    $ECHO  $PRM12 
  651.                    CENTRAL=`line`
  652.                 done
  653.                 if [ -d "$CENTRAL" ]
  654.                 then
  655.                   Found=TRUE
  656.                 else
  657.                  ## check for q or Q 
  658.                  [ $CENTRAL = $CHKYN04 -o $CENTRAL = $CHKYN05 ] && return 1
  659.                 fi
  660.               done
  661.           fi
  662.        fi
  663.    else
  664.        Upgrade=FALSE
  665.        MVWDIR=$CENTRAL
  666.        export MVWDIR
  667.        $ECHO $PRM01
  668.    fi
  669.    Saved=FALSE
  670. }
  671.  
  672. ##
  673. #  UpgradedVersion() - If mascot.rc is converted, tell installer.
  674. ##
  675. UpgradedVersion()
  676. {
  677.    [ -z "$SAVEVERSION" ] && return
  678.    $ECHO $PRM22
  679.    $ECHO " : $HOMEDIR/mvw.$SAVEVERSION and\n$BINDIR/mascot.$SAVEVERSION, etc"
  680.    if [ -s $CENTRAL/audit.txt ]
  681.    then
  682.        $ECHO $PRM23
  683.    fi
  684. }
  685.  
  686. ##
  687. #  unix_tools() - Ensure UNIX utilites are available.
  688. ##
  689. unix_tools()
  690. {
  691.     for tool in `$ECHO $TOOLSLIST`
  692.     do
  693.         if [ "$tool" = "/usr/bin/tar" ]
  694.      then
  695.         # if /bin/tar exists then ok to go on to next
  696.         [ -x /bin/tar ] && continue
  697.         fi
  698.  
  699.     [ -x $tool ] || infail "$ERR01" $tool
  700.     done
  701. }
  702.  
  703. ##
  704. #  SuCheck() - returns 0 if running root ( Super-user )
  705. #                              1 if not
  706. ##
  707. SuCheck()
  708. {
  709.    cd /tmp
  710.    TMP=mascot.$$
  711.    cat /dev/null > $TMP
  712.    FIND=`find . -user 0 -name $TMP -print 2>/dev/null`
  713.    rm -f $TMP
  714.    if [ "$FIND" != ./$TMP ]
  715.    then
  716.       infail "$BRAND05"
  717.    fi
  718.    cd $HOMEDIR
  719. }
  720.  
  721.  
  722. ##
  723. #  checkbranded() - check for already install licenses
  724. #  file is read in on standard input  and each line is set 
  725. #  into the environment where 
  726. #  $1 is the prefix 
  727. #  $2 is the serial number 
  728. #  $3 is the activation key 
  729. #  $6 is the no. of users 
  730. ##
  731.  
  732. checkbranded()
  733. {
  734.  
  735.    list=`line`
  736.    while [ -n "$list" ]
  737.    do
  738.       set `$ECHO "$list"`
  739.       if [ $2 != "999999" ]
  740.       then
  741.         Prefix=$1
  742.     Number=$2
  743.         ActivationKey=$3
  744.     AUTOBRAND=TRUE    
  745.     
  746.         $ECHO $BRAND20$Prefix$Number$BRAND21$ActivationKey
  747.  
  748.     check
  749.  
  750.       fi
  751.  
  752.       list=`line`
  753.  
  754.       if [ -n "$list" ]
  755.       then 
  756.           $ECHO
  757.       fi
  758.  
  759.    done
  760. }
  761.  
  762. ##
  763. #  checkpermissions() - Ensure file permissions and ownerships
  764. #  file is read in on standard input  and each line is set 
  765. #  into the environment where 
  766. #  $1 is the owner 
  767. #  $2 is the group 
  768. #  $3 is the permissions 
  769. #  $4 is the filename 
  770. ##
  771. checkpermissions()
  772. {
  773.    cd $CENTRAL
  774.    $ECHO "\n$PRM14 \c"
  775.    list=`line`
  776.    while [ -n "$list" ]
  777.    do
  778.       $ECHO ".\c"
  779.       set `$ECHO "$list"`
  780.       FirstChar=`$ECHO $1 | cut -c1 `
  781.       if [ $FirstChar != "#" ]   ## its a comment
  782.       then
  783.          if [ -f "$4" -o -d "$4" ]
  784.          then
  785.             chmod $3 $4 || $ECHO $PRM13 $ERR15 $4
  786.             chown $1 $4 || $ECHO $PRM13 $ERR09 $4
  787.             chgrp $2 $4 || $ECHO $PRM13 $ERR10 $4
  788.          else
  789.             $ECHO "\n$PRM13 $ERR08 $4"
  790.          fi
  791.       fi
  792.       list=`line`
  793.    done
  794. }
  795.  
  796. ##
  797. # CompileMaps(): compiles all of the language mapping files in 
  798. #                $CENTRAL/map directories
  799. ## 
  800. CompileMaps()
  801. {
  802.    if [ ! -z "$MVWDIR" ]
  803.    then
  804.       OLDMVWDIR=$MVWDIR
  805.    fi
  806.    MVWDIR=$CENTRAL
  807.    export MVWDIR
  808.       
  809.    cd $CENTRAL/map
  810.    for i in *
  811.    do
  812.      if [ -d $i ] 
  813.      then 
  814.        cd $i
  815.        for j in *
  816.        do
  817.          if [ ! -d $j ]
  818.          then
  819.             NAME=`$ECHO $j | awk 'BEGIN { FS = "." } 
  820.                                        { print $1 }'`
  821.             $CENTRAL/bin/mvw.mapcomp -t$i -m$NAME
  822.  
  823.             $ECHO ".\c"
  824.          fi
  825.        done
  826.        cd ..
  827.       fi
  828.    done
  829.  
  830.     if [ ! -z "$OLDMVWDIR" ]
  831.     then
  832.        MVWDIR=$OLDMVWDIR
  833.        export MVWDIR
  834.     fi
  835. }
  836.  
  837. ##
  838. #  do_links() - if it's a fresh installation link relevent files
  839. #               compile the language mapping files in the map directory
  840. #               and go away and set file permissions defined in 
  841. #               init/list, the permissions list.
  842. ##
  843. do_links()
  844. {
  845.    if [ $Upgrade = FALSE ]
  846.    then
  847.  
  848.      CompileMaps
  849.  
  850.      $ECHO ".\n"
  851.    
  852.      if [ $CHECK_PERMS  = TRUE ]
  853.      then
  854.        chmod 777 $CENTRAL
  855.        chown root $CENTRAL
  856.        chgrp 1 $CENTRAL
  857.        if [ -f $CENTRAL/init/list ]
  858.        then
  859.           chmod 400 $CENTRAL/init/list
  860.           cat $CENTRAL/init/list | checkpermissions 
  861.         fi
  862.      fi
  863.    fi
  864. }
  865.  
  866. ##
  867. #  page_readme() - page the readme file if requested by user
  868. ##
  869. page_readme()
  870. {
  871.   if [ -s $CENTRAL/$README ]
  872.   then
  873.      chmod 444 $CENTRAL/$README
  874.      $ECHO "$PRM17"   ## do yo want to see the readme file
  875.      chkyn            ## y/n
  876.      if [ $? -eq 0 ]
  877.      then
  878.        cat $CENTRAL/$README | $PAGER  ## page the readme file
  879.        $ECHO "$PRM15 $PRM05"          ## Installation successful
  880.      fi
  881.   fi
  882.  
  883. }
  884.  
  885. ##
  886. #  For SCO UNIX - check the release level and move the correct mvw_ptys
  887. # file into place. This is required because the naming of pseudo-ttys
  888. # was different prior to 3.2.4
  889. ##
  890. PtyCheck()
  891. {
  892. if [ -f /etc/perms/rts ]
  893. then
  894.   Release=`grep "^#rel=" /etc/perms/rts`
  895.   if [ $? = 0 ]
  896.   then
  897.      Release=`$ECHO $Release | cut -c6-10`
  898.      case  $Release in
  899.       3.2.[0-3] ) mv $CENTRAL/mvw_ptys.old $CENTRAL/mvw_ptys > /dev/null 2>&1 ;;
  900.        * ) ;;
  901.      esac
  902.    fi
  903.    if [ -f $CENTRAL/mvw_ptys.old ]
  904.    then
  905.       rm $CENTRAL/mvw_ptys.old > /dev/null 2>&1
  906.    fi
  907. fi
  908. }
  909.  
  910. ##
  911. #  SaveMvw() - Check to see if a previous version of Mascot is
  912. # already installed that we can upgrade over, if so save $CENTRAL.
  913. ##
  914. SaveMvw()
  915. {
  916. if [ $Saved = FALSE ]
  917. then
  918.    if [ -s mvw/init/.mvw_version ]    ## Mascot Version 4 ?
  919.    then
  920.        SAVEVERSION=`cat mvw/init/.mvw_version`
  921.    else
  922.        if [ -s mvw/init/License ]     ## Mascot Version 3.3 ?
  923.        then
  924.            SAVEVERSION=33
  925.        else
  926.            if [ -d mvw/bin ]          ## Mascot Version 3.2 or below ?
  927.            then
  928.                SAVEVERSION=32
  929.            fi
  930.        fi
  931.    fi
  932.  
  933.    [ -z "$SAVEVERSION" ] && return
  934.  
  935.    $ECHO $PRM19
  936.    mkdir mvw.$SAVEVERSION
  937.    [ $? -ne 0 ] && infail "$ERR16"
  938.    cd mvw
  939.    find . -print | cpio -dlp ../mvw.$SAVEVERSION 2>/dev/null
  940.    [ $? -ne 0 ] && infail "$ERR16"
  941.    rm -rf data mvw-
  942.    rm -f bin/mvw_* bin/mvw.clock mvw_ansi mvw_vt100 *.rc
  943.    cd ..
  944.    rm -r mvw.$SAVEVERSION/tmp
  945.    rm mvw.$SAVEVERSION/install
  946.    ln mvw.$SAVEVERSION/bin/mvw.license mvw.$SAVEVERSION/install
  947.    [ -x $BINDIR/mascot ] && mv $BINDIR/mascot $BINDIR/mascot.$SAVEVERSION
  948.    [ -x $BINDIR/mvw_ixsrv ] && mv $BINDIR/mvw_ixsrv $BINDIR/mvw_ixsrv.$SAVEVERSION
  949.    [ -x $BINDIR/mview ] && mv $BINDIR/mview $BINDIR/mview.$SAVEVERSION
  950.    $ECHO
  951. fi
  952. }
  953.  
  954. ##
  955. #  MoveNew() - move the files from tmp/ into MVWDIR. This ensures we
  956. # can save any existing files on a version upgrade. If IBM AIX RS6000,
  957. # move AIX v3 or v4 mascot into place as appropriate.
  958. ##
  959. MoveNew()
  960. {
  961. if [ $Saved = FALSE ]
  962. then
  963.    $ECHO $PRM20
  964.    cd mvw/tmp
  965.    [ $? -ne 0 ] && infail "$ERR01" mvw/tmp
  966.    find . -print | cpio -dpl ../ 2>/dev/null
  967.    [ $? -ne 0 ] && infail "$ERR16"
  968.    cd ..
  969.    rm -r tmp
  970.    $ECHO
  971.  
  972.    if [ -n "$SAVEVERSION" ] &&  [ "$SAVEVERSION" != "32" ] && [ -s ../mvw."$SAVEVERSION"/mascot.rc ]
  973.    then
  974.        $ECHO $PRM21
  975.        cp ../mvw.$SAVEVERSION/mascot.rc .
  976.        cp .mvw_usermenu .mvw_usermenu-
  977.        bin/mvw.convert mascot.rc > audit.txt 2>&1
  978.        [ $? -ne 0 ] && $ECHO "$ERR17"
  979.        rm mascot.rc
  980.        $ECHO
  981.    fi
  982.    cd ..
  983. fi
  984. }
  985.  
  986. ##
  987. # autobrand() - automatically reserialize a new product 
  988. ##
  989.  
  990. autobrand()
  991. {
  992.  
  993. if [ $Upgrade = TRUE ]
  994. then
  995.   return
  996. fi    
  997.  
  998. if [ ! -r $CENTRAL/init/License ]
  999. then
  1000.   return
  1001. fi
  1002.  
  1003. echo  $BRAND19
  1004.  
  1005. mv $CENTRAL/init/License $CENTRAL/init/License.auto
  1006.  
  1007. checkbranded <  $CENTRAL/init/License.auto  
  1008.  
  1009. rm $CENTRAL/init/License.auto
  1010.  
  1011. }
  1012.  
  1013. ##
  1014. #  ExpandFiles() - if files are downloaded from the media they are held
  1015. # in compressed tar format. This will uncompress the Z file and extract
  1016. # the tar files into the tmp/ within MVWDIR. 
  1017. ##
  1018. ExpandFiles()
  1019. {
  1020. if [ $Upgrade = TRUE ] || [ ! -s $CENTRAL/$EXPANDFILE ]
  1021. then
  1022.   return
  1023. fi    
  1024.  
  1025. $ECHO $PRM24
  1026.  
  1027. uncompress $CENTRAL/$EXPANDFILE 2>&1 > /dev/null
  1028. [ $? -ne 0 ] && infail "$ERR18"
  1029.  
  1030. if [ ! -s $CENTRAL/$TARFILE ]
  1031. then
  1032.  infail "$ERR08" $TARFILE
  1033. fi
  1034.  
  1035. $ECHO $PRM25
  1036. cd $CENTRAL
  1037.  
  1038. tar xf $CENTRAL/$TARFILE 2>&1 > /dev/null
  1039. [ $? -ne 0 ] && infail "$ERR18"
  1040.  
  1041. cd $HOMEDIR
  1042.  
  1043. rm -f $CENTRAL/$TARFILE
  1044. }
  1045.  
  1046. ##
  1047. #  main()
  1048. ##
  1049.  
  1050. ##
  1051. #  Catch any efforts to abort
  1052. ##
  1053. trap 'infail "$ERR14"' 1 2 4 9 15
  1054.  
  1055. SCRIPTNAME=`basename $0` 
  1056.  
  1057. ## 
  1058. #  initialisation messages
  1059. ##
  1060. start_up
  1061.  
  1062.  
  1063. if [ $SCRIPTNAME = "install" ]
  1064. then
  1065.     if [ ! -x $CENTRAL/$SCRIPTNAME ]
  1066.     then
  1067.       infail "$ERR07" ## wrong directory - check installation notes  
  1068.     fi
  1069. fi
  1070.  
  1071. ##
  1072. #   check you're Super-User
  1073. ##
  1074. SuCheck 
  1075.  
  1076. ## 
  1077. #  check that we have all the required utilities
  1078. ## 
  1079. unix_tools
  1080.  
  1081. ##
  1082. #  uncompress the files and create the tmp/ directory
  1083. ##
  1084. ExpandFiles  || infail "$ERRxx"
  1085.  
  1086. ##
  1087. #  locate the mascot and mvw_ixsrv executables.
  1088. #  if they are in the init directory we can assume that this is
  1089. #  a fresh installation - else we must assume the user is wishing
  1090. #  to increase the user license.
  1091. ##
  1092. FindBinaries || infail "$ERR13"
  1093.  
  1094.  
  1095. autobrand
  1096.  
  1097. ##
  1098. #  Prompt for Serial Number / Activation keys.
  1099. #  Validate them and then brand the binaries.
  1100. ##
  1101.  
  1102. NEWKEY=TRUE
  1103. check || infail "$ERR04"
  1104.  
  1105. ##
  1106. #  For SCO UNIX - check the release level and move the correct mvw_ptys
  1107. # file into place
  1108. ##
  1109. if [ $Upgrade  = FALSE ]
  1110. then
  1111.    PtyCheck
  1112. fi
  1113. ##
  1114. #  if it's a fresh installation carry out links and check permissions
  1115. #  with the Permissions list, init/list.
  1116. ##
  1117. do_links
  1118.  
  1119. ##
  1120. #  Create the User license upgrade script if not already present
  1121. ##
  1122. if [ ! -x "$CENTRAL/bin/mvw.license" ]
  1123. then
  1124.    ln $CENTRAL/install $CENTRAL/bin/mvw.license > /dev/null 2>&1
  1125. fi
  1126.  
  1127. if [ $Upgrade = FALSE ]
  1128. then
  1129.    $ECHO "$PRM15 $PRM05" ## Installation successful
  1130.    page_readme           
  1131. else
  1132.    $ECHO "$PRM16 $PRM05" ## User License increase successful
  1133. fi
  1134.  
  1135. UpgradedVersion
  1136.  
  1137. exit 0
  1138.