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

  1. #!/bin/sh
  2. #
  3. #    @(#) postinstall.shinc 12.9 97/11/17 
  4. #
  5. # Copyright (c) 1997 The Santa Cruz Operation, Inc.. All Rights Reserved.
  6. # THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE SANTA CRUZ OPERATION INC.
  7. # The copyright notice above does not evidence any actual or intended
  8. # publication of such source code.
  9. #
  10. ME="`basename $0`"
  11. ISL_FILE="/etc/inst/scripts/postreboot.sh"
  12. SUCCESS=0; FAIL=1; INTR=3
  13. trap "exit $INTR" 2 3 15
  14. [ -f $ISL_FILE ] && exec 1>>/var/adm/log/$PKGINST.out
  15. [ -f $ISL_FILE ] && exec 2>>/var/adm/log/$PKGINST.err
  16.  
  17. # location of the packaging information files during this phase of installation
  18. INSTALL_DIR="/var/sadm/pkg/$PKGINST/install/$PKGINST"
  19.  
  20. # included standard routines
  21. #############################################################################
  22. #
  23. #    @(#) replace_with_newer.sh_h 12.2 97/10/27 
  24. #
  25. # Standard routine to update the /etc/encrypt_config script with the
  26. # one held in this package if, and only if, it can be determined that
  27. # the one held in this package is at a later SCCS revision level.
  28. #
  29. # The routine uses what(C,1) to decide which file is the newer.  Missing
  30. # numbers in the SCCS R.L.B.S versioning are assumed to be 0.  A file
  31. # with no SCCS ID at all in it is assumed to be at 0.0.0.0.
  32. #
  33. # Arguments are:
  34. #
  35. #    $1    - PKGINST
  36. #    $2    - action: 'test' or 'update'
  37. #    $3    - path to the original file
  38. #    $4    - path to the file to update it with
  39. #    $5    - mode of the 'new' file
  40. #    $6    - owner of the 'new' file
  41. #    $7    - group of the 'new' file
  42. #
  43. # Return values are:
  44. #
  45. #    0    - success; the file was upgraded if $2 is 'update', the
  46. #          file should be updated if $2 is 'test'
  47. #    1    - failure; the file is as new or newer than the replacement
  48. #          we have for it
  49. #
  50. # Also uses:
  51. #
  52. #    $ME    - name of the shell script calling the routine
  53. #    $SUCCESS- success value 0
  54. #    $FAIL    - error value 1
  55. #############################################################################
  56. replace_with_newer()
  57. {
  58.     pkginst="$1"
  59.     action="$2"
  60.     original_file="$3"
  61.     shipped_file="$4"
  62.     mode="$5"
  63.     owner="$6"
  64.     group="$7"
  65.  
  66.     # first, decide whether to update the file at all
  67.     update=0
  68.     if [ ! -f $shipped_file ]; then
  69.         echo "$ME: can't find $shipped_file" >&2
  70.         return $FAIL
  71.     fi
  72.     if [ ! -f $original_file ]; then
  73.         update=1
  74.     else
  75.         # find the SCCS IDs of both files
  76.         set -- `what $original_file | awk 'NR==2 { print $2 }' \
  77.                 | awk -F'.' '{ print $1" "$2" "$3" "$4 }'`
  78.         oR=$1; oL=$2; oB=$3; oS=$4
  79.         [ -z "$oR" ] && oR=0; [ -z "$oL" ] && oL=0
  80.         [ -z "$oB" ] && oB=0; [ -z "$oS" ] && oS=0
  81.         set -- `what $shipped_file | awk 'NR==2 { print $2 }' \
  82.                 | awk -F'.' '{ print $1" "$2" "$3" "$4 }'`
  83.         sR=$1; sL=$2; sB=$3; sS=$4
  84.         [ -z "$sR" ] && sR=0; [ -z "$sL" ] && sL=0
  85.         [ -z "$sB" ] && sB=0; [ -z "$sS" ] && sS=0
  86.  
  87.         # now compare the SCCS releases
  88.         [ $sR -gt $oR ] && update=1
  89.         [ $sR -eq $oR -a $sL -gt $oL ] && update=1
  90.         [ $sR -eq $oR -a $sL -eq $oL -a $sB -gt $oB ] && update=1
  91.         [ $sR -eq $oR -a $sL -eq $oL -a $sB -eq $oB -a $sS -gt $oS ] && update=1
  92.     fi
  93.  
  94.     if [ "$action" = "test" ]; then
  95.  
  96.         # return a value based on what we found out about the
  97.         # file's comparative SCCS versions
  98.         if [ $update -eq 1 ]; then
  99.             return $SUCCESS
  100.         else
  101.             return $FAIL
  102.         fi
  103.  
  104.     else
  105.  
  106.         # if updating then copy over the file and update our packaging
  107.         # to reflect the fact that we now (jointly?) own this item
  108.         if [ $update -eq 1 ]; then
  109.  
  110.             # copy the file, and update packaging; note that we
  111.             # make it volatile so that pkgchk won't complain if
  112.             # someone else installs a newer version later
  113.             cp $shipped_file $original_file
  114.             chmod $mode $original_file
  115.             chown $owner:$group $original_file
  116.             installf $pkginst $original_file v $mode $owner $group
  117.  
  118.             # return file updated status
  119.             return $SUCCESS
  120.         else
  121.  
  122.             # adopt joint ownership of the file that's there
  123.             # so that it isn't removed while we remain installed
  124.             chmod $mode $original_file
  125.             chown $owner:$group $original_file
  126.             installf $pkginst $original_file v $mode $owner $group
  127.  
  128.             # return no change status
  129.             return $FAIL
  130.         fi
  131.     fi
  132.  
  133.     # don't forget to run installf -f and removef -f before your
  134.     # installation script exits
  135.  
  136.     echo "$ME: internal error - replace_with_newer: no valid end condition" >&2
  137.     return $FAIL
  138. }
  139.  
  140.  
  141.  
  142.  
  143. #############################################################################
  144. #
  145. # start_servers
  146. #
  147. # start and enable the admin server, as a default
  148. #
  149. #############################################################################
  150. start_servers()
  151. {
  152.     if [ -x /usr/sbin/nsadmin ]; then
  153.         /usr/sbin/nsadmin enable
  154.     fi
  155. }
  156.  
  157.  
  158. #############################################################################
  159. #
  160. # HOST_set
  161. #         fixup the NODE name in any configuration files
  162. #
  163. #############################################################################
  164. HOST_set()
  165. {
  166.   if [ -f /etc/inst/scripts/postreboot.sh ]
  167.   then
  168.     HOST=`grep TCP_DOMAIN_NAME /isl/ifile`
  169.     HOSTNAME=`uname -n`.`echo $HOST | sed -e "s/^.*=\"\(.*\)\"$/\1/p"`
  170.   else
  171.     HOSTPROG=/usr/ucb/hostname
  172.     if [ -x $HOSTPROG ] 
  173.     then
  174.       HOSTNAME=`$HOSTPROG`
  175.     else
  176.       HOSTNAME=localhost
  177.     fi
  178.   fi
  179.   [ "$HOSTNAME" ] || HOSTNAME=localhost
  180.   HOST_FILES="/usr/ns-home/admserv/ns-admin.conf"
  181.   for i in $HOST_FILES
  182.   do
  183.   [ -f $i ] && {
  184.     sed -e "s/XXHOSTXX/$HOSTNAME/g" < $i > /tmp/_ccs$$
  185.     mv /tmp/_ccs$$ $i
  186.     rm -f /tmp/_ccs$$ /tmp/_ccs_ip$$ 2>/dev/null
  187.     chown root:sys $i
  188.     installf $PKGINST $i v 755 root sys
  189.   }
  190.   done
  191. }
  192.  
  193.  
  194. #############################################################################
  195. #
  196. # IP_set
  197. #         fixup the IP address in any configuration files
  198. #
  199. #############################################################################
  200. IP_set()
  201. {
  202.   if [ -f /etc/inst/scripts/postreboot.sh ]
  203.   then
  204.     IFIP=`grep TCP_IPADDR /isl/ifile`
  205.     IP=`echo $IFIP | sed -e "s/^.*=\"\(.*\)\"$/\1/p"`
  206.   else
  207.     if [ -c /dev/inet/ip ]
  208.     then
  209.      netstat -in | grep -v atl0 | grep -v lo0 | grep -v Network > /tmp/_ccs_ip$$
  210.      NUMIPS=`cat /tmp/_ccs_ip$$ | wc -l`
  211.      if [ $NUMIPS = 1 ]
  212.      then
  213.         IP=`cat /tmp/_ccs_ip$$ | awk '{print $4}'`
  214.      else
  215.         IPLIST=`cat /tmp/_ccs_ip$$ | awk '{print $4}'`
  216.         FIRST=1
  217.         for i in $IPLIST
  218.         do
  219.             [ "$FIRST" ] && {
  220.                 IP=$i
  221.                 FIRST=
  222.             }
  223.         done
  224.      fi
  225.     fi
  226.   fi
  227.   [ "$IP" ] || IP=127.0.0.1
  228.   IP_FILES="/usr/ns-home/admserv/ns-admin.conf"
  229.   for i in $IP_FILES
  230.   do
  231.   [ -f $i ] && {
  232.     sed -e "s/XXIPADDRXX/$IP/g" < $i > /tmp/_ccs$$
  233.     mv /tmp/_ccs$$ $i
  234.     rm -f /tmp/_ccs$$ /tmp/_ccs_ip$$ 2>/dev/null
  235.     chown root:sys $i
  236.     installf $PKGINST $i v 755 root sys
  237.   }
  238.   done
  239. }
  240.  
  241.  
  242. #############################################################################
  243. #
  244. # admin_config()
  245. #
  246. # run script to configure admin server
  247. #
  248. #############################################################################
  249. admin_config()
  250. {
  251.     # update the admin password with the root password
  252.     grep "^root:" /etc/shadow | awk -F":" '{print $1 FS $2}' > /tmp/ftc_$$
  253.     sed -e "s/root:/admin:/" /tmp/ftc_$$ > /tmp/ftc_$$.sed
  254.     cp /usr/ns-home/admserv/admpw /usr/ns-home/admserv/admpw.org
  255.     > /usr/ns-home/admserv/admpw
  256.     if [ -f /tmp/ftc_$$.sed ]; then
  257.         cat /tmp/ftc_$$.sed >> /usr/ns-home/admserv/admpw 
  258.     else
  259.         echo "$ME: unable to update administrative password" >&2
  260.         > /usr/ns-home/admserv/admpw
  261.         cat /usr/ns-home/admserv/admpw.org > /usr/ns-home/admserv/admpw
  262.         rm /tmp/ftc_$$*
  263.         exit $FAIL
  264.     fi
  265.     rm /tmp/ftc_$$*
  266.     rm /usr/ns-home/admserv/admpw.org
  267.     installf $PKGINST /usr/ns-home/admserv/admpw v 755 root other
  268.  
  269.     # create blank log files and add them to the package data
  270.     # so that removal deletes them
  271.     LOG_FILES="/usr/ns-home/admserv/access \
  272.            /usr/ns-home/admserv/errors \
  273.            /usr/ns-home/admserv/cron.error"
  274.     for i in $LOG_FILES; do
  275.         >$i; chmod 0755 $i; chown root:sys $i
  276.         installf $PKGINST $i v 755 root sys
  277.     done
  278.  
  279.     # add an entry to the admin server's list of managed server types
  280.     # and make our package (joint-)owner of the file (volatile)
  281.     [ -f /usr/ns-home/admserv/servers.lst ] || \
  282.             >/usr/ns-home/admserv/servers.lst
  283.     grep -q "^admserv:" /usr/ns-home/admserv/servers.lst
  284.     if [ $? -ne 0 ]; then
  285.         echo "admserv:Netscape Administration Server" \
  286.             >>/usr/ns-home/admserv/servers.lst
  287.     fi
  288.     chmod 644 /usr/ns-home/admserv/servers.lst
  289.     chown root:sys /usr/ns-home/admserv/servers.lst
  290.     installf $PKGINST /usr/ns-home/admserv/servers.lst v 644 root sys
  291. }
  292.  
  293.  
  294. #############################################################################
  295. #
  296. # main
  297. #
  298. #############################################################################
  299.  
  300. # edit configuration files
  301. HOST_set
  302. IP_set
  303. admin_config
  304.  
  305. # register Netscape Admin Server with scoadmin
  306. /usr/bin/scoadmin -f -c /usr/lib/scoadmin/desktop/adminsvr.obj
  307.  
  308. # update file links for US/International versions
  309. if [ -f "$INSTALL_DIR/exportpaths.sh" ]; then
  310.  
  311.     # determine the right location for messages - try /etc/inst/locale
  312.     # first, and if no messages there then use ones in the installation
  313.     # set - try for local ones first, then fall back on C
  314.     LOCALE="${LC_ALL:-${LC_MESSAGES:-${LANG:-C}}}"
  315.     MENU_DIR="/etc/inst/locale/$LOCALE/menus/$PKGINST"
  316.     if [ ! -f $MENU_DIR/exportpaths.msgs ]; then
  317.         if [ ! -d $INSTALL_DIR/$LOCALE ]; then
  318.             LOCALE="C"
  319.         fi
  320.         MENU_DIR=$INSTALL_DIR/$LOCALE
  321.     fi
  322.  
  323.     sh $INSTALL_DIR/exportpaths.sh $PKGINST $INSTALL_DIR/links.fl \
  324.             $INSTALL_DIR/l_info $MENU_DIR
  325.     if [ $? -ne 0 ]; then
  326.         echo "$ME: exportpaths.sh script failed" >&2
  327.         exit $FAIL
  328.     fi
  329. else
  330.     echo "$ME: unable to find $INSTALL_DIR/exportpaths.sh" >&2
  331.     exit $FAIL
  332. fi
  333.  
  334. # install our encrypt_config if it is newer
  335. if [ -f $INSTALL_DIR/encrypt_config ]; then
  336.     replace_with_newer $PKGINST update /usr/sbin/encrypt_config \
  337.             $INSTALL_DIR/encrypt_config 700 root sys
  338.     ln -f /usr/sbin/encrypt_config /etc/encrypt_config
  339.     installf $PKGINST /etc/encrypt_config=/usr/sbin/encrypt_config
  340. fi
  341.  
  342. # no more files to add or remove
  343. removef -f $PKGINST
  344. installf -f $PKGINST
  345.  
  346. # finally, consider enabling and starting the admin server
  347. if [ -f $ISL_FILE ]; then
  348.     if [ "$ENABLE_IN_POSTINSTALL" = "YES" ]; then
  349.         ln /etc/init.d/nsadmin /etc/rc2.d/S91nsadmin 2>/dev/null
  350.     fi
  351. else
  352.     if [ "$ENABLE_IN_POSTINSTALL" = "YES" ]; then
  353.         start_servers
  354.     fi
  355. fi
  356.  
  357. # done
  358. exit $SUCCESS
  359.