home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nis / install / request < prev   
Text File  |  1998-08-19  |  11KB  |  550 lines

  1. #ident    "@(#)request    1.3"
  2. #ident  "$Header: $"
  3. SCRIPTS=/usr/sbin/pkginst
  4. UPGRADE_STORE=/var/sadm/upgrade
  5. PKGMSG=/${PKGINST}.pkg export PKGMSG
  6. LOCALE=${LC_ALL:-${LC_MESSAGES:-${LANG:-"C"}}}
  7. PATH=/bin:/usr/bin:/usr/etc:/usr/sbin:$PATH
  8. export PATH 
  9. yproot_dir=/var/yp
  10. hf=/tmp/ypservers #used by postinstall
  11. clientp=F export clientp
  12. masterp=F
  13. slavep=F export slavep
  14. host="" export host
  15. NIS_DOMAIN="" export NIS_DOMAIN
  16. host_type="" export host_type
  17. master="" export master
  18. ACCEPT="No" export ACCEPT
  19. not_configured=1 
  20. SERV1="" export SERV1
  21. SERV2="" export SERV2
  22. SERV3="" export SERV3
  23. CONFIG_NOW="No" export CONFIG_NOW
  24. NISOVERLAY=/tmp/nis.overlay export NISOVERLAY
  25. PKGADD_FILE=$1
  26. NIS_RESP=$1 export NIS_RESP
  27. nis_setup_exists="-d $yproot_dir/binding -a -d $yproot_dir/binding/* -o -f $yproot_dir/binding"
  28. INITSCRIPT=/etc/init.d/nis
  29. USE_CURRENT="Yes" export USE_CURRENT
  30. TYPE="" export TYPE
  31. badhosts=/tmp/.nishosts export badhosts
  32. HOW_INSTALL=NORMAL
  33.  
  34. if [ -f /etc/rc2.d/S02POSTINST ]
  35. then
  36.     HOW_INSTALL=POSTREBOOT
  37. fi
  38.  
  39. if [ -f /etc/inst/scripts/postreboot.sh ]
  40. then
  41.     HOW_INSTALL=ON_BFLOP
  42. fi
  43.  
  44. ckhost()
  45. {
  46.     #
  47.     # Now check to see if the host is in /etc/hosts
  48.     #
  49.     found=0
  50.     if [ -f /etc/inet/hosts ]
  51.     then
  52.         found=`cat /etc/inet/hosts | sed '/^#/d' | nawk '
  53.             BEGIN {found=0}
  54.                 host == $2 {found=1; exit 0}
  55.             END {print found}' host=$1`
  56.     fi
  57.     if [ -s /etc/resolv.conf ]
  58.     then
  59.         /usr/sbin/ping $1 5 >/dev/null 2>&1
  60.         [ "$?" = "0" ] && found=1
  61.     fi
  62.     return $found
  63. }
  64.  
  65. cleanup()
  66. {
  67.     rm -f $MENU_RESP
  68.     rm -f $NISOVERLAY
  69.     rm -f $hf
  70.     rm -f $badhosts
  71.  
  72. }
  73.  
  74. savemv()
  75. {
  76.     trap "" 1 2 3 15
  77.  
  78.     mv -f $1 $2 > /tmp/nis.config 2>&1
  79.     if [ $? -ne 0 ]
  80.     then
  81.         error 4 "Unable to create %s\n" $2
  82.     fi
  83.  
  84.     trap 1 2 3 15
  85. }
  86.  
  87. error()
  88. {
  89.     export error_string 
  90.     export mgs_num 
  91.     msg_num="$1" 
  92.     error_string="`/usr/bin/pfmt -s error -g ${PKGMSG}:$1 "$2" 2>&1`" $3
  93.     . /etc/inst/locale/C/menus/menu_colors.sh error > /dev/null 2>&1
  94.     menu_colors error
  95.     menu -f ${MENU_DIR}/menu.err -o /dev/null 2>/dev/null
  96.     menu_colors regular
  97. }
  98.  
  99. setdomain()
  100. {
  101.     NIS_DOMAIN=`domainname` 2>/tmp/nis.config
  102.     if [ $? -ne 0 ]
  103.     then 
  104.         error 3 "Can not get local host's domain name. \n"
  105.         cleanup
  106.         exit 1
  107.     fi
  108.     menu -f ${MENU_DIR}/menu.5 -o ${MENU_RESP} 2>/dev/null
  109.     cat ${MENU_RESP}  >> ${NIS_RESP}
  110.     . ${MENU_RESP}
  111. }
  112.  
  113. initnis()
  114. {
  115.     host=`uname -n` 2>/tmp/nis.config
  116.     notdone=1
  117.     while [ $notdone = 1 ]
  118.     do
  119.         menu -f ${MENU_DIR}/menu.2 -o ${MENU_RESP} 2>/dev/null
  120.         cat ${MENU_RESP} >> ${NIS_RESP}
  121.         . ${MENU_RESP}
  122.  
  123.         case "$TYPE" in
  124.             1)
  125.                 masterp=T
  126.                 ismaster=1
  127.                 isserver=1
  128.                 notdone=0
  129.                 host_type="master server"
  130.                 ;;
  131.             2)
  132.                 menu -f ${MENU_DIR}/menu.2.1 -o ${MENU_RESP} 
  133.                 cat ${MENU_RESP}  >> ${NIS_RESP}
  134.                 . ${MENU_RESP}
  135.                 if [ ! -z "$master" ]
  136.                 then
  137.                     if [ "$host" =  "$master" ]
  138.                     then
  139.                         . /etc/inst/locale/C/menus/menu_colors.sh warn 1>/dev/null 2>&1
  140.                         menu_colors warn
  141.                         menu -f ${MENU_DIR}/menu.2.1.1 -o ${MENU_RESP} 
  142.                         menu_colors regular
  143.                         continue
  144.                     fi
  145.                     slavep=T
  146.                     isserver=1
  147.                     notdone=0
  148.                 fi
  149.                 host_type="slave server"
  150.                 ;;
  151.             3)
  152.                 clientp=T
  153.                 notdone=0
  154.                 host_type="client"
  155.                 ;;
  156.             *)
  157.                 continue
  158.                 ;;
  159.         esac
  160.     done
  161. }
  162.  
  163. #
  164. # Get current NIS configuration.
  165. #
  166. getnisconfig()
  167. {
  168.     /sbin/rm -rf $NISOVERLAY
  169.     NIS_DOMAIN=`/usr/bin/domainname`
  170.     echo "NIS_DOMAIN=$NIS_DOMAIN" >> $NIS_RESP
  171.     if [ $nis_setup_exists ]
  172.     then
  173.         if [ -f $yproot_dir/binding/$NIS_DOMAIN/ypservers ]
  174.         then
  175.             #
  176.             # Just print out the first 3 servers onto the menu.
  177.             #
  178.             sed  -n '1,3p' $yproot_dir/binding/$NIS_DOMAIN/ypservers >> $NISOVERLAY 
  179.             echo "\n \n" >> $NISOVERLAY
  180.         else
  181.             #
  182.             # If /var/yp/binding/$NIS_DOMAIN/ypservers is not
  183.             # present then can not use current configuarion.
  184.             #
  185.             return 1
  186.         fi
  187.  
  188.         if [ -f $INITSCRIPT ]
  189.         then
  190.             awk -F= '/^domain/ { printf("NIS_DOMAIN=%s", $2) }
  191.                  /^isserver/ { printf("ISSERVER=%s", $2) }
  192.                  /^ismaster/ { printf("ISMASTER=%s", $2) }
  193.                  /^startypbind/ { printf("STARTYPBIND=%s", $2) }
  194.                  /^startypserv/ { printf("STARTYPSERV=%s", $2) }
  195.                  /^startyppass/ { printf("STARTYPPASS=%s", $2) }
  196.                 ' $INITSCRIPT >> $NIS_RESP
  197.         else
  198.             #
  199.             # If /etc/init.d/nis is not present then can not use
  200.             # current configuarion.
  201.             #
  202.             return 1
  203.         fi
  204.     
  205.         . $NIS_RESP
  206.         if [ $ISSERVER = "1" ]
  207.         then
  208.             if [ $ISMASTER = "1" ]
  209.             then
  210.                 NIS_TYPE="master"
  211.             else
  212.                 NIS_TYPE="slave"
  213.             fi
  214.         else
  215.             NIS_TYPE="client"
  216.         fi
  217.  
  218.         echo "NIS_TYPE=$NIS_TYPE" >> $NIS_RESP
  219.  
  220.         if [ "$HOW_INSTALL" = "NORMAL" ]
  221.         then
  222.             /usr/sbin/menu -f ${MENU_DIR}/menu.ol -o ${MENU_RESP} 
  223.             cat ${MENU_RESP}  >> ${NIS_RESP}
  224.             . ${MENU_RESP} 
  225.         fi
  226.  
  227.         rm -rf $NISOVERLAY
  228.  
  229.         if [ "$USE_CURRENT" = "No" ]
  230.         then
  231.             #
  232.             # Do not use current configuration.
  233.             #
  234.             return 1
  235.         else
  236.             #
  237.             # Save some volatile files.
  238.             #
  239.             mv /var/yp/YPMAPS /var/yp/YPMAPS.old 2>/dev/null
  240.             mv /var/yp/aliases /var/yp/aliases.old 2>/dev/null
  241.             mv /var/yp/Makefile /var/yp/Makefile.old 2>/dev/null
  242.  
  243.             #
  244.             # Use current configuration.
  245.             #
  246.             return 0
  247.         fi
  248.     else
  249.         #
  250.         # No valid configuration found.
  251.         #
  252.         return 1
  253.     fi
  254. }
  255.  
  256. . ${SCRIPTS}/updebug
  257. [ "$UPDEBUG" = YES ] && set -x
  258.  
  259. #
  260. # Check to see if we are being called from boot floppy
  261. #
  262. #if [ -f /etc/inst/scripts/postreboot.sh ]
  263. #then
  264. #    mkdir /tmp/nis
  265. #    cp ${REQDIR}/request /etc/inst/scripts/nisrequest
  266. #    cp ${REQDIR}/postinstall /etc/inst/scripts/nispostinst
  267. #    chmod +x /etc/inst/scripts/nisrequest
  268. #    chmod +x /etc/inst/scripts/nispostinst
  269. #    exit 0
  270. #fi
  271. # We are rebooting after fnd set installation if the script
  272. # /etc/rc2.d/S02POSTINST exists
  273. #if [ ! -f /etc/rc2.d/S02POSTINST ] 
  274. #then
  275. #    # if we make it this far, postinstall must be called from pkagadd
  276. #    NIS_RESP=/tmp/nis.resp
  277. #fi
  278.  
  279. #
  280. # menu stuff
  281. #
  282. MENU_DIR=/etc/inst/locale/${LOCALE}/menus/nis
  283. PKG_MENU=${REQDIR}/nis
  284. REQ_MENU=${PKG_MENU}
  285. MENU_RESP=/tmp/nisout
  286. [ -d ${MENU_DIR} ] || mkdir -p ${MENU_DIR}
  287. MENUS="menu.1 menu.2 menu.2.1 menu.2.1.1 menu.4 menu.5 menu.err menu.wk menu.ck menu.ol menu.hosts"
  288. for i in $MENUS
  289. do
  290.     if [ ! -f ${MENU_DIR}/$i ]
  291.     then
  292.         if [ ! -f ${PKG_MENU}/$i ]
  293.         then
  294.             cp ${PKG_MENU}/$i ${MENU_DIR}
  295.             chgrp sys ${MENU_DIR}/$i
  296.         else
  297.             cp ${REQ_MENU}/$i ${MENU_DIR}
  298.             chgrp sys ${MENU_DIR}/$i
  299.         fi
  300.     fi
  301. done
  302. #
  303. #  Set up to use menu_colors; default to C-locale if ${LANG}'s dir has
  304. #  no menu_colors.sh
  305. #
  306. if [ -f /etc/inst/locale/${LOCALE}/menus/menu_colors.sh ]
  307. then
  308.     . /etc/inst/locale/${LOCALE}/menus/menu_colors.sh 1> /dev/null 2>&1
  309. else
  310.     . /etc/inst/locale/C/menus/menu_colors.sh 1> /dev/null 2>&1
  311. fi
  312.  
  313. menu_colors regular
  314. #
  315. # Create in message catalogs
  316. #
  317. if [ ! -f /usr/lib/locale/${LOCALE}/LC_MESSAGES/${PKGMSG} ]
  318. then
  319.    if [ -f ${REQDIR}/inst/locale/${LOCALE}/${PKGMSG} -a \
  320.     -d /usr/lib/locale/${LOCALE}/LC_MESSAGES ]
  321.    then
  322.     cp ${REQDIR}/inst/locale/${LOCALE}/${PKGMSG} \
  323.        /usr/lib/locale/${LOCALE}/LC_MESSAGES
  324.    fi
  325. fi
  326.  
  327. #
  328. # This is the main loop of the script
  329. #
  330. while [ $not_configured = 1 ]
  331. do
  332.  
  333. ############# Begin UPGRADE AND OVERLAY #######################
  334. ${SCRIPTS}/chkpkgrel $PKGINST
  335. PKGVERSION=$?
  336.  
  337. case $PKGVERSION in
  338.     2)    PKGINSTALL_TYPE=OVERLAY  ;;
  339.     4)    PKGINSTALL_TYPE=UPGRADE  ;;
  340.     6)    PKGINSTALL_TYPE=UPGRADE2 ;;
  341.     *)    unset PKGINSTALL_TYPE    ;;
  342. esac
  343.  
  344. #
  345. # Check to see if NIS is installed and initialized.
  346. # If so, get the current NIS configuration
  347. # otherwise, initialize NIS. getnisconfig() returns 0 if a
  348. # valid configuration was found.
  349. #
  350. # the NIS package did not exist before update 6 of uw1.1.
  351. # Upgrade will then be anything from update 6 to uw2.0 or later
  352. # Overlay will be update  6 to update 7 etc., uw2.0 to uw2.1.
  353. # In both cases the actions to be take are the same for now.
  354. #
  355. if [ $PKGINSTALL_TYPE=UPGRADE ] || [ $PKGINSTALL_TYPE=OVERLAY ] || \
  356.    [ $PKGINSTALL_TYPE=UPGRADE2 ]
  357. then
  358.     getnisconfig
  359.     if [ "$?" = "0" ]
  360.     then
  361.         if [ $USE_CURRENT = "Yes" ]
  362.         then
  363.             echo "CONFIG_NOW=Yes" >> $NIS_RESP
  364.             cp $NIS_RESP $PKGADD_FILE 2>/dev/null
  365.             exit 0
  366.         fi
  367.     fi
  368. fi
  369. ############# End UPGRADE AND OVERLAY #######################
  370.  
  371. if [ "$HOW_INSTALL" = "NORMAL" ]
  372. then
  373.     #
  374.     # This is the case of pkgadd on a running system.
  375.     #
  376.     #
  377.     # Find out if user wants to configure NIS now
  378.     #
  379.     menu -f ${MENU_DIR}/menu.1 -o ${MENU_RESP} 
  380.     . ${MENU_RESP}
  381.  
  382.     if [ $CONFIG_NOW = "No" ]
  383.     then
  384.         echo "CONFIG_NOW=No" >> $NIS_RESP
  385.         cp $NIS_RESP $PKGADD_FILE 2>/dev/null
  386.         not_configured=0
  387.         continue
  388.     fi
  389.  
  390.     initnis
  391.     host=`uname -n` 2>/tmp/nis.config
  392.  
  393.     if [ $? -ne 0 ]
  394.     then 
  395.         error 1 "Can not determine local host's name. \n"
  396.         cleanup
  397.         exit 1
  398.     fi
  399.  
  400.     if [ -z "$host" ]
  401.     then
  402.         error 2 "The local host's name has not been set. Please set it. \n"
  403.         cleanup
  404.         exit 1
  405.     fi
  406.  
  407.     setdomain
  408.     binding_dir="$yproot_dir""/binding/""$NIS_DOMAIN"
  409.     binding_file="$yproot_dir""/binding/""$NIS_DOMAIN""/ypservers"
  410.  
  411.     if [ ! -d "$yproot_dir" ]
  412.     then
  413.         mkdir -p $yproot_dir 2>/dev/null
  414.     fi
  415.  
  416.     if [ ! -d "$binding_dir" ]
  417.     then
  418.         mkdir -p $binding_dir 2>/dev/null
  419.     fi
  420.  
  421.     if [ ! -d  $binding_dir ]
  422.     then    
  423.         error 12 " The directory %s does not exist. Restore it from the distribution." $binding_dir
  424.         cleanup
  425.         exit 1
  426.     fi
  427.  
  428.     if [ $slavep = F ]
  429.     then
  430.         rm -f $badhosts
  431.         rm -f $hf
  432.         more_servers="Yes"
  433.         first_loop="yes" export first_loop
  434.  
  435.         if [ $TYPE = "1" ] 
  436.         then
  437.             SERVER1=`uname -n`
  438.             export SERVER1
  439.         fi
  440.  
  441.         if [ $TYPE = "3" ] 
  442.         then
  443.             SERVER1=""
  444.             export SERVER1
  445.         fi
  446.  
  447.         while [ $more_servers = "Yes" ]
  448.         do
  449.             menu -f ${MENU_DIR}/menu.4 -o ${MENU_RESP}
  450.             . ${MENU_RESP}
  451.  
  452.             for i in SERVER1 SERVER2 SERVER3 SERVER4 SERVER5
  453.             do
  454.                 eval arg=$"$i"
  455.  
  456.                 if [  "$arg" != "" ]
  457.                 then 
  458.                     echo $arg >> $hf
  459.                     ckhost $arg
  460.                     if [ "$?" = "0" ]
  461.                     then
  462.                         echo $arg >> $badhosts
  463.                     fi
  464.                 fi
  465.  
  466.                 if [ $first_loop = "yes" ]
  467.                 then
  468.                     if [ "$i" = "SERVER1" ]
  469.                     then
  470.                         SERV1=$arg
  471.                     fi
  472.  
  473.                     if [ "$i" = "SERVER2" ]
  474.                     then
  475.                         SERV2=$arg
  476.                     fi
  477.  
  478.                     if [ "$i" = "SERVER3" ]
  479.                     then
  480.                         SERV3=$arg
  481.                     fi
  482.                 fi
  483.             done
  484.  
  485.             first_loop="no"
  486.             SERVER1=""
  487.         done
  488.     else
  489.         #
  490.         # This is a slave host.
  491.         #
  492.         rm -f $badhosts
  493.         rm -f $hf
  494.         echo $master >> $hf
  495.         echo $host  >> $hf
  496.         ckhost $master
  497.         if [ "$?" = "0" ]
  498.         then
  499.             echo $master >> $badhosts
  500.         fi
  501.     fi
  502.     
  503.     #
  504.     # Check to see if hosts were entered that were not
  505.     # in /etc/hosts.
  506.     #
  507.     if [ -f $badhosts ]
  508.     then
  509.         menu_colors warn
  510.         menu -f ${MENU_DIR}/menu.hosts -o /dev/null 2>/tmp/error
  511.         menu_colors regular
  512.     fi
  513.  
  514.     rm -f $badhosts
  515.     
  516.     menu -f ${MENU_DIR}/menu.ck -o ${MENU_RESP}
  517.     . ${MENU_RESP}
  518.  
  519.     if [ $ACCEPT != "Yes" ]
  520.     then
  521.         master=""
  522.         slavep=F
  523.         client=F
  524.         SERV1=""
  525.         SERV2=""
  526.         SERV3=""
  527.         not_configured=1
  528.     else
  529.         echo "CONFIG_NOW=Yes" >> $NIS_RESP
  530.         not_configured=0
  531.     fi
  532.  
  533.     cp $NIS_RESP $PKGADD_FILE 2>/dev/null
  534. fi
  535.  
  536. if [ "$HOW_INSTALL" = "ON_BFLOP" ]
  537. then
  538.     #
  539.     # We're installing from ISL exit.
  540.     #
  541.     exit 0
  542. fi
  543.  
  544. done
  545.  
  546. #
  547. # Nothing left to do!
  548. #
  549. exit 0
  550.