home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nwsrvr / install / request < prev   
Text File  |  1998-08-19  |  27KB  |  1,313 lines

  1. # nwsrvr request script
  2. #ident    "@(#)request    1.4"
  3.  
  4. #
  5. trap "" 2
  6.  
  7. # This script must be executed from the nws request script.
  8. if [ "$CONFFLAG" = "" ]
  9. then
  10.     SETNAME=""
  11.     [ $PKGINST = nwsrvrJ ] && XXSETNAME=J
  12.     echo "\tPlease install the set:\
  13.           \n\tNetWare Server for UnixWare Set (nws$SETNAME)\
  14.           \n\tto install $PKGINST"
  15.     exit 3
  16. fi
  17.  
  18. if [ "$RANDOM" = "$RANDOM" ]
  19. then
  20.     exec /usr/bin/winxksh $0 $*
  21. fi
  22.  
  23. # Redirect stderr to a file
  24. exec 2>/tmp/nwsrvr.err
  25.  
  26. POST_FILE=$1
  27.  
  28. ##
  29. ## The following shell variables are setup in nws request:
  30. ## (i.e. this package cannot be pkgadd'ed by itself.
  31. ##
  32. ##     REQDIR:                Path to this request script
  33. ##     TMP_SERVER_PARMS:    Path to temporary server parameters file
  34. ##     TMP_VOLTAB:            Path to temporary voltab file
  35. ##     CONFFLAG:            Set to 1 if "nwsrvr" stuff should be configured
  36. ##                        Set to 2 if "vol" stuff should be configured
  37. ##                        Set to 3 if "install now" should be run
  38. ##
  39.  
  40. GREP="/usr/bin/fgrep"
  41. AWK="/usr/bin/awk"
  42. MV="/usr/bin/mv -f"
  43. RM="/usr/bin/rm -f"
  44. CP="/usr/bin/cp"
  45. SORT="/usr/bin/sort"
  46. MKDIR="/usr/bin/mkdir"
  47. LS="/usr/bin/ls"
  48. TAIL="/usr/bin/tail"
  49. NWCM="/usr/sbin/nwcm"
  50. PKGINFO="/usr/bin/pkginfo"
  51. GET_LIC_INFO="/tmp/getLicInfo"
  52. MOUNT="/etc/mount"
  53. UMOUNT="/etc/umount"
  54.  
  55. #
  56. # Can't execute getLicInfo
  57. $CP $REQDIR/getLicInfo $GET_LIC_INFO
  58. /usr/bin/chmod +x $GET_LIC_INFO
  59.  
  60. FLPY="/mnt"
  61.  
  62. NWS_PRODID="NetWare Server for UnixWare"    # used for license diskette
  63. NWS_VERSION="4.10"
  64. VOLTAB="/etc/netware/voltab"
  65.  
  66. LIC_FILE_PREFIX="MLS"
  67.  
  68. #
  69. # default values for SYS volume.
  70. #
  71. DEF_MOUNT_PATH="/SYS"
  72. DEF_CONTROL_PATH="/etc/netware/control/SYS"
  73.  
  74. # These variables don't need to be translated
  75. NAME_SPACES_SPACES="            "
  76. NAME_SPACES_1="DOS,UNIX"
  77. NAME_SPACES_11="UNIX,DOS"
  78. NAME_SPACES_2="DOS,UNIX,OS2"
  79. NS_21="DOS,OS2,UNIX"
  80. NS_22="UNIX,DOS,OS2"
  81. NS_23="UNIX,OS2,DOS"
  82. NS_24="OS2,DOS,UNIX"
  83. NS_25="OS2,OS2,UNIX"
  84.  
  85. FILESYS_TYPE_1="STANDARD"
  86. FILESYS_TYPE_2="EXTENDED"
  87. FILESYS_TYPE_3="CDROM"
  88.  
  89. DEF_VOLTAB="0 SYS npfs $DEF_MOUNT_PATH $DEF_CONTROL_PATH DOS,UNIX -"
  90.  
  91. function NetWareProtocolStackStuff
  92. {
  93. [ -n "$DEBUG" ] && set -x
  94.  
  95.     # SAVE FOR WHEN WE REALLY NEED TO DO OVERLAY
  96.     #
  97.     # Is it upgrade or overlay?
  98.     #   /usr/sbin/pkginst/chkpkgrel returns
  99.     #        1 if installed pkg if UNK version
  100.     #        2 if installed pkg is SVR4.2
  101.     #        4 if installed pkg is SVR4.0 V4
  102.     #        9 if installed pkg is newer
  103.     #        0 if pkg is not installed
  104.     #
  105.     #
  106.     #
  107.  
  108.     #
  109.     #    SAVE FOR IF WE REMOVE DEPENDENCY ON DESKTOP
  110.     #
  111.     #    Do we have Desktop Package installed?
  112.     #
  113.     #    `pkginfo -i desktop > /dev/null 2>&1`
  114.     #    USE_DTM=$?
  115.     #
  116.     #     DTM=YES
  117.     #    if [ "${USE_DTM}" != "0" ]
  118.     #    then
  119.     #        DTM=NO
  120.     #        #
  121.     #        # Are we installing desktop now...if so then set DTM
  122.     #        #
  123.     #        for i in $PKGLIST
  124.     #        do
  125.     #            case $i in
  126.     #            desktop)    DTM=YES;;
  127.     #            esac
  128.     #        done
  129.     #    fi
  130.     #
  131.     #    #
  132.     #    # set CLASSES to contain DTMadmin If desktop package is installed
  133.     #    #
  134.     #    unset CLASSES
  135.     #    CLASSES="base nwext"
  136.     #    if [ "${DTM}" = "YES" ]
  137.     #    then
  138.     #        CLASSES="${CLASSES} DTMadmin"
  139.     #    fi
  140.     #    echo PKGINSTALL_TYPE=\"${PKGINSTALL_TYPE}\" >> ${OUTPUT}
  141.     #    echo CLASSES=\"${CLASSES}\" >> ${OUTPUT}
  142.     #    echo DTM=\"${DTM}\" >> ${OUTPUT}
  143.  
  144.     return 0
  145. }
  146.  
  147. #
  148. # Setup configuration variables
  149. #
  150. function GetServerParms
  151. {
  152. [ -n "$DEBUG" ] && set -x
  153.  
  154.     #
  155.     # Create the tmp server parameters file if it doesn't exist
  156.     # Use the defaults from nwcm if in OVERLAY. Otherwise, create
  157.     # defaults locally. If the file does exist, DOT the file in.
  158.     if [ ! -f $TMP_SERVER_PARMS ]
  159.     then
  160.         SERVER_NAME=`GetServerName`
  161.         NWS_START_AT_BOOT=`GetNwsStartAtBoot`
  162.         SERVER_LICENSE_LIMIT=0
  163.         IPX_INTERNAL_NETWORK=`GetNetwork`
  164.         #
  165.         # Write server parameters to tmp file.
  166.         #
  167.         WriteTmpServerParms
  168.     else
  169.         . $TMP_SERVER_PARMS
  170.     fi
  171.  
  172.     return 0
  173. }
  174.  
  175. function GetVolParms
  176. {
  177. [ -n "$DEBUG" ] && set -x
  178.  
  179.     # If the regular voltab file exists then this is an overlay install.
  180.     OVERLAY="NO"
  181.     if [ -f $VOLTAB ]
  182.     then
  183.         OVERLAY="YES"
  184.     fi
  185.  
  186.     #
  187.     # Create a "work" file containing the volume configuration
  188.     # information. The contents of this file will be generated
  189.     # from /etc/netware/voltab. If /etc/netware/voltab does
  190.     # not exist, the contents will be generated from scratch.
  191.     # We use the temporary file to remember the user's last
  192.     # pass through this configuration option.
  193.     #
  194.  
  195.     if [ -f $TMP_VOLTAB ]
  196.     then
  197.         # read temporary voltab file and set SYSVOL environment
  198.         # variable.
  199.         exec 3< $TMP_VOLTAB
  200.         while read -u3
  201.         do
  202.             set $REPLY                # put into postional parameter form
  203.             if [ "$2" = "SYS" ]         # Setup global for sysvol mount point
  204.             then
  205.                 SYSVOL="$4"
  206.                 SYSVOL_CONTROL_DIR="$5"
  207.                 break
  208.             fi
  209.         done
  210.         # Close TMP_VOLTAB
  211.         exec 3<&-
  212.     else
  213.         # Temporary voltab file does not exist. If the real
  214.         # voltab exists (OVERLAY), use it to create the
  215.         # temporary voltab file, and set SYSVOL environment
  216.         # variable.
  217.         if [ -f $VOLTAB ]
  218.         then
  219.             $SORT $VOLTAB > $TMP_VOLTAB.changes
  220.  
  221.             # open voltab
  222.             exec 3< $TMP_VOLTAB.changes
  223.  
  224.             # read a line and ask user for changes
  225.             # save each line in $TMP_VOLTAB
  226.             while read -u3
  227.             do
  228.                 # Skip blank lines
  229.                 if (( "${#REPLY}" == 0 ))
  230.                 then
  231.                     continue
  232.                 fi
  233.  
  234.                 set $REPLY        # put into postional parameter form
  235.  
  236.                 # skip comment lines
  237.                 tmp=`echo "$1" | cut -c1`
  238.                 if [ "$tmp" = "#" ]
  239.                 then
  240.                     continue
  241.                 fi
  242.  
  243.                 # skip syntax errors (rudimentary test)
  244.                 if (( "$#" != 7 ))
  245.                 then
  246.                     print -u2 "$VOLTAB_FILE_ERROR: $REPLY"
  247.                     continue
  248.                 fi
  249.  
  250.                 echo "$1 $2 $3 $4 $5 $6 $7" >> $TMP_VOLTAB
  251.  
  252.                 # Setup global for sysvol mount point
  253.                 if [ "$2" = "SYS" ]
  254.                 then
  255.                     SYSVOL="$4"
  256.                     SYSVOL_CONTROL_DIR="$5"
  257.                     break
  258.                 fi
  259.             done
  260.  
  261.             # Close and remove TMP_VOLTAB.changes
  262.             exec 3<&-
  263.             $RM $TMP_VOLTAB.changes
  264.         else
  265.             # The real voltab file does not exist. Create temporary
  266.             # voltab file and set SYSVOL environment variable.
  267.             echo $DEF_VOLTAB > $TMP_VOLTAB
  268.             set $DEF_VOLTAB        # put into postional parameter form
  269.             SYSVOL="$4"
  270.             SYSVOL_CONTROL_DIR="$5"
  271.         fi
  272.     fi
  273.  
  274.     return 0
  275. }
  276.  
  277. function WritePostFile
  278. {
  279. [ -n "$DEBUG" ] && set -x
  280.  
  281.     typeset -i factor
  282.  
  283.     # Minimum shm is 8MB
  284.     SHM_SIZE=8192000
  285.     
  286.     # Increase shm by 1/12th of a 1MB for every additional user over 40.
  287.     if (( $SERVER_LICENSE_LIMIT > 40 ))
  288.     then
  289.         let factor=$SERVER_LICENSE_LIMIT-40
  290.         let factor=factor*(1048576/12)
  291.         let SHM_SIZE=SHM_SIZE+factor
  292.     fi
  293.  
  294.     {
  295.         echo SERVER_NAME="$SERVER_NAME"
  296.         echo NWS_START_AT_BOOT="$NWS_START_AT_BOOT"
  297.         echo SHM_SIZE="$SHM_SIZE"
  298.         # Add 30 for virtual DS clients and pserver connections
  299.         echo MAX_CONNECTIONS=$(($SERVER_LICENSE_LIMIT+30))
  300.         echo IPX_INTERNAL_NETWORK="$IPX_INTERNAL_NETWORK"
  301.         echo SYSVOL="$SYSVOL"
  302.         echo SYSVOL_CONTROL_DIR="$SYSVOL_CONTROL_DIR"
  303.         echo SMART_START="$SMART_START"
  304.         echo LANGDEP_SCRIPTS="$LANGDEP_SCRIPTS"
  305.         echo OVERLAY="$OVERLAY"
  306.         echo COUNTRY_CODE="$COUNTRY_CODE"
  307.         echo CODE_PAGE="$CODE_PAGE"
  308.         echo HOST_CODE_SET="$HOST_CODE_SET"
  309.         echo CLASSES="\"$CLASSES\""
  310.     } > ${POST_FILE}
  311.  
  312.     # Copy the tmp voltab to its permanent location
  313.     
  314.     if [ "$OVERLAY" != "YES" ]
  315.     then
  316.         $CP $TMP_VOLTAB $VOLTAB
  317.     fi
  318.  
  319.     $RM $TMP_VOLTAB
  320.     $RM $TMP_SERVER_PARMS
  321.  
  322.     return 0
  323. }
  324.  
  325. #-----------------------------------------------------------------------------
  326. # Begin Volume configuration functions
  327. #-----------------------------------------------------------------------------
  328. typeset -ir mp_fld_num=0    #     field 0: mount point
  329. typeset -ir cp_fld_num=1    #     field 1: control directory
  330. typeset -ir ns_fld_num=2    #     field 2: name spaces
  331.  
  332. #
  333. #    Check field functions ------------------------------------------------------
  334. #
  335.  
  336. #
  337. # fix up name space field if user types nonsense.
  338. #
  339. function CheckNameSpacesField
  340. {
  341. [ -n "$DEBUG" ] && set -x
  342.  
  343.     typeset -u NS
  344.  
  345.     NS=$NAME_SPACES
  346.  
  347.     if [ "$NS" != "$NAME_SPACES_1" ]
  348.     then
  349.         if [ "$NS" != "$NAME_SPACES_2" ]
  350.         then
  351.             display -w "$ILL_NAME_SPACE" \
  352.                 -fg ${WHITE} -bg ${RED} \
  353.                 -current "footer $ENTER_TO_CONT_MSG"
  354.             return 1
  355.         fi
  356.     fi
  357.  
  358.     return 0
  359. }
  360.  
  361. function CheckMountField
  362. {
  363. [ -n "$DEBUG" ] && set -x
  364.  
  365.     typeset tmp
  366.  
  367.     tmp=`echo "$MOUNT_PATH" | cut -c1`
  368.     if [ "$tmp" != "/" ]
  369.     then
  370.         display -w "$INCORRECT_SYS_VOL_PATH" \
  371.             -fg ${WHITE} -bg ${RED} \
  372.             -current "footer $ENTER_TO_CONT_MSG"
  373.         return 1
  374.     fi
  375.  
  376.     if [[ ! -d $MOUNT_PATH && -a $MOUNT_PATH ]]
  377.     then
  378.         display -w "$MOUNT_POINT_IS_FILE" \
  379.             -fg ${WHITE} -bg ${RED} \
  380.             -current "footer $ENTER_TO_CONT_MSG"
  381.         return 1
  382.     fi
  383.  
  384.     return 0
  385. }
  386.  
  387. function CheckControlField
  388. {
  389. [ -n "$DEBUG" ] && set -x
  390.  
  391.     typeset tmp
  392.  
  393.     tmp=`echo "$CONTROL_PATH" | cut -c1`
  394.     if [ "$tmp" != "/" ]
  395.     then
  396.         display -w "$INCORRECT_CONTROL_PATH" \
  397.             -fg ${WHITE} -bg ${RED} \
  398.             -current "footer $ENTER_TO_CONT_MSG"
  399.         return 1
  400.     fi
  401.  
  402.     if [[ ! -d $CONTROL_PATH && -a $CONTROL_PATH ]]
  403.     then
  404.         display -w "$CNTL_PATH_IS_FILE" \
  405.             -fg ${WHITE} -bg ${RED} \
  406.             -current "footer $ENTER_TO_CONT_MSG"
  407.         return 1
  408.     fi
  409.  
  410.  
  411.     return 0
  412. }
  413.  
  414. #
  415. #    Choose functions -----------------------------------------------------------
  416. #
  417.  
  418. function ChooseNameSpaces
  419. {
  420. [ -n "$DEBUG" ] && set -x
  421.  
  422.     set -A nsChoices $NAME_SPACES_1 $NAME_SPACES_2
  423.  
  424.     CHOOSE_TITLE=$CONFIG_NS_CHOOSE_TITLE
  425.     CHOOSE_FOOTER=$GENERIC_CHOOSE_FOOTER
  426.  
  427.     choose -f "" "${nsChoices[@]}"
  428.  
  429.     return 0
  430. }
  431.  
  432. #
  433. #-------------------------------------------------------------------------------
  434. #
  435. function DisplayVolConfig
  436. {
  437. [ -n "$DEBUG" ] && set -x
  438.  
  439.     integer    thisWindow thisForm inputXLoc
  440.     typeset    -u VOL_NAME NAME_SPACES FILESYS_STRING
  441.     typeset -l FILE_CONTROL_LOWER 
  442.     integer vol_num windowSize
  443.  
  444.     windowSize=4
  445.  
  446.     vol_num=$2
  447.     VOL_NAME=$3
  448.     FILESYS_TYPE=$4
  449.     MOUNT_PATH=$5
  450.     CONTROL_PATH=$6
  451.     NAME_SPACES=$7
  452.     OPTIONS=$8
  453.  
  454.     CHOOSE_TITLE="$OPTIONS"
  455.     CHOOSE_FOOTER="$FORM_MSG"
  456.  
  457.     # Set file system type string.
  458.     # Convert the voltab file sys type name to an install one.
  459.     # i.e. npfs=STANDARD, nxfs=EXTENDED, cdrom=STANDARD + "cdrom"-->options
  460.     #
  461.  
  462.     #------------------ BEGIN FORM ----------------------
  463.  
  464.     let inputXLoc=${#CNTL_DIR_PROMPT}+2
  465.  
  466.     open_form
  467.     thisForm=${FID}
  468.  
  469.     #
  470.     # Volume Mount Point
  471.     #
  472.     MOUNT_PATH_SAVE=$MOUNT_PATH            # save for CheckMountField
  473.  
  474.     add_field MOUNT_PATH -ilen 64 -p "$MOUNT_PATH_PROMPT" \
  475.         -px 0 -py 1 \
  476.         -pfg ${BLACK} -pbg ${CYAN} -ix $inputXLoc -iy 1 \
  477.         -help "helpwin volconf_mount" \
  478.         -entry "footer '$FORM_MSG'" \
  479.         -exit "CheckMountField"
  480.  
  481.     #
  482.     # Volume Control Path
  483.     #
  484.     CONTROL_PATH_SAVE=$CONTROL_PATH
  485.  
  486.     add_field CONTROL_PATH -ilen 64 -p "$CNTL_DIR_PROMPT" \
  487.         -px 0 -py 2 \
  488.         -pfg ${BLACK} -pbg ${CYAN} -ix $inputXLoc -iy 2 \
  489.         -help "helpwin volconf_control" \
  490.         -entry "footer '$FORM_MSG'" \
  491.         -exit "CheckControlField"
  492.  
  493.     #
  494.     # Volume Name Spaces 
  495.     # Choices: DOS,UNIX DOS,UNIX,OS2
  496.     #
  497.     NAME_SPACES_SAVE=$NAME_SPACES        # save for CheckNameSpacesField()
  498.  
  499.     add_field NAME_SPACES -ilen 12 -p "$NAME_SPACES_PROMPT" \
  500.         -px 0 -py 3 \
  501.         -pfg ${BLACK} -pbg ${CYAN} -ix $inputXLoc -iy 3 \
  502.         -choice "ChooseNameSpaces" \
  503.         -help "helpwin volconf_namespaces" \
  504.         -entry "footer '$FORM_MSG_CHOICE'" \
  505.         -exit "CheckNameSpacesField"
  506.  
  507.     windowSize=5
  508.  
  509.     WINTITLE="$CONFIG_VOLS_TITLE"
  510.  
  511.     place_window 80 windowSize \
  512.         -title "$WINTITLE" \
  513.         -border_fg $BLACK -bg $CYAN \
  514.         -below 0 \
  515.         -current "footer '$FORM_MSG'"
  516.  
  517.     thisWindow=${CURWIN}
  518.  
  519.     run_form ${thisForm}
  520.  
  521.     input_handler
  522.  
  523.     wclose ${thisWindow}
  524.     destroy_form ${thisForm}
  525.  
  526.     #------------------ END FORM ----------------------
  527.  
  528.     #
  529.     # Set up entry variable whose name was passed as the first argument.
  530.     #
  531.     eval $1=\"$2 $VOL_NAME $FILESYS_TYPE $MOUNT_PATH $CONTROL_PATH $NAME_SPACES $OPTIONS\"
  532.  
  533.     return 0
  534. }
  535.  
  536. #
  537. #-------------------------------------------------------------------------------
  538. #
  539. #    ConfigureVolumes 
  540. #
  541. #    If overlay install, run through each volume defined in the voltab.
  542. #    The user may modify or deleted each one. The SYS volume may not be
  543. #    deleted.
  544. #
  545. #    If not overlay, just the SYS volume is presented with a default 
  546. #    configuration.
  547. #
  548. function ConfigureVolumes
  549. {
  550. [ -n "$DEBUG" ] && set -x
  551.  
  552.     integer infoWindow
  553.     typeset -L128 entry
  554.     typeset -L32 options
  555.  
  556.     #
  557.     # display info screen
  558.     #
  559.     display "$VOLCONFIG_INFO_WIN" \
  560.         -fg ${WHITE} -bg ${BLUE} \
  561.         -below 5
  562.     infoWindow=${CURWIN}
  563.  
  564.     # open voltab
  565.     exec 3< $TMP_VOLTAB
  566.  
  567.     # read only the first line and ask user for changes
  568.     # the first line of the voltab should always be SYS.
  569.     #
  570.     # save each line in $TMP_VOLTAB.changes
  571.     # Don't need to do any syntax or error checking
  572.     # because is always guaranteed that TMP_VOLTAB
  573.     # will be correct.
  574.     read -u3
  575.     set $REPLY        # put into postional parameter form
  576.  
  577.     DisplayVolConfig entry "$1" "$2" "$3" "$4" "$5" "$6" "$7"
  578.  
  579.     # Setup global for sysvol mount point
  580.     set $entry
  581.     if [ "$2" = "SYS" ]
  582.     then
  583.         SYSVOL="$4"
  584.         SYSVOL_CONTROL_DIR="$5"
  585.     fi
  586.  
  587.     # save each change in $TMP_VOLTAB.changes
  588.     echo $entry >> $TMP_VOLTAB.changes
  589.  
  590.     # close $TMP_VOLTAB
  591.     exec 3<&-
  592.  
  593.     $MV $TMP_VOLTAB.changes $TMP_VOLTAB
  594.  
  595.     footer ""
  596.     wclose $infoWindow
  597.  
  598.     return 0
  599. }
  600.  
  601. function CreateVolDirs
  602. {
  603.     $MKDIR -p $SYSVOL_CONTROL_DIR > /dev/null 2>&1
  604.     return 0
  605. }
  606.  
  607. #-----------------------------------------------------------------------------
  608. # End Volume configuration functions
  609. #-----------------------------------------------------------------------------
  610.  
  611. function GetServerName
  612. {
  613. [ -n "$DEBUG" ] && set -x
  614.  
  615.     TMP=`$NWCM -v server_name`
  616.     if [ "$TMP" = "server_name=\"\"" ]
  617.     then
  618.         # server name doesn't exist. Create default.
  619.         echo `uname -n`
  620.     else
  621.         # server name already set. Use value.
  622.         eval $TMP
  623.         echo $server_name
  624.     fi
  625.  
  626.     return 0
  627. }
  628.  
  629. function GetNwsStartAtBoot
  630. {
  631. [ -n "$DEBUG" ] && set -x
  632.  
  633.     $NWCM -v nws_start_at_boot > /dev/null 2>&1
  634.     if (( $? == 0 ))
  635.     then
  636.         # nws_start_at_boot already set (OVERLAY). Use value.
  637.         eval `$NWCM -v nws_start_at_boot`
  638.         if [ $nws_start_at_boot = "on" ]
  639.         then
  640.             nws_start_at_boot="$START_AT_BOOT_1"    # yes
  641.         else
  642.             nws_start_at_boot="$START_AT_BOOT_2"    # no
  643.         fi
  644.         echo $nws_start_at_boot
  645.     else
  646.         # nws_start_at_boot doesn't exist. Create default.
  647.         echo "$START_AT_BOOT_1"  # yes
  648.     fi
  649.  
  650.     return 0    
  651. }
  652.  
  653. function GetNetwork
  654. {
  655. [ -n "$DEBUG" ] && set -x
  656.  
  657.     typeset -i16 tmp
  658.  
  659.     #
  660.     # Check for ipx_internal_network already set
  661.     # Note: this parameter is part of nwnet pkg,
  662.     # and therefore no OVERLAY check is required.
  663.     #
  664.     eval `$NWCM -v ipx_internal_network`
  665.     if [ "$ipx_internal_network" = "0x0" ]
  666.     then
  667.         # ipx_internal_network is not set, so invent one.
  668.         ccall time 0
  669.         currtime=${RET#0x}  # remove leading 0x
  670.         currtime=16#$currtime    # convert to base 10
  671.  
  672.         randval=$(($RANDOM << 16))
  673.         ipx_network=$(($currtime + $randval))
  674.         tmp=$ipx_network  # convert to base 16
  675.  
  676.         tmp1=${tmp##*#}   # remove leading 16# or -16#
  677.         echo 0x$tmp1
  678.     else
  679.         # ipx_internal_network is set, so use it.
  680.         echo $ipx_internal_network
  681.     fi
  682. }
  683.  
  684. #
  685. #===================== ChangeServerParms SCREEN Functions ======================
  686. #
  687.  
  688. # field positions
  689. typeset -ir sn_fld_num=0    #     field 0: server name
  690. typeset -ir ip_fld_num=1    #     field 1: ipx internal network
  691. typeset -ir sl_fld_num=2    #     field 2: shadow locking
  692. typeset -ir nm_fld_num=3    #     field 3: network management
  693. typeset -ir sa_fld_num=4    #     field 4: start at boot
  694.  
  695. #
  696. # choose functions -------------------------------------------------------------
  697. #
  698.  
  699. function ChooseStartAtBoot
  700. {
  701. [ -n "$DEBUG" ] && set -x
  702.  
  703.     set -A sbChoices "$START_AT_BOOT_1" "$START_AT_BOOT_2"
  704.  
  705.     CHOOSE_TITLE=$START_AT_BOOT_CHOOSE_TITLE
  706.     CHOOSE_FOOTER=$GENERIC_CHOOSE_FOOTER
  707.  
  708.     choose -f "" "${sbChoices[@]}"
  709.  
  710.     return 0
  711. }
  712.  
  713. #
  714. # check functions --------------------------------------------------------------
  715. #
  716.  
  717. #
  718. # Server Name must be between 2 and 47 alphanumeric, hyphen, underscore
  719. #
  720. function CheckServerNameField
  721. {
  722. [ -n "$DEBUG" ] && set -x
  723.  
  724.     # check length
  725.     if [ "${#SN}" -lt 2 -o "${#SN}" -gt 47 ]
  726.     then
  727.         display -w "$ILL_SERVER_NAME_LEN_MSG" \
  728.             -fg ${WHITE} -bg ${RED} \
  729.             -current "footer $ENTER_TO_CONT_MSG"
  730.         return 1
  731.     fi
  732.     
  733.     # check for illegal characters
  734.     if [ ! -z "${SN##*([!\\])}" -o \
  735.          ! -z "${SN##*([0-9A-z_\-])}" ]
  736.     then
  737.         display -w "$ILL_SERVER_NAME_CHAR_MSG" \
  738.             -fg ${WHITE} -bg ${RED} \
  739.             -current "footer $ENTER_TO_CONT_MSG"
  740.         return 1
  741.     fi
  742.  
  743.     return 0
  744. }
  745.  
  746. function CheckIPXNetField
  747. {
  748. [ -n "$DEBUG" ] && set -x
  749.     typeset -u tmp_ipx_net
  750.  
  751.     tmp_ipx_net=$IPX_NET
  752.  
  753.     # check for illegal characters
  754.     if [ ! -z "${IPX_NET##*([!\\])}" -o \
  755.          ! -z "${IPX_NET##*([0-9A-Fa-f])}" ]
  756.     then
  757.         display -w "$ILL_IPX_NET_CHAR_MSG" \
  758.             -fg ${WHITE} -bg ${RED} \
  759.             -current "footer $ENTER_TO_CONT_MSG"
  760.         return 1
  761.     fi
  762.  
  763.     if [ "$tmp_ipx_net" = "0" ]
  764.     then
  765.         display -w "$ILL_IPX_NET_CHAR_MSG" \
  766.             -fg ${WHITE} -bg ${RED} \
  767.             -current "footer $ENTER_TO_CONT_MSG"
  768.         return 1
  769.     fi
  770.  
  771.     if [ "$tmp_ipx_net" = "FFFFFFFF" ]
  772.     then
  773.         display -w "$ILL_IPX_NET_CHAR_MSG" \
  774.             -fg ${WHITE} -bg ${RED} \
  775.             -current "footer $ENTER_TO_CONT_MSG"
  776.         return 1
  777.     fi
  778.  
  779.  
  780.     return 0
  781. }
  782.  
  783. function CheckStartAtBootField
  784. {
  785. [ -n "$DEBUG" ] && set -x
  786.  
  787.     if [ "$NWS_START_AT_BOOT" != "$START_AT_BOOT_1" ]
  788.     then
  789.         if [ "$NWS_START_AT_BOOT" != "$START_AT_BOOT_2" ]
  790.         then
  791.             display -w "$ILL_BOOT_VAL_MSG" \
  792.                 -fg ${WHITE} -bg ${RED} \
  793.                 -current "footer $ENTER_TO_CONT_MSG"
  794.             return 1
  795.         fi
  796.     fi
  797.  
  798.     return 0
  799. }
  800.  
  801. #
  802. #    ConfigureServer ----------------------------------------------------------
  803. #
  804. function ConfigureServer
  805. {
  806. [ -n "$DEBUG" ] && set -x
  807.  
  808.     ChangeServerParms
  809.  
  810.     #
  811.     # Write server parameters to tmp file.
  812.     #
  813.     WriteTmpServerParms
  814.     return 0    
  815. }
  816.  
  817.  
  818. function WriteTmpServerParms
  819. {
  820. [ -n "$DEBUG" ] && set -x
  821.  
  822.     {
  823.         echo SERVER_NAME="$SERVER_NAME"
  824.         echo NWS_START_AT_BOOT="\"$NWS_START_AT_BOOT\""
  825.         echo SERVER_LICENSE_LIMIT="$SERVER_LICENSE_LIMIT"
  826.         echo IPX_INTERNAL_NETWORK="$IPX_INTERNAL_NETWORK"
  827.     } > ${TMP_SERVER_PARMS}
  828.  
  829.     return 0
  830. }
  831.  
  832. #
  833. #    ChangeServerParms ----------------------------------------------------------
  834. #
  835. function ChangeServerParms
  836. {
  837. [ -n "$DEBUG" ] && set -x
  838.  
  839.     integer        infoWindow thisWindow thisForm inputXLoc
  840.     integer        max size
  841.     typeset -u    SN
  842.  
  843.     CHOOSE_TITLE="$CHOOSE_OPTIONS"
  844.     CHOOSE_FOOTER="$ARROW_KEYS_MSG"
  845.  
  846.     #
  847.     # display info screen
  848.     #
  849.     display "$SERV_PARMS_INFO_WIN" \
  850.         -fg ${WHITE} -bg ${BLUE} \
  851.         -below 4
  852.     infoWindow=${CURWIN}
  853.  
  854.     #
  855.     # add form
  856.     #
  857.     open_form
  858.     thisForm=${FID}
  859.  
  860.     let inputXLoc=${#SERVER_NAME_PROMPT}+2
  861.  
  862.     #
  863.     # Add server name field
  864.     #
  865.     SN=$SERVER_NAME
  866.     add_field SN -ilen 47 -p "$SERVER_NAME_PROMPT" \
  867.         -px 0 -py 1 \
  868.         -pfg ${BLACK} -pbg ${CYAN} -ix inputXLoc -iy 1 \
  869.         -help "helpwin servparm_name" \
  870.         -entry "footer '$FORM_MSG'" \
  871.         -exit "CheckServerNameField"
  872.  
  873.     #
  874.     # Add ipx internal network
  875.     #
  876.     IPX_NET=${IPX_INTERNAL_NETWORK#0x}        # remove leading 0x
  877.     add_field IPX_NET -ilen 8 -p "$IPX_NETWORK_PROMPT" \
  878.         -px 0 -py 2 \
  879.         -pfg ${BLACK} -pbg ${CYAN} -ix inputXLoc -iy 2 \
  880.         -help "helpwin servparm_ipx" \
  881.         -entry "footer '$FORM_MSG'" \
  882.         -exit "CheckIPXNetField"
  883.  
  884.     #
  885.     # Add start at boot field
  886.     #
  887.     let PIY=3
  888.  
  889.     # Get maximum size of this field
  890.     max=${#START_AT_BOOT_1}
  891.     size=${#START_AT_BOOT_2}
  892.     if [ $size -gt $max ]
  893.     then
  894.         max=size
  895.     fi
  896.  
  897.     add_field NWS_START_AT_BOOT -ilen $max -p "$BOOT_START_PROMPT" \
  898.         -px 0 -py $PIY \
  899.         -pfg ${BLACK} -pbg ${CYAN} -ix inputXLoc -iy $PIY \
  900.         -choice "ChooseStartAtBoot" \
  901.         -help "helpwin servparm_boot" \
  902.         -entry "footer '$FORM_MSG_CHOICE'" \
  903.         -exit "CheckStartAtBootField"
  904.     let PIY=PIY+1
  905.  
  906.     #
  907.     # Place main window
  908.     #
  909.     WINTITLE=$MOD_SERVER_PARMS_WIN
  910.     place_window 80 $PIY+1 \
  911.         -title "$WINTITLE" \
  912.         -border_fg $BLACK -bg $CYAN \
  913.         -below 0 \
  914.         -current "footer '$FORM_MSG'"
  915.  
  916.     thisWindow=${CURWIN}
  917.  
  918.     run_form ${thisForm}
  919.  
  920.     input_handler
  921.  
  922.     destroy_form ${thisForm}
  923.  
  924.     wclose ${infoWindow}
  925.  
  926.     # set return values based on results from fields
  927.     IPX_INTERNAL_NETWORK=0x$IPX_NET        # add leading zero
  928.     SERVER_NAME=$SN
  929.  
  930.     return 0
  931. }
  932.  
  933. #
  934. # Licensing functions ==========================================================
  935. #
  936. #
  937. #
  938. #
  939. function InstallUserLicenses
  940. {
  941. [ -n "$DEBUG" ] && set -x
  942.  
  943.     integer ccode infoWindow flag
  944.  
  945.     WINPARMS="-below 0 -border_fg $BLACK -fg $BLACK -bg $CYAN"
  946.  
  947.     let flag=0
  948.  
  949.     while true
  950.     do
  951.         #
  952.         # Display info window
  953.         #
  954.         display "$SERV_PARMS_LIC_INFO_WIN" \
  955.             -fg ${WHITE} -bg ${BLUE} \
  956.             -below 4
  957.         infoWindow=${CURWIN}
  958.  
  959.         CHOOSE_TITLE="$CHOOSE_LICENSE_CHOICES"
  960.         CHOOSE_FOOTER="$ARROW_KEYS_MSG"
  961.  
  962.         if (( $SERVER_LICENSE_LIMIT == 0 ))
  963.         then
  964.             MSG="$INSTALL_LICENSE_MSG"
  965.             CURRENT="$INSTALL_LICENSE_MSG"
  966.         else
  967.             MSG="$INSTALL_ANOTHER_LICENSE_MSG"
  968.             if (( $flag == 0 ))
  969.             then
  970.                 # first time in
  971.                 CURRENT="$INSTALL_ANOTHER_LICENSE_MSG"
  972.             else
  973.                 # second or more times through
  974.                 CURRENT="$CONTINUE_INSTALLATION"
  975.             fi
  976.         fi
  977.  
  978.         choose -e -f -winparms "$WINPARMS" "$CURRENT" "$MSG" "$CONTINUE_INSTALLATION"
  979.  
  980.         set_hotkey 1 "helpwin license"
  981.         input_handler
  982.  
  983.         ccode=0
  984.  
  985.         case "$CHOICE" in
  986.         "$INSTALL_LICENSE_MSG")
  987.             wclose $infoWindow
  988.             ReadLicenseDiskette ccode
  989.             ;;
  990.         "$INSTALL_ANOTHER_LICENSE_MSG")
  991.             wclose $infoWindow
  992.             ReadLicenseDiskette ccode
  993.             ;;
  994.         "$CONTINUE_INSTALLATION")
  995.             break
  996.             ;;
  997.         esac
  998.  
  999.         footer ""
  1000.         
  1001.         let flag=1
  1002.     done
  1003.  
  1004.     wclose $infoWindow
  1005.     return 0
  1006. }
  1007.  
  1008. #
  1009. #
  1010. #
  1011. function ReadLicenseDiskette
  1012. {
  1013. [ -n "$DEBUG" ] && set -x
  1014.  
  1015.     typeset varname=
  1016.     typeset -i errCode
  1017.  
  1018.     footer "$READING_DISKETTE"
  1019.  
  1020.     #
  1021.     # Unmount any data on /mnt
  1022.     #
  1023.     $UMOUNT ${FLPY} > /dev/null 2>&1
  1024.  
  1025.     #
  1026.     # mount the diskette on ${FLPY}
  1027.     #
  1028.     errCode=0
  1029.     if $MOUNT -r -Fdosfs /dev/dsk/f0t ${FLPY} || $MOUNT -r -Fdosfs /dev/dsk/f1t ${FLPY}
  1030.     then
  1031.         # success
  1032.         CopyLicenseFile errCode
  1033.         if (( $errCode == 0 ))
  1034.         then
  1035.             TMP=`printf "$REMOVE_DISKETTE" "$CONS" "$SERIAL_NUMBER"`
  1036.             display -w "$TMP" -current "footer ''"
  1037.             input_handler
  1038.         fi
  1039.         $UMOUNT ${FLPY}
  1040.     else
  1041.         # error
  1042.         display -w "$ERR_MOUNTING_DISKETTE" \
  1043.             -bg ${RED} -fg ${WHITE} \
  1044.             -current "footer ''"
  1045.         input_handler
  1046.         errCode=1
  1047.     fi
  1048.  
  1049.     # return error code
  1050.     varname=$1
  1051.     eval $varname=${errCode}
  1052. }
  1053.  
  1054. function CopyLicenseFile
  1055. {
  1056. [ -n "$DEBUG" ] && set -x
  1057.  
  1058.     typeset varname=
  1059.     typeset -i length
  1060.  
  1061.     # save first arg
  1062.     varname=$1
  1063.  
  1064.     $MKDIR -p /etc/netware/licenses > /dev/null 2>&1
  1065.  
  1066.     NEW_LIC="/etc/netware/licenses/new.mls"
  1067.     $CP ${FLPY}/server.mls $NEW_LIC
  1068.  
  1069.     if (( "$?" != 0 ))
  1070.     then
  1071.         # error
  1072.         display -w "$ERROR_READING_LICENSE_DISK" \
  1073.             -bg ${RED} -fg ${WHITE} \
  1074.             -current "footer ''"
  1075.         input_handler
  1076.         eval $varname=1
  1077.         return 0
  1078.     fi
  1079.  
  1080.     #
  1081.     # Now check to make sure that the license file
  1082.     # is specific to NetWare Server for UnixWare
  1083.     #
  1084.     
  1085.     # Check major and minor OS version and product ID
  1086.     VERS=`$GET_LIC_INFO $NEW_LIC version`
  1087.     PRODID=`$GET_LIC_INFO $NEW_LIC prodid`
  1088.  
  1089. print -u2 $VERS $NWS_VERSION $PRODID $NWS_PRODID
  1090.  
  1091.     if [[ "$VERS" != "$NWS_VERSION" || "$PRODID" != "$NWS_PRODID" ]]
  1092.     then
  1093.         display -w "$WRONG_LICENSE_FORMAT" \
  1094.             -bg ${RED} -fg ${WHITE} \
  1095.             -current "footer ''"
  1096.         input_handler
  1097.         eval $varname=1
  1098.         return 0
  1099.     fi
  1100.  
  1101.     # Save the number of connections and serial number
  1102.     # for comparison against already installed licenses
  1103.     CONS=`$GET_LIC_INFO $NEW_LIC cons`
  1104.     SERIAL_NUMBER=`$GET_LIC_INFO $NEW_LIC serialnumber`
  1105.  
  1106.     #
  1107.     # Move the license file to its real name
  1108.     #
  1109.     let COUNT=0
  1110.     while true
  1111.     do
  1112.         length=${#COUNT}
  1113.         # Attach the appropriate number of zeros at the
  1114.         # beginning of the suffix 
  1115.         if (( $length == 1 ))
  1116.         then
  1117.             SUFFIX="00"$COUNT
  1118.         elif (( $length == 2 ))
  1119.         then
  1120.             SUFFIX="0"$COUNT
  1121.         fi    
  1122.  
  1123.         EXISTING_LIC=/etc/netware/licenses/$LIC_FILE_PREFIX.$SUFFIX
  1124.         $LS $EXISTING_LIC > /dev/null 2>&1
  1125.         if [ $? = 0 ]
  1126.         then
  1127.             # Found an existing license
  1128.             
  1129.             # Now check for a duplicate
  1130.             EXISTING_CONS=`$GET_LIC_INFO $EXISTING_LIC cons`
  1131.             EXISTING_SN=`$GET_LIC_INFO $EXISTING_LIC serialnumber`
  1132.  
  1133.             if [ $EXISTING_SN = $SERIAL_NUMBER ] 
  1134.             then
  1135.                 TMP=`printf "$DUPLICATE_LICENSE" "$EXISTING_SN" $EXISTING_CONS"`
  1136.                 display -w "$TMP" \
  1137.                     -bg ${RED} -fg ${WHITE} \
  1138.                     -current "footer ''"
  1139.                 input_handler
  1140.                 $RM $NEW_LIC
  1141.                 eval $varname=1
  1142.                 return 0
  1143.             fi
  1144.  
  1145.             let COUNT=COUNT+1
  1146.             continue
  1147.         fi
  1148.  
  1149.         # Found an opening
  1150.         break
  1151.     done
  1152.  
  1153.     $MV $NEW_LIC $EXISTING_LIC
  1154.  
  1155.     # Increment the total license count
  1156.     let SERVER_LICENSE_LIMIT=SERVER_LICENSE_LIMIT+CONS
  1157.  
  1158.     # success
  1159.     eval $varname=0
  1160.  
  1161.     return 0
  1162. }
  1163.  
  1164. function SetupServerLanguage
  1165. {
  1166. [ -n "$DEBUG" ] && set -x
  1167.      
  1168. CLASSES="none english"        # default is english
  1169.  
  1170. # if overlay use nwcm parameters to set the following
  1171. if [ "$OVERLAY" = TRUE ]
  1172. then
  1173.     COUNTRY_CODE=`nwcm -v country_code`
  1174.     CODE_PAGE=`nwcm -v code_page`
  1175.     HOST_CODE_SET=`nwcm -v host_code_set`
  1176. else    # set to defaults
  1177.     COUNTRY_CODE=001
  1178.     CODE_PAGE=88591
  1179.     HOST_CODE_SET=88591
  1180.  
  1181.     if [ ${#LOCALE} -gt 1 ]
  1182.     then
  1183.         LANG_TMP=${LOCALE%%${LOCALE##??}}    # filter out first two characters
  1184.     else
  1185.         LANG_TMP=C                    # LOCALE must be C
  1186.     fi
  1187.     case $LANG_TMP in
  1188.         de)                            # GERMAN
  1189.             COUNTRY_CODE=49
  1190.             CODE_PAGE=437
  1191.             CLASSES="none english deutsch"
  1192.             break;;
  1193.         es)                            # SPANISH
  1194.             COUNTRY_CODE=34
  1195.             CODE_PAGE=437
  1196.             CLASSES="none english espanol"
  1197.             break;;
  1198.         fr)                            # FRENCH
  1199.             COUNTRY_CODE=33
  1200.             CODE_PAGE=437
  1201.             CLASSES="none english francais"
  1202.             break;;
  1203.         it)                            # ITALIAN
  1204.             COUNTRY_CODE=39
  1205.             CODE_PAGE=437
  1206.             CLASSES="none english italiano"
  1207.             break;;
  1208.         ja)
  1209.             COUNTRY_CODE=81
  1210.             CODE_PAGE=932
  1211.             CLASSES="none english nihongo"
  1212.             HOST_CODE_SET="eucJP"
  1213.             break;;
  1214.  
  1215.         *)                    # default to C 
  1216.             CLASSES="none english"
  1217.             break;;
  1218.     esac
  1219. fi
  1220.  
  1221. print -u2 CLASSES[$CLASSES]
  1222. print -u2 OVERLAY[$OVERLAY]
  1223. print -u2 LANGUAGE[$LANG_TMP]
  1224. print -u2 COUNTRY_CODE[$COUNTRY_CODE]
  1225. print -u2 CODE_PAGE[$CODE_PAGE]
  1226. print -u2 HOST_CODE_SET[$HOST_CODE_SET]
  1227.  
  1228.     return 0;
  1229. }
  1230.  
  1231. [ -n "$DEBUG" ] && set -x
  1232.  
  1233. #
  1234. # Main() =======================================================================
  1235. #
  1236.  
  1237. #
  1238. # Global Variables
  1239. #
  1240.  
  1241. . $REQDIR/misc_func                        # dot in support functions
  1242.  
  1243. SetLocale
  1244.  
  1245. . ${LANGDEP_SCRIPTS}/set_strings        # load strings
  1246.  
  1247. if (( $CONFFLAG == 1 || $CONFFLAG == 2 ))
  1248. then
  1249.     # Initialize winxksh
  1250.     # NOTE: This CANNOT be made into a function!!!
  1251.     . /usr/lib/winxksh/winrc
  1252.     . /usr/lib/winxksh/scr_init
  1253.     . /etc/dcu.d/menus/choose
  1254. fi
  1255.  
  1256. # This script must be executed from the nws request script. We
  1257. # don't need to enable these strings for internationalization.
  1258. if [ -z "$TMP_SERVER_PARMS" ]
  1259. then
  1260.     echo $MUST_INSTALL_NWS
  1261.     exit 1
  1262. fi
  1263. if [ -z "$TMP_VOLTAB" ]
  1264. then
  1265.     echo $MUST_INSTALL_NWS
  1266.     exit 1
  1267. fi
  1268.  
  1269. case $CONFFLAG in
  1270.  
  1271. 1)    # user has selected "view or change parameters"
  1272.  
  1273.     # GetServerParms will either read in the saved server
  1274.     # parameter values from the last invocation of "view or
  1275.     # change server parameters" or, if this is the first
  1276.     # invocation, it will read the defaults from the
  1277.     # nwconfig file (OVERLAY). If this is a new installation,
  1278.     # the default server parameters will be created.
  1279.     # 
  1280.     GetServerParms
  1281.  
  1282.     InstallUserLicenses
  1283.     ConfigureServer
  1284.  
  1285.     # GetVolParms will either read the saved volume
  1286.     # parameters from the last invocation of "view or
  1287.     # change volume parameters" or, if this is the first
  1288.     # invocation, it will read the defaults from
  1289.     # /etc/netware/voltab (OVERLAY). If /etc/netware/voltab
  1290.     # does not exist, it will create a default SYS volume
  1291.     # entry.
  1292.     GetVolParms
  1293.     if [ "$OVERLAY" != "YES" ]
  1294.     then
  1295.         ConfigureVolumes
  1296.     fi
  1297.     ;;
  1298.  
  1299. 3)    # user has selected "accept all settings and install now"
  1300.  
  1301.     GetServerParms
  1302.     GetVolParms
  1303.  
  1304.     CreateVolDirs
  1305.     CreateUsersAndGroups
  1306.     SetupServerLanguage        # set up host_code_set, etc...
  1307.     WritePostFile
  1308.     ;;
  1309.  
  1310. esac
  1311.  
  1312. exit 0
  1313.