home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 July & August / Pcwk78a98.iso / Wtestowe / Clico / UNIX / SAMBA / SMB_SCO3.Z / SMB_SCO3 / install < prev    next >
Text File  |  1997-08-27  |  9KB  |  481 lines

  1. #!/bin/sh
  2. #
  3. # SAMBA SMB Server Installation Script
  4. #
  5. # %Z% %M%; Version %I%; Created %E% %U%
  6. # ------------------------------------------------------------------------
  7. # Copyright (C) JSB Computer Systems Ltd, 1997.
  8. #
  9. # This module contains proprietary information of JSB Computer Systems Ltd,
  10. # and should be treated as Confidential.
  11.  
  12. ##
  13. #  Common Environment Variables.
  14. ##
  15.  
  16. HOMEDIR=`pwd`
  17. LOCALDIR=/usr/local
  18. DEFAULTCENTRAL=$LOCALDIR/samba ## the default central directory 
  19. CENTRAL=$DEFAULTCENTRAL    ## the default central directory for install
  20. DEFAULTCONFILE=$CENTRAL/lib/smb.conf
  21. BINDIR=/usr/bin
  22. CONFILE=$DEFAULTCONFILE
  23. SLIST=server.list
  24. WORKGROUP=WORKGROUP
  25.  
  26. if [ -x /usr/5bin/echo ]
  27. then
  28.     ECHO=/usr/5bin/echo
  29. else
  30.     ECHO=echo
  31. fi
  32.  
  33. PAGER=${PAGER:-more}
  34. README=README
  35.  
  36. ## make sure permissions in the central directory are OK
  37. CHECK_PERMS=TRUE
  38.  
  39.  
  40. ##
  41. ## Internationalisation begins here
  42. ##
  43. #  Error Messages.
  44. ##
  45. ERR01="    Could not find "
  46. ERR02="failed with following error :"
  47. ERR03="aborted\n"
  48. ERR05="    Could not create directory "
  49. ERR06="    Could not change permissions on directory "
  50. ERR07="    You are installing from the wrong directory - check installation notes"
  51. ERR08="    Missing file - "
  52. ERR09="    Could not change ownership for  "
  53. ERR10="    Could not change group for  "
  54. ERR11="    Could not copy files "
  55. ERR13="    Serialisation aborted at user request "
  56. ERR14="    Installation aborted at user request "
  57. ERR15="    Could not change permissions for "
  58.  
  59. BRAND03="\nInvalid upgrade path - no action taken."
  60. BRAND05="\nYou must run as root to install / upgrade."
  61.  
  62. ##
  63. #  Prompts
  64. ##
  65. PRM01="\nInstallation of SAMBA SMB Server\n================================\n"
  66. PRM03="\nDo you wish to try again \c"
  67. PRM05="completed successfully."
  68. PRM14="Checking file permissions\c"
  69. PRM15="\nInstallation"
  70. PRM17="\nThere is a readme file containing notes specific to this release.\nDo you wish to read it now \c"
  71. PRM18="\nMoving files into place\c"
  72.  
  73.  
  74. CHKYN00=Y
  75. CHKYN01=y
  76. CHKYN02=N
  77. CHKYN03=n
  78. CHKYN04=Q
  79. CHKYN05=q
  80. CHKYN06="(y/n)? \c"
  81. ##
  82. ## Internationalisation ends here
  83. ##
  84.  
  85. ##
  86. #  UNIX Tools List
  87. ##
  88. TOOLSLIST="/bin/cat /bin/chmod /bin/mkdir /bin/mv /bin/pwd /bin/rm \
  89.            /usr/bin/cut /bin/find /bin/cp /bin/cpio /bin/sed /bin/grep"
  90.  
  91. ##
  92. #  infail() - report error and exit
  93. ##
  94.  
  95. infail()
  96. {
  97.     $ECHO "\n\n$PRM15 $ERR02\n"
  98.     $ECHO $1 $2
  99.     $ECHO "$PRM15 $ERR03"
  100.  
  101.     exit 1
  102. }
  103.  
  104.  
  105. ##
  106. #  set_conf()
  107. ##
  108.  
  109. set_conf()
  110. {
  111. # $1 - file to convert
  112. # $2 - value of JSB_WORKGROUP to replace
  113.  
  114.     DIR=`echo $2 | sed 's/\//\\\\\//g'`
  115.  
  116.     cat $1 | sed '{
  117.     s/JSB_WORKGROUP/'$DIR'/g
  118.     }'
  119. }
  120.  
  121. ##
  122. # isserver() - check is samba server running
  123. ##
  124.  
  125. isserver()
  126. {
  127.     ps -ef | grep smbd | grep -v grep >/dev/null 2>&1
  128.  
  129.     if [ $? -eq 0 ]
  130.     then
  131.     infail "Cannot install while SAMBA Server running"
  132.     fi 
  133. }
  134.  
  135. ##
  136. #  CopyFiles() - copy files from temp dir to installation dir
  137. ##
  138. CopyFiles()
  139. {
  140.  
  141.     $ECHO "\nCopying files to $CENTRAL \c"
  142.  
  143.     if [ ! -d $LOCALDIR ]
  144.     then
  145.     mkdir $LOCALDIR 2> /dev/null
  146.     fi
  147.  
  148.     if [ ! -d $LOCALDIR/man ]
  149.     then
  150.     mkdir $LOCALDIR/man 2> /dev/null
  151.     chmod 755  $LOCALDIR/man
  152.     fi
  153.  
  154.     mkdir $CENTRAL 2> /dev/null
  155.  
  156.     mkdir $CENTRAL/bin 2> /dev/null
  157.     mkdir $CENTRAL/var 2> /dev/null
  158.     mkdir $CENTRAL/var/locks 2> /dev/null
  159.     mkdir $CENTRAL/lib 2> /dev/null
  160.     mkdir $CENTRAL/docs 2> /dev/null
  161.  
  162.     cp $HOMEDIR/server.list $CENTRAL
  163.     cp $HOMEDIR/COPYING $CENTRAL
  164.     cp $HOMEDIR/README $CENTRAL
  165.  
  166.     cd $HOMEDIR/bin
  167.     find . -print | cpio -pdu $CENTRAL/bin 2> /dev/null || infail "$ERR11"
  168.  
  169.     cd $HOMEDIR/docs
  170.     cp * $CENTRAL/docs 
  171.  
  172.     if [ $UpGradeProduct = FALSE ]
  173.     then
  174.     ############# fresh install ##########
  175.  
  176.     set_conf $HOMEDIR/lib/smb.conf $WORKGROUP > $CONFILE
  177.     fi
  178.  
  179. }
  180.  
  181.  
  182. ##
  183. #  MoveBin() - move files into place
  184. ##
  185. MoveBin()
  186. {
  187.     $ECHO "\n$PRM18 \c"
  188.  
  189.     $ECHO ".\c"
  190.     mv -f $CENTRAL/bin/startsmb $BINDIR || infail "$ERR11"
  191.  
  192.     $ECHO ".\c"
  193.     chmod 555 $BINDIR/startsmb || infail "$ERR15" $SERVBIN
  194.  
  195.     $ECHO ".\c"
  196.     chown root $BINDIR/startsmb || infail "$ERR15" $SERVBIN
  197.  
  198.     $ECHO ".\c"
  199.     chgrp 1 $BINDIR/startsmb || infail "$ERR15" $SERVBIN
  200.  
  201.     cd $HOMEDIR
  202. }
  203.  
  204.  
  205. ##
  206. #  chkyn() - Get yes or no answer
  207. ##
  208. chkyn()
  209. {
  210.    while :
  211.    do
  212.       $ECHO $CHKYN06
  213.       read reply 
  214.  
  215.       case $reply in
  216.     $CHKYN00*|$CHKYN01*)    return 0    ;;
  217.     $CHKYN02*|$CHKYN03*)    return 1    ;;
  218.       esac
  219.    done
  220. }
  221.  
  222.  
  223. ##
  224. #  start_up() - Start Up message 
  225. ##
  226. start_up()
  227. {
  228.    $ECHO $PRM01
  229.  
  230.    DIRNAME=`dirname $0`
  231.  
  232.    if [ $DIRNAME != "." ]
  233.    then
  234.        infail "$ERR07"
  235.    fi
  236.  
  237.    UpGradeProduct=FALSE
  238.  
  239.    if [ -f "$CENTRAL/bin/smbd" ]
  240.    then
  241.        # see if server running before installing
  242.        isserver 
  243.  
  244.        while [ TRUE ]
  245.        do
  246.        echo "\nInstall has detected a previous installation in $CENTRAL"
  247.            echo "\n\nChoose one of the following options;"
  248.        echo "\n1. Upgrade the existing installation"
  249.            echo "2. Create a new installation"
  250.            echo "3. Quit"
  251.  
  252.        echo "\nSelect 1,2,3 or enter for default <1> ? \c"
  253.  
  254.        read REP
  255.  
  256.            if [ "$REP" = "3" ]
  257.            then
  258.                infail "$ERR13"
  259.            fi
  260.  
  261.        if [ "$REP" = "2" ]
  262.        then
  263.                CENTRAL=$DEFAULTCENTRAL 
  264.                CONFILE=$DEFAULTCONFILE
  265.            break
  266.        else
  267.            if [ "$REP" = "" -o "$REP" = "1" ]
  268.            then
  269.  
  270.            UpGradeProduct=TRUE
  271.            return
  272.            fi
  273.        fi
  274.        done
  275.    fi
  276.  
  277.    if [ $UpGradeProduct = FALSE ]
  278.    then
  279.        echo "\nEnter the workgroup for the server to use (default is $WORKGROUP) ? \c"
  280.        REP=
  281.        read REP
  282.  
  283.        if [ ! -z "$REP" ]
  284.        then
  285.            WORKGROUP=$REP
  286.        fi
  287.    fi
  288. }
  289.  
  290.  
  291. ##
  292. #  unix_tools() - Ensure UNIX utilities are available.
  293. ##
  294. unix_tools()
  295. {
  296.     for tool in `$ECHO $TOOLSLIST`
  297.     do
  298.     [ -x $tool ] || infail "$ERR01" $tool
  299.     done
  300. }
  301.  
  302.  
  303. ##
  304. #  SuCheck() - returns 0 if running root ( Super-user )
  305. #                              1 if not
  306. ##
  307. SuCheck()
  308. {
  309.    cd /tmp
  310.    TMP=smb.$$
  311.    cat /dev/null > $TMP
  312.    FIND=`find . -user 0 -name $TMP -print 2>/dev/null`
  313.    rm -f $TMP
  314.    if [ "$FIND" != ./$TMP ]
  315.    then
  316.       infail "$BRAND05"
  317.    fi
  318.    cd $HOMEDIR
  319. }
  320.  
  321.  
  322.  
  323. ##
  324. #  checkpermissions() - Ensure file permissions and ownerships
  325. #  file is read in on standard input  and each line is set 
  326. #  into the environment where 
  327. #  $1 is the owner 
  328. #  $2 is the group 
  329. #  $3 is the permissions 
  330. #  $4 is the filename 
  331. ##
  332. checkpermissions()
  333. {
  334.    cd $CENTRAL
  335.    list=`line`
  336.    while [ -n "$list" ]
  337.    do
  338.       $ECHO ".\c"
  339.       set `$ECHO "$list`
  340.       FirstChar=`$ECHO $1 | cut -c1 `
  341.       if [ $FirstChar != "#" ]   ## its a comment
  342.       then
  343.          if [ -f "$4" -o -d "$4" ]
  344.          then
  345.             chmod $3 $4 || $ECHO $PRM13 $ERR15 $4
  346.             chown $1 $4 || $ECHO $PRM13 $ERR09 $4
  347.             chgrp $2 $4 || $ECHO $PRM13 $ERR10 $4
  348.          else
  349.             $ECHO "\n$PRM13 $ERR08 $4"
  350.          fi
  351.       fi
  352.       list=`line`
  353.    done
  354. }
  355.  
  356.  
  357. ##
  358. #  do_links() - set file permissions 
  359. ##
  360. do_links()
  361. {
  362.     $ECHO ".\n"
  363.  
  364.     chmod 755 $CENTRAL
  365.     chown root $CENTRAL
  366.     chgrp 1 $CENTRAL
  367.  
  368.     if [ $CHECK_PERMS  = TRUE ]
  369.     then
  370.  
  371.     $ECHO "$PRM14 \c"
  372.  
  373.  
  374.     if [ -f $CENTRAL/$SLIST ]
  375.     then
  376.       cat $CENTRAL/$SLIST | checkpermissions 
  377.       rm -f $CENTRAL/$SLIST
  378.     fi
  379.  
  380.     fi
  381. }
  382.  
  383.  
  384. ##
  385. #  page_readme() - page the readme file if requested by user
  386. ##
  387. page_readme()
  388. {
  389.   if [ -s $CENTRAL/$README ]
  390.   then
  391.      chmod 444 $CENTRAL/$README
  392.      $ECHO
  393.      $ECHO "$PRM17"   ## do yo want to see the readme file
  394.      chkyn            ## y/n
  395.      if [ $? -eq 0 ]
  396.      then
  397.        cat $CENTRAL/README | $PAGER  ## page the readme file
  398.      fi
  399.   fi
  400.  
  401. }
  402.  
  403.  
  404. ##
  405. #  main()
  406. ##
  407.  
  408. ##
  409. #  Catch any efforts to abort
  410. ##
  411. trap 'infail "$ERR14"' 1 2 4 9 15
  412.  
  413.  
  414. SCRIPTNAME=`basename $0` 
  415.  
  416.  
  417. ## 
  418. #  initialisation messages
  419. ##
  420. start_up
  421.  
  422. ##
  423. #   check you're Super-User
  424. ##
  425. SuCheck 
  426.  
  427. ## 
  428. #  check that we have all the required utilities
  429. ## 
  430. unix_tools
  431.  
  432.  
  433. ##
  434. # copy files from temp dir into installation dir
  435. ##
  436. CopyFiles
  437.  
  438. ##
  439. # move binaries etc into path
  440. ##
  441. MoveBin
  442.  
  443. ##
  444. #  check permissions of files
  445. ##
  446. do_links
  447.  
  448.  
  449. ##
  450. # install man pages
  451. #
  452. $ECHO
  453. $ECHO
  454. $CENTRAL/bin/installman.sh $LOCALDIR/man $CENTRAL/docs
  455.  
  456. ##
  457. # show readme
  458. #
  459. page_readme           
  460.  
  461. $ECHO
  462. $ECHO "$PRM15 $PRM05" ## Installation successful
  463.  
  464. if [ `uname` = "HP-UX" ]
  465. then
  466.    echo
  467.    echo "WARNING: Before running the SAMBA SMB Server make sure that the"
  468.    echo "         server guest account directive is set to a valid"
  469.    echo "         account on this system in the file $CONFILE"
  470.    echo "         or create a nobody account."
  471.    echo
  472.    echo "         Failure to do so will compromise the security of the"
  473.    echo "         server.\n"
  474. fi
  475.  
  476. echo "\nTo start the SAMBA SMB Server type startsmb at the command prompt"
  477.  
  478. $ECHO
  479.  
  480. exit 0
  481.