home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nis / install / postinstall < prev    next >
Text File  |  1998-08-19  |  9KB  |  503 lines

  1. #ident    "@(#)postinstall    1.4"
  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
  11. maps=`cat $yproot_dir/YPMAPS | /sbin/grep -v "^#"`
  12. MENU_DIR=/etc/inst/locale/${LOCALE}/menus/nis
  13. PKG_MENU=${REQDIR}/nis
  14. REQ_MENU=${PKG_MENU}
  15. MENU_RESP=/tmp/nisout
  16. error_string="" export error_string
  17. INITSCRIPT=/etc/init.d/nis
  18. NISTMP=/tmp/.nissave
  19. clientp=F
  20. masterp=F
  21. slavep=F
  22. host=""
  23. errors_in_setup=F
  24.  
  25. exec 3>&2
  26. exec 2>/tmp/nis.config
  27.  
  28. cleanup()
  29. {
  30.     if [ -f "$NIS_RESP" ]
  31.     then
  32.         rm -f $NIS_RESP
  33.     fi
  34.  
  35.     if [ -f "$NISTMP" ]
  36.     then
  37.         rm -f $NISTMP
  38.     fi
  39.  
  40.     if [ -f "$MENU_RESP" ]
  41.     then
  42.         rm -f $MENU_RESP
  43.     fi
  44.  
  45.     if [ -f "$hf" ]
  46.     then
  47.         rm -f $hf
  48.     fi
  49. }
  50.  
  51. savemv()
  52. {
  53.     trap "" 1 2 3 15
  54.  
  55.     mv -f $1 $2 > /tmp/nis.config 2>&1
  56.     if [ $? -ne 0 ]
  57.     then
  58.         error 4 "Unable to create %s\n" $2
  59.     fi
  60.  
  61.     trap 1 2 3 15
  62. }
  63.  
  64. lecho()
  65. {
  66.     pfmt -s nostd -g ${PKGMSG}:$1 "$2" $3 $4 $5
  67. }
  68.  
  69. error()
  70. {
  71.     export error_string 
  72.     export mgs_num 
  73.     msg_num="$1" 
  74.     error_string="`/usr/bin/pfmt -s error -g ${PKGMSG}:$1 "$2" 2>&1`" $3 $4 $5
  75.     if [ "$HOW_INSTALL" = "NORMAL" ]
  76.     then
  77.         . /etc/inst/locale/C/menus/menu_colors.sh error > /dev/null 2>&1
  78.         menu_colors error
  79.         menu -f ${MENU_DIR}/menu.err -o /dev/null 2>/dev/null
  80.         menu_colors regular
  81.     else
  82.         echo "$error_string"
  83.     fi
  84. }
  85.  
  86. set_initd_nis()
  87. {
  88.     chmod 0644 /etc/init.d/nis 2>/tmp/nis.config
  89.  
  90.     ed - /etc/init.d/nis <<-EOF > /dev/null 2>&1
  91.         /^domain=/s/"[a-z,A-z,0-9]*"/"$1"/
  92.         /^isserver=/s/=[0-9]*/=$2/
  93.         /^ismaster=/s/=[0-9]*/=$3/
  94.         /^startypbind=/s/=[0-9]*/=1/
  95.         w
  96.         q
  97.         EOF
  98.  
  99.     chmod 0444 /etc/init.d/nis 2>/tmp/nis.config
  100.     echo "domainname $NIS_DOMAIN" > /etc/rc2.d/S51domain 2>/dev/null
  101.     chmod 0755 /etc/rc2.d/S51domain 2>/dev/null
  102. }
  103.  
  104. initnis()
  105. {
  106.     case "$NIS_TYPE" in
  107.         master)
  108.             masterp=T
  109.             ismaster=1
  110.             isserver=1
  111.             startypbind=1
  112.             startypserv=1
  113.             startyppass=1
  114.             ;;
  115.         slave)
  116.             slavep=T
  117.             isserver=1
  118.             ismaster=0
  119.             startypbind=1
  120.             startypserv=1
  121.             startyppass=0
  122.             ;;
  123.         client)
  124.             clientp=T
  125.             isserver=0
  126.             ismaster=0
  127.             startypbind=1
  128.             startypserv=0
  129.             startyppass=0
  130.             ;;
  131.     esac
  132. }
  133.  
  134. if [ ! -f /etc/rc2.d/S02POSTINST ] 
  135. then
  136.     # if we make it this far, postinstall must be called from pkagadd
  137.     NIS_RESP=/tmp/nis.resp
  138. fi
  139.  
  140.  
  141. if [ "$HOW_INSTALL" = "NORMAL" ]
  142. then
  143.     [ -d ${MENU_DIR} ] || mkdir -p ${MENU_DIR}
  144.     menu -r -f ${MENU_DIR}/menu.wk -o $MENU_RESP
  145.     MENUS="menu.1 menu.2 menu.2.1 menu.2.1.1 menu.3 menu.4 menu.5 menu.err menu.ck menu.ol menu.hosts menu.wk"
  146.     for i in $MENUS
  147.     do
  148.         if [  -f ${MENU_DIR}/$i ]
  149.         then
  150.             installf ${PKGINST}  ${MENU_DIR}/$i f 0644 root sys
  151.         fi
  152.     done
  153. fi
  154.  
  155. #
  156. # Source in the response file variables, if there are any...
  157. #
  158.  
  159. if [ -f $NIS_RESP -a ! -f /etc/inst/scripts/postreboot.sh ]
  160. then
  161.     . $NIS_RESP
  162. fi
  163.  
  164. #
  165. # Source in the ISL variables, if there are any...
  166. #
  167. if [ -f /isl/ifile ]
  168. then
  169.     . /isl/ifile
  170. fi
  171.  
  172. #
  173. # Gross hack to read ifile variables that are in ksh format.
  174. # Sadly postinstall is invoked with /bin/sh.
  175. #
  176. /usr/bin/winxksh -c '
  177.  
  178. hf=/tmp/ypservers
  179.  
  180. if [ -f /isl/ifile -a -f /etc/inst/scripts/postreboot.sh ]
  181. then
  182.     . /isl/ifile
  183. fi
  184.  
  185. if [ ! -f $hf ]
  186. then
  187.     echo "${NIS_SERVER[0]}" > $hf
  188.     echo "${NIS_SERVER[1]}" >> $hf
  189.     echo "${NIS_SERVER[2]}" >> $hf
  190. fi
  191. '
  192.  
  193. if [ "$TYPE" ]
  194. then
  195.     case "$TYPE" in
  196.     1)
  197.         NIS_TYPE="master"
  198.         ;;
  199.     2)
  200.         NIS_TYPE="slave"
  201.         ;;
  202.     3)
  203.         NIS_TYPE="client"
  204.         ;;
  205.     *)
  206.         NIS_TYPE="DEFER"
  207.         ;;
  208.     esac
  209. fi
  210.  
  211. if [ "$NIS_TYPE" = "DEFER" -o "$CONFIG_NOW" = "No" ]
  212. then
  213.     cleanup
  214.     if [ "$HOW_INSTALL" = "NORMAL" ]
  215.     then
  216.         menu -c
  217.     fi
  218.     exit 0
  219. else
  220.     case "$NIS_TYPE" in
  221.         master)
  222.             masterp=T
  223.             ismaster=1
  224.             isserver=1
  225.             startypbind=1
  226.             startypserv=1
  227.             startyppass=1
  228.             ;;
  229.         slave)
  230.             slavep=T
  231.             isserver=1
  232.             ismaster=0
  233.             startypbind=1
  234.             startypserv=1
  235.             startyppass=0
  236.             ;;
  237.         client)
  238.             clientp=T
  239.             isserver=0
  240.             ismaster=0
  241.             startypbind=1
  242.             startypserv=0
  243.             startyppass=0
  244.             ;;
  245.     esac
  246.  
  247.     if [ -f /usr/lib/.ns.so ]
  248.     then
  249.         # if upgrade and overlay be sure things are clean
  250.         rm -rf /usr/lib/ns.so
  251.         rm -rf /usr/lib/ns.so.1
  252.         /sbin/ln -s /usr/lib/.ns.so /usr/lib/ns.so
  253.         /sbin/ln -s /usr/lib/.ns.so /usr/lib/ns.so.1
  254.     fi
  255. fi
  256.  
  257. #
  258. # if the user has chosen to use the current configuration,
  259. # simply update the /etc/init.d/nis script and exit.
  260. #
  261. if [ "$USE_CURRENT" = "Yes" ] 
  262. then
  263.     echo "domain=$NIS_DOMAIN" >> $NISTMP
  264.     echo "isserver=$isserver" >> $NISTMP
  265.     echo "ismaster=$ismaster" >> $NISTMP
  266.     echo "startypbind=$startypbind" >> $NISTMP
  267.     echo "startypserv=$startypserv" >> $NISTMP
  268.     echo "startyppass=$startyppass" >> $NISTMP
  269.  
  270.     ed - $INITSCRIPT <<-EOF > /dev/null 2>&1
  271.         /^domain\=/d
  272.         /^isserver\=/d
  273.         /^ismaster\=/d
  274.         /^startypbind\=/d
  275.         /^startypserv\=/d
  276.         /^startyppass\=/d
  277.         w
  278.         q
  279.         EOF
  280.  
  281.     ed - $INITSCRIPT <<-EOF > /dev/null 2>&1
  282.         1,2r $NISTMP
  283.         w
  284.         q
  285.         EOF
  286.  
  287.     echo "domainname $NIS_DOMAIN" > /etc/rc2.d/S51domain 2>/dev/null
  288.     chmod 0755 /etc/rc2.d/S51domain 2>/dev/null
  289.     cleanup
  290.     if [ "$HOW_INSTALL" = "NORMAL" ]
  291.     then
  292.         menu -c
  293.     fi
  294.     exit 0
  295. fi
  296.  
  297. host=`uname -n` 2>/tmp/nis.config
  298.  
  299. if [ $? -ne 0 ]
  300. then 
  301.     if [ "$HOW_INSTALL" = "NORMAL" ]
  302.     then
  303.         menu -c
  304.     fi
  305.     error 1 "Can not determine local host's name. \n"
  306.     cleanup
  307.     exit 1
  308. fi
  309.  
  310. if [ -z "$host" ]
  311. then
  312.     if [ "$HOW_INSTALL" = "NORMAL" ]
  313.     then
  314.         menu -c
  315.     fi
  316.     error 2 "The local host's name has not been set. Please set it. \n"
  317.     cleanup
  318.     exit 1
  319. fi
  320.  
  321. domainname $NIS_DOMAIN
  322. NIS_DOMAIN=`ypalias -d $NIS_DOMAIN 2>/dev/null`
  323. real_def_dom=$NIS_DOMAIN
  324. ypservers_map=`ypalias ypservers`
  325. domain_dir="$yproot_dir""/""$NIS_DOMAIN" 
  326. binding_dir="$yproot_dir""/binding/""$NIS_DOMAIN"
  327. binding_file="$yproot_dir""/binding/""$NIS_DOMAIN""/ypservers"
  328.  
  329. if [ ! -d $yproot_dir -o -f $yproot_dir ]
  330. then
  331.     if [ "$HOW_INSTALL" = "NORMAL" ]
  332.     then
  333.         menu -c
  334.     fi
  335.     error 12 " The directory %s does not exist.\nRestore it from the distribution.\n" $yproot_dir
  336.     cleanup
  337.     exit 1
  338. fi
  339.  
  340. # add domainname and ypservers aliases to aliases file
  341. echo ypservers $ypservers_map >> $yproot_dir/aliases
  342. echo $real_def_dom $NIS_DOMAIN >> $yproot_dir/aliases
  343. sort $yproot_dir/aliases | uniq > /tmp/.ypaliases 
  344. mv /tmp/.ypaliases $yproot_dir/aliases
  345.  
  346. if [ ! -d "$yproot_dir"/binding ]
  347. then    
  348.     if [ "$HOW_INSTALL" = "NORMAL" ]
  349.     then
  350.         menu -c
  351.     fi
  352.     error 13 "The directory %s does not exist.\nNIS configuration has not completed properly.\nPlease read the NIS Administrator's Guide and \nreconfigure NIS for this system." $yproot_dir/binding
  353.     cleanup
  354.     exit 1
  355. fi
  356.  
  357. if [ ! -d  $binding_dir ]
  358. then    
  359.     if [ "$HOW_INSTALL" = "NORMAL" ]
  360.     then
  361.         menu -c
  362.         error 13 "The directory %s does not exist.\nNIS configuration has not completed properly.\nPlease read the NIS Administrator's Guide and \nreconfigure NIS for this system." $binding_dir
  363.         cleanup
  364.         exit 1
  365.     else
  366.         mkdir -p $binding_dir
  367.     fi
  368. fi
  369.  
  370. if [ -f $hf ]
  371. then
  372.     cp $hf $binding_file
  373. fi
  374.  
  375. if [ -x /sbin/chlvl ]
  376. then
  377.     chlvl SYS_PUBLIC $binding_file
  378. fi
  379.  
  380. #
  381. ##
  382. ## If client only, we are done
  383. ##     our purpose was just to set up the binding file
  384. ##
  385. if [ $clientp = T ]
  386. then
  387.     set_initd_nis $NIS_DOMAIN 0 0
  388.     if [ "$HOW_INSTALL" = "NORMAL" ]
  389.     then
  390.         menu -c
  391.     fi
  392.     if [ $errors_in_setup = T ]
  393.     then
  394.         lecho 14 "\n \n%s has been set up as a NIS client with errors.  \
  395. Please read /tmp/nis.config for further information, and re-run ypinit.\n \n" $host
  396.     else
  397.         lecho 8 "\n \n%s has been successfully set up as a NIS client. \
  398. \n \n" $host
  399.     fi
  400.     cleanup
  401.     exit 0
  402. fi
  403.  
  404. for dir in $yproot_dir/$NIS_DOMAIN
  405. do
  406.     if [ -d $dir ]
  407.     then
  408.         rm -rf $dir
  409.     fi
  410.  
  411.     mkdir $dir 2>/tmp/nis.config
  412.     if [ $?  -ne 0 ]
  413.     then
  414.         if [ "$HOW_INSTALL" = "NORMAL" ]
  415.         then
  416.             menu -c
  417.         fi
  418.         error 6 "Can not make new directory %s \n" $dir
  419.         cleanup
  420.         exit 1
  421.     fi
  422. done
  423.  
  424. if [ $slavep = T ]
  425. then
  426.     set_initd_nis $NIS_DOMAIN 1 0
  427.     echo "master=$master" > $yproot_dir/xfrmaps
  428.     echo "maps=\"$maps\"" >> $yproot_dir/xfrmaps
  429.     if [ "$HOW_INSTALL" = "NORMAL" ]
  430.     then
  431.         menu -c
  432.     fi
  433.     if [ $errors_in_setup = T ]
  434.     then
  435.         lecho 15 "\n \n%s has been set up as a NIS slave server\
  436. with errors.  \
  437. Please read /tmp/nis.config for further information, and re-run ypinit.\n \n" $host
  438.     else
  439.         lecho 9 "\n \n%s has been successfully set up as a NIS slave server. \
  440. \n \n" $host
  441.     fi
  442.     cleanup
  443.     exit 0
  444. fi
  445.  
  446. #
  447. # This must be a NIS master so create NIS maps
  448. #
  449. rm -f $yproot_dir/*.time
  450.  
  451. makedbm $hf $yproot_dir/$NIS_DOMAIN/$ypservers_map >> /tmp/nis.config 2>&1
  452.  
  453. if [ $?  -ne 0 ]
  454. then
  455.     error 7 "Error building NIS maps. Could not build nis data base %s/%s/%s.\n" $yproot_dir $NIS_DOMAIN $ypservers_map
  456.     if [ "$HOW_INSTALL" = "NORMAL" ]
  457.     then
  458.         menu -c
  459.     fi
  460.     cleanup
  461.     exit 1
  462. fi
  463.  
  464. in_pwd=`pwd`
  465. cd $yproot_dir
  466.  
  467. # ypbuild is used instead of the regular make command
  468. # because /usr/ccs/bin/make cannot inherit privileges
  469. # in Enhanced Security environment.
  470. /var/yp/ypbuild MAKE=/var/yp/ypbuild SHELL=/sbin/sh NOPUSH=1 >> /tmp/nis.config 2>&1
  471.  
  472. if [ $?  -ne 0 ]
  473. then
  474.     if [ "$HOW_INSTALL" = "NORMAL" ]
  475.     then
  476.         menu -c
  477.     fi
  478.     error 7 "Error building NIS maps. Could not build nis data base %s/%s/%s.\n" $yproot_dir $NIS_DOMAIN $ypservers_map
  479.     cleanup
  480.     exit 1
  481. fi
  482.  
  483. set_initd_nis $NIS_DOMAIN 1 1
  484. cd $in_pwd
  485.  
  486. if [ "$HOW_INSTALL" = "NORMAL" ]
  487. then
  488.     menu -c 
  489. fi
  490.  
  491. if [ $errors_in_setup = T ]
  492. then
  493.     lecho 10 "\n \n%s has been set up as a NIS master server\
  494. with errors.  \
  495. Please read /tmp/nis.config for further information, and re-run ypinit.\n \n" $host
  496. else
  497.     lecho 11 "\n \n%s has been successfully set up as a NIS master server. \
  498. \n \n" $host
  499. fi
  500.     
  501. cleanup
  502. exit 0
  503.