home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / usr / etc / builddisk < prev    next >
Encoding:
Text File  |  1992-07-23  |  16.9 KB  |  773 lines

  1. #! /bin/csh -f
  2. #PROGRAM:builddisk  PROJECT:builddisk-35.0.1  DEVELOPER:mgillon  BUILT:Thu Jul 23 14:24:15 PDT 1992
  3. set path=( /usr/etc /bin /usr/bin /usr/ucb /etc $path )
  4. set prog=$0
  5. set hostname=`hostname`
  6. set scriptdir=/etc
  7. set exitstatus=0
  8. set mounted=()
  9. set mountlist=()
  10. while ( $#argv > 0 )
  11.     switch ( $argv[1] )
  12.     case -x:
  13.         set nofscks
  14.         shift
  15.         breaksw
  16.     case -n:
  17.         set noinit
  18.         shift
  19.         breaksw
  20.     case -q:
  21.         set noquestions
  22.         shift
  23.         breaksCFase -S:
  24.         set standalone
  25.         shift
  26.         breaksw
  27.     case -h:
  28.         if ( $#argv < 2 ) then
  29.             echo ${prog:t}: -h requires hostname
  30.             exit(1)
  31.         endif
  32.         set hostname=$argv[2]
  33.         shift; shift
  34.         breaksw
  35.     case -l:
  36.         if ( $#argv < 2 ) then
  37.             echo ${prog:t}: -l requires disklabel
  38.             exit(1)
  39.         endif
  40.         set label="$argv[2]"
  41.         shift; shift
  42.         breaksw
  43.     case -t:
  44.         if ( $#argv < 2 ) then
  45.             echo ${prog:t}: -t requires disktab type
  46.             exit(1)
  47.         endif
  48.         set dtype=$argv[2]
  49.         shift; shift
  50.         breaksw
  51.     case -p:
  52.         if ( $#argv < 2 ) then
  53.             echo ${prog:t}: -p requires a root partition size, in blocks
  54.             exit(1)
  55.         endif
  56.         set rootpsize=$argv[2]
  57.         shift; shift
  58.         breaksw
  59.     case -s:
  60.         if ( $#argv < 2 ) then
  61.             echo ${prog:t}: -s requires builddisk script name
  62.             exit(1)
  63.         endif
  64.         set script=$argv[2]
  65.         shift; shift
  66.         breaksw
  67.     case -*:
  68.         echo ${prog:t}: Unknown option: $argv[1]
  69.         exit(1)
  70.     default:
  71.         break
  72.     endsw
  73. end
  74. set noglob
  75. umask 022
  76. if ( `whoami` != "root" ) then
  77.     echo You must be root to run ${prog:t}
  78.     exit(1)
  79. endif
  80. if ( $#argv != 1 ) then
  81.     echo Usage: ${prog:t} [-n] [-q] [-h HOSTNAME] [-l LABEL] [-t DISKTYPE] [-s SCRIPT] DEV
  82.     exit(1)
  83. endif
  84. switch ( $argv[1] )
  85. case od[01]:
  86.     set type=od
  87.     breaksw
  88. case sd[01234567]:
  89.     set type=sd
  90.     breaksw
  91. case fd[0123456789]:
  92.     set type=fd
  93.     breaksw
  94. default:
  95.     echo ${prog:t}: Device must be of form \"od0\", \"sd0\", etc
  96.     exit(1)
  97. endsw
  98. set dev="/dev/$argv[1]"
  99. set rdev = "/dev/r"$argv[1]
  100. switch ( $type )
  101. case 'sd':
  102.     set mb=( `scsimodes -C ${rdev}a` )
  103.     if ( $status ) then
  104.         echo ${prog:t}: Can\'t determine SCSI capacity
  105.         set fstab=sd330
  106.     else if ( $?rootpsize ) then
  107.         set fstab=sd660
  108.         set dscript=sd660
  109.     else if ( $mb > 500 ) then
  110.         if ( $?standalone ) then
  111.             set fstab=sd660.1
  112.         else
  113.             set fstab=sd660
  114.         endif
  115.         set dscript=sd660
  116.     else if ( $mb > 75 ) then
  117.         set fstab=sd330
  118.         set dscript=sd330
  119.     else
  120.         set fstab=sd330
  121.         set dscript=swapdisk
  122.         set label=swapdisk
  123.     endif
  124.     
  125.     echo \#
  126.     echo \# Building a $mb MB hard disk drive.
  127.     echo \#
  128.     
  129.     breaksw
  130. case 'od':
  131.     set fstab=od
  132.     set dscript=od
  133.     breaksw
  134. case 'fd':
  135.     set fstab=fd
  136.     set dscript=fd
  137.     breaksw
  138. endsw
  139. if ( ! $?script ) then
  140.     if ( $?dscript ) then
  141.         set script=$dscript
  142.     else
  143.         echo ${prog:t}: Use -s SCRIPT option to specify script
  144.         echo Known scripts are:
  145.         unset noglob
  146.         ls $scriptdir/BLD.* | sed -e 's/.*\/BLD\.//'
  147.         exit(1)
  148.     endif
  149. endif
  150. if ( ! $?label ) then
  151.     set labeCGyDisk"
  152. endif
  153. if ( -e BLD.$script ) then
  154.     set desc=BLD.$script
  155. else if ( -e $scriptdir/BLD.$script ) then
  156.     set desc=$scriptdir/BLD.$script
  157. else
  158.     echo ${prog:t}: can\'t find builddisk script BLD.$script
  159.     echo Known scripts are:
  160.     unset noglob
  161.     ls $scriptdir/BLD.* | sed -e 's/.*\/BLD\.//'
  162.     exit(1)
  163. endif
  164. set mtab=( `mount | grep ^${dev}` )
  165. if ( $#mtab > 0 ) then
  166.     /usr/etc/wumount ${dev}a
  167. endif
  168. set mtab=( `mount | grep ^${dev}` )
  169. if ( $#mtab > 0 ) then
  170.     mount | grep ^${dev}
  171.     echo ${dev} is busy.  Try logging out and logging back in. 
  172.     exit(1)
  173. endif
  174. set mtab=( `mount | grep '/mnt[abc]' ` )
  175. if ( $#mtab > 0 ) then
  176.     mount | grep '/mnt[abc]'
  177.     echo ${prog:t}: /mnta, /mntb, or /mntc is in use
  178.     echo ${prog:t} must use these mount points
  179.     exit(1)
  180. endif
  181. if ( ! $?noinit ) then
  182.     if ( ! $?noquestions ) then
  183.         echo -n "builddisk destroys previous contents of $dev, ok? "
  184.         set rsp=$<
  185.         if ( $rsp !~ [yY]* ) then
  186.             echo ${prog:t} aborted
  187.             exit(1)
  188.         endif
  189.     endif
  190. else
  191.     if ( ! $?noquestions ) then
  192.         echo -n "builddisk overwrites contents of $dev, ok? "
  193.         set rsp=$<
  194.         if ( $rsp !~ [yY]* ) then
  195.             echo ${prog:t} aborted
  196.             exit(1)
  197.         endif
  198.     endif
  199.     set initialized
  200. endif
  201.  
  202.  
  203. set totalsize = 0
  204. set od_capacity = 233066
  205.  
  206. onintr abort
  207. @ line = 1
  208. while (1)
  209.     set cmdline = ( `sed -n -e ${line}p $desc` )
  210.     if ( $#cmdline < 1 ) goto done
  211.     if ( "$cmdline[1]" =~ \#* ) then
  212.         echo $cmdline
  213.         goto nextline
  214.     endif
  215.     if ( $#cmdline < 2 ) then
  216.         echo ${prog:t}: Bad command line \"$cmdline\"
  217.         goto abort
  218.     endif
  219.     set cmd = $cmdline[1]
  220.     set part = $cmdline[2]
  221.     if ( $cmd != newdisk && $?initialized == 0 ) then
  222.         if ( $?rootpsize ) then
  223.             disk -i -p $rootpsize -h $hostname -l "$label" ${rdev}a
  224.             if ( $status != 0 ) then
  225.                 echo ${prog:t}: Disk initialization failed
  226.                 goto abort
  227.             endif
  228.         else if ( $?dtype ) then
  229.             disk -i -t $dtype -h $hostname -l "$label" ${rdev}a
  230.             if ( $status != 0 ) then
  231.                 echo ${prog:t}: Disk initialization failed
  232.                 goto abort
  233.             endif
  234.         else
  235.             disk -i -h $hostname -l "$label" ${rdev}a
  236.             if ( $status != 0 ) then
  237.                 echo ${prog:t}: Disk initialization failed
  238.                 goto abort
  239.             endif
  240.         endif
  241.         set initialized
  242.     endif
  243.     if ( $cmd != mount && $cmd != newdisk && "$mounted" !~ *\:$part\:* ) then
  244.         if ( ! $?nofscks && ! { fsck ${rdev}$part } ) then
  245.             echo ${prog:t}: fsck of ${rdev}$part failed
  246.             goto abort
  247.         endif
  248.         umount /mnt$paCH& /dev/null
  249.         if ( ! { mount ${dev}$part /mnt$part } ) then
  250.             echo ${prog:t}: mount ${dev}$part /mnt$part failed
  251.             goto abort
  252.         endif
  253.         set mounted=($mounted \:$part\: )
  254.         set mountlist=($mountlist $part)
  255.     endif
  256.     echo Doing: $cmdline
  257.     switch ( $cmd )
  258.     case "size":
  259.         if ( $#cmdline != 3 ) then
  260.             echo ${prog:t}: Bad command \"$cmdline\"
  261.             goto abort
  262.         endif
  263.         set sizedir = $cmdline[3]
  264.             if( -e $sizedir ) then
  265.             set dirsize = ( `du -s $sizedir | awk '{ print $1 }'` )
  266.             @ totalsize = $totalsize + $dirsize
  267.             echo Size of $sizedir is $dirsize KB.
  268.         else
  269.             echo Cannot find directory to size
  270.         endif
  271.         breaksw
  272.     case "addsize":
  273.         if ( $#cmdline != 3 ) then
  274.             echo ${prog:t}: Bad command \"$cmdline\"
  275.             goto abort
  276.         endif
  277.         set addsize = $cmdline[3]
  278.         @ totalsize = $totalsize + $addsize
  279.         endif
  280.         breaksw
  281.     case "fit":
  282.         echo The source directories contain a total of $totalsize KB.
  283.         switch ( $type )
  284.         case 'sd':
  285.             set destination_size = ( `/usr/etc/scsimodes -C ${rdev}a` )
  286.             @ destination_size = $destination_size * 1024
  287.             if ( $totalsize > $destination_size ) then
  288.             echo The destination filesystem has a maximum capacity of $destination_size KB.
  289.             echo The source directories will NOT fit on the destination file system.
  290.             echo Builddisk failed.
  291.             exit(1)
  292.             endif
  293.             breaksw
  294.         case 'od':
  295.             if ( $totalsize > $od_capacity ) then
  296.             echo The destination filesystem has a maximum capacity of $od_capacity KB.
  297.             echo The source directories will NOT fit on the destination file system.
  298.             echo Builddisk failed.
  299.             exit(1)
  300.             endif
  301.             breaksw
  302.         endsw
  303.         echo The source directories will fit on the destination file system.
  304.         echo
  305.         breaksw
  306.     case "load":
  307.         if ( $#cmdline < 3 || $#cmdline > 4 ) then
  308.             echo ${prog:t}: Bad command \"$cmdline\"
  309.             goto abort
  310.         endif
  311.         set local = $cmdline[3]
  312.         if ( -e $local ) then
  313.             if ( $#cmdline == 4 ) then
  314.                 set target = $cmdline[4]
  315.             else
  316.                 set target = $local
  317.             endif
  318.             mkdirs /mnt$part/$target
  319.             (cd $local; tar cf - .)|(cd /mnt$part/$target; tar xfpB - )
  320.             if ( $status != 0 ) then
  321.                 echo ${prog:t}: load of $target from $local failed
  322.                 set exitstatus=1
  323.             endif
  324.         endif
  325.         breaksw
  326.     case "cload":
  327.         if ( $#cmdline < 3 || $#cmdline > 4 ) then
  328.             echo ${prog:t}: Bad command \"$cmdline\"
  329.             goto abort
  330.         endif
  331.         set lCI = $cmdline[3]
  332.         if ( $#cmdline == 4 ) then
  333.             set target = $cmdline[4]
  334.         else
  335.             set target = $local
  336.         endif
  337.         if ( -d $local ) then
  338.             mkdirs /mnt$part/$target
  339.             (cd $local; tar cf - .)|(cd /mnt$part/$target; tar xfpB - )
  340.             if ( $status != 0 ) then
  341.                 echo ${prog:t}: load of $target from $local failed
  342.                 set exitstatus=1
  343.             endif
  344.         endif
  345.         breaksw
  346.     case "symlink":
  347.         if ( $#cmdline != 4 ) then
  348.             echo ${prog:t}: Bad command \"$cmdline\"
  349.             goto abort
  350.         endif
  351.         set dest = $cmdline[3]
  352.         set src = $cmdline[4]
  353.         rm -f /mnt$part/$src
  354.         ln -s $dest /mnt$part/$src
  355.         if ( $status != 0 ) then
  356.             echo ${prog:t}: symlink of $src to $dest failed
  357.             set exitstatus=1
  358.         endif
  359.         breaksw
  360.     case "link":
  361.         if ( $#cmdline != 4 ) then
  362.             echo ${prog:t}: Bad command \"$cmdline\"
  363.             goto abort
  364.         endif
  365.         set dest = $cmdline[3]
  366.         set src = $cmdline[4]
  367.         rm -f /mnt$part/$src
  368.         ln /mnt$part/$dest /mnt$part/$src
  369.         if ( $status != 0 ) then
  370.             echo ${prog:t}: link of $src to $dest failed
  371.             set exitstatus=1
  372.         endif
  373.         breaksw
  374.     case "copy":
  375.         if ( $#cmdline < 3 || $#cmdline > 4 ) then
  376.             echo ${prog:t}: Bad command \"$cmdline\"
  377.             goto abort
  378.         endif
  379.         set src = $cmdline[3]
  380.         if ( $#cmdline == 4 ) then
  381.             set dest = $cmdline[4]
  382.         else
  383.             set dest = $src
  384.         endif
  385.         rm -f /mnt$part/$dest
  386.         unset noglob
  387.         if ( ! { cp -p $src /mnt$part/$dest } ) then
  388.             set noglob
  389.             echo ${prog:t}: copy of $src to $dest failed
  390.             set exitstatus=1
  391.         endif
  392.         set noglob
  393.         breaksw
  394.     case "pcopy":
  395.         if ( $#cmdline < 3 || $#cmdline > 4 ) then
  396.             echo ${prog:t}: Bad command \"$cmdline\"
  397.             goto abort
  398.         endif
  399.         set src = $cmdline[3]
  400.         if ( $#cmdline == 4 ) then
  401.             set dest = $cmdline[4]
  402.         else
  403.             set dest = $src
  404.         endif
  405.         rm -f /mnt$part/$dest
  406.         unset noglob
  407.         if ( ! { cp -p $src /mnt$part/$dest } ) then
  408.             set noglob
  409.             echo ${prog:t}: copy of $src to $dest failed
  410.             set exitstatus=1
  411.         endif
  412.         if ( ! { chown `ls -lg $src | awk '{printf "%s.%s\n", $3, $4}'` /mnt$part/$dest } ) then
  413.             set noglob
  414.             echo ${prog:t}: chown of $dest failed
  415.             set exitstatus=1
  416.         endif
  417.         set noglob
  418.         breaksw
  419.     case "ccopy":
  420.         if ( $#cmdline < 3 || $#cmdline > 4 ) then
  421.             echo ${prog:t}: Bad command \"$cmdline\"
  422.             goto abort
  423.         endif
  424.         set src = $cmdline[3]
  425.         if ( $#cmdline == 4 ) then
  426.             set dest = $cmdline[4]
  427.         else
  428.             set dest = $src
  429.         endif
  430.         if ( -f $src ) then
  431.             rm -f /mnt$part/$desCP    unset noglob
  432.             if ( ! { cp -p $src /mnt$part/$dest } ) then
  433.                 set noglob
  434.                 echo ${prog:t}: copy of $src to $dest failed
  435.                 set exitstatus=1
  436.             endif
  437.             set noglob
  438.         endif
  439.         breaksw
  440.     case "move":
  441.         if ( $#cmdline != 4 ) then
  442.             echo ${prog:t}: Bad command \"$cmdline\"
  443.             goto abort
  444.         endif
  445.         set src = $cmdline[3]
  446.         set dest = $cmdline[4]
  447.         rm -f /mnt$part/$dest
  448.         unset noglob
  449.         if ( ! { mv /mnt$part/$src /mnt$part/$dest } ) then
  450.             set noglob
  451.             echo ${prog:t}: move of $src to $dest failed
  452.             set exitstatus=1
  453.         endif
  454.         set noglob
  455.         breaksw
  456.     case "mount":
  457.         if ( $#cmdline != 3 ) then
  458.             echo ${prog:t}: Bad command \"$cmdline\"
  459.             goto abort
  460.         endif
  461.         set src = $cmdline[2]
  462.         set dest = $cmdline[3]
  463.         umount $dest
  464.         if ( ! { mount $src $dest } ) then
  465.             echo ${prog:t}: mount of $src on $dest failed
  466.             goto abort
  467.         endif
  468.         breaksw
  469.     case "mkdirs":
  470.         if ( $#cmdline != 3 ) then
  471.             echo ${prog:t}: Bad command \"$cmdline\"
  472.             goto abort
  473.         endif
  474.         set dirs = $cmdline[3]
  475.         if ( ! { mkdirs /mnt$part/$dirs } ) then
  476.             echo ${prog:t}: mkdirs of $dirs failed
  477.             set exitstatus=1
  478.         endif
  479.         breaksw
  480.     case "rrm":
  481.         if ( $#cmdline != 3 ) then
  482.             echo ${prog:t}: Bad command \"$cmdline\"
  483.             goto abort
  484.         endif
  485.         set dirs = $cmdline[3]
  486.         unset noglob
  487.         if ( ! { rm -rf /mnt$part/$dirs } ) then
  488.             set noglob
  489.             echo ${prog:t}: rm -rf of $dirs failed
  490.             set exitstatus=1
  491.         endif
  492.         set noglob
  493.         breaksw
  494.     case "rm":
  495.         if ( $#cmdline != 3 ) then
  496.             echo ${prog:t}: Bad command \"$cmdline\"
  497.             goto abort
  498.         endif
  499.         set file = $cmdline[3]
  500.         unset noglob
  501.         if ( ! { rm /mnt$part/$file } ) then
  502.             set noglob
  503.             echo ${prog:t}: rm of $file failed
  504.             set exitstatus=1
  505.         endif
  506.         set noglob
  507.         breaksw
  508.     case "strip":
  509.         if ( $#cmdline != 3 ) then
  510.             echo ${prog:t}: Bad command \"$cmdline\"
  511.             goto abort
  512.         endif
  513.         set file = $cmdline[3]
  514.         unset noglob
  515.         strip /mnt$part/$file >& /dev/null
  516.         set noglob
  517.         breaksw
  518.     case "chmod":
  519.         if ( $#cmdline != 4 ) then
  520.             echo ${prog:t}: Bad command \"$cmdline\"
  521.             goto abort
  522.         endif
  523.         set mode = $cmdline[3]
  524.         set file = $cmdline[4]
  525.         unset noglob
  526.         if ( ! { chmod $mode /mnt$part/$file } ) then
  527.             set noglob
  528.             echo ${prog:t}: chmod $mode $file failed
  529.             set exitstatus=1
  530.         endif
  531.         set noglob
  532.         breaksw
  533.     case "chown":
  534.         if ( $#cmdline != 4 ) then
  535.             echo ${prog:t}: Bad command \"$cmdline\"
  536.             goto abort
  537.         endif
  538.         set CQr = $cmdline[3]
  539.         set file = $cmdline[4]
  540.         unset noglob
  541.         if ( ! { chown $owner /mnt$part/$file } ) then
  542.             set noglob
  543.             echo ${prog:t}: chown $owner $file failed
  544.             set exitstatus=1
  545.         endif
  546.         set noglob
  547.         breaksw
  548.     case "chgrp":
  549.         if ( $#cmdline != 4 ) then
  550.             echo ${prog:t}: Bad command \"$cmdline\"
  551.             goto abort
  552.         endif
  553.         set group = $cmdline[3]
  554.         set file = $cmdline[4]
  555.         unset noglob
  556.         if ( ! { chgrp $group /mnt$part/$file } ) then
  557.             set noglob
  558.             echo ${prog:t}: chgrp $group $file failed
  559.             set exitstatus=1
  560.         endif
  561.         set noglob
  562.         breaksw
  563.     case "rchmod":
  564.         if ( $#cmdline != 4 ) then
  565.             echo ${prog:t}: Bad command \"$cmdline\"
  566.             goto abort
  567.         endif
  568.         set mode = $cmdline[3]
  569.         set file = $cmdline[4]
  570.         unset noglob
  571.         if ( ! { chmod -R $mode /mnt$part/$file } ) then
  572.             set noglob
  573.             echo ${prog:t}: chmod -R $mode $file failed
  574.             set exitstatus=1
  575.         endif
  576.         set noglob
  577.         breaksw
  578.     case "rchown":
  579.         if ( $#cmdline != 4 ) then
  580.             echo ${prog:t}: Bad command \"$cmdline\"
  581.             goto abort
  582.         endif
  583.         set owner = $cmdline[3]
  584.         set file = $cmdline[4]
  585.         unset noglob
  586.         if ( ! { chown -R $owner /mnt$part/$file } ) then
  587.             set noglob
  588.             echo ${prog:t}: chown -R $owner $file failed
  589.             set exitstatus=1
  590.         endif
  591.         set noglob
  592.         breaksw
  593.     case "rchgrp":
  594.         if ( $#cmdline != 4 ) then
  595.             echo ${prog:t}: Bad command \"$cmdline\"
  596.             goto abort
  597.         endif
  598.         set group = $cmdline[3]
  599.         set file = $cmdline[4]
  600.         unset noglob
  601.         if ( ! { chgrp -R $group /mnt$part/$file } ) then
  602.             set noglob
  603.             echo ${prog:t}: chgrp -R $group $file failed
  604.             set exitstatus=1
  605.         endif
  606.         set noglob
  607.         breaksw
  608.     case "exec":
  609.         if ( $#cmdline < 4 ) then
  610.             echo ${prog:t}: Bad command \"$cmdline\"
  611.             goto abort
  612.         endif
  613.         set dir = $cmdline[3]
  614.         set command = ( $cmdline[4-] )
  615.         ( cd /mnt$part/$dir; $command )
  616.         if ( $status != 0 ) then
  617.             echo ${prog:t}: $command failed
  618.             set exitstatus=1
  619.         endif
  620.         breaksw
  621.     case "newclient":
  622.         if ( $#cmdline < 3 || $#cmdline > 4) then
  623.             echo ${prog:t}: Bad command \"$cmdline\"
  624.             goto abort
  625.         endif
  626.         set dir = $cmdline[3]
  627.         if ( $#cmdline < 4 ) then
  628.             set opt = "-p"
  629.         else
  630.             set opt = $cmdline[4]
  631.         endif
  632.         ( cd /mnt$part/$dir; ./newclient $opt $fstab /mnta/usr/template/client /mnta/private )
  633.         if ( $status != 0 ) then
  634.             echo ${prog:t}: newclient failed
  635.             set exitstatus=1
  636.         endif
  637.         breaksw
  638.     case "touch":
  639.         if ( $#cmdline != 3 ) then
  640.             CR ${prog:t}: Bad command \"$cmdline\"
  641.             goto abort
  642.         endif
  643.         set file = $cmdline[3]
  644.         if ( ! { touch /mnt$part/$file } ) then
  645.             echo ${prog:t}: touch $file failed
  646.             set exitstatus=1
  647.         endif
  648.         breaksw
  649.     case "remove":
  650.         if ( $#cmdline != 3 ) then
  651.             echo ${prog:t}: Bad command \"$cmdline\"
  652.             goto abort
  653.         endif
  654.         set file=$cmdline[3]
  655.         unset noglob
  656.         if ( ! { rm -f /mnt$part/$file } ) then
  657.             set noglob
  658.             echo ${prog:t}: rm -f $file failed
  659.             set exitstatus=1
  660.         endif
  661.         set noglob
  662.         breaksw
  663.     
  664.     
  665.     case "newdisk":
  666.         if ( $#cmdline != 2 && $#cmdline != 3 ) then
  667.             echo ${prog:t}: Bad command \"$cmdline\"
  668.             goto abort
  669.         endif
  670.  
  671.         
  672.         if ( $type !~ sd && $type !~ fd) then
  673.             echo ${prog:t}: Can\'t use newdisk command with $type disks
  674.             goto abort
  675.         endif
  676.  
  677.         if ( $#mountlist > 0 ) then
  678.             while ( $#mountlist > 0 )
  679.                 umount /mnt$mountlist[1]
  680.                 if ( ! $?nofscks && ! { fsck -y ${rdev}$mountlist[1] } ) then
  681.                     echo ${prog:t}: fsck of ${rdev}$mountlist[1] failed
  682.                     set exitstatus=1
  683.                 endif
  684.                 df ${rdev}$mountlist[1]
  685.                 shift mountlist
  686.             end
  687.             echo Label ejected disk with $label
  688.             disk -e ${rdev}a
  689.             set mounted=()
  690.             set mountlist=()
  691.         endif
  692.         set label=$part
  693.         echo Beginning build of $label
  694.         disk -i -h $hostname -l "$label" ${rdev}a
  695.         if ( $status != 0 ) then
  696.             echo ${prog:t}: Disk initialization failed
  697.             goto abort
  698.         endif
  699.         
  700.         
  701.         if ($#cmdline == 3) then
  702.             /usr/etc/newfs -n -v -i $cmdline[3] ${rdev}a
  703.             if ($status != 0) then
  704.                 echo ${prog:t}: Disk initialization failed
  705.                 goto abort
  706.             endif
  707.         endif
  708.         
  709.         set initialized
  710.         breaksw
  711.     case "bom":
  712.         if ( $#cmdline > 3 ) then
  713.             echo ${prog:t}: Bad command \"$cmdline\"
  714.             goto abort
  715.         endif
  716.         if ( $#cmdline == 3 ) then
  717.             set bom=$cmdline[3]
  718.         else
  719.             set bom=$label
  720.         endif
  721.         (cd /mnt$part; du; ls -lgAR ) >${bom}.bom
  722.         breaksw
  723.     default:
  724.         echo ${prog:t}: Unknown command \"$cmdline\"
  725.         goto abort
  726.     endsw
  727. nextline:
  728.     @ line++
  729. end
  730.  
  731. abort:
  732. echo Build of $dev aborted
  733. while ( $#mountlist > 0 )
  734.     umount /mnt$mountlist[1]
  735.     shift mountlist
  736. end
  737. set exitstatus=1
  738. goto ejectit
  739.  
  740. done:
  741. while ( $#mountlist > 0 )
  742.     umount /mnt$mountlist[1]
  743.     if ( ! $?nofscks && ! { fsck -y ${rdev}$mountlist[1] } ) then
  744.         echo ${prog:t}: fsck of ${rdev}$mountlist[1] failed
  745.         set exitstatus=1
  746.     endif
  747.     df ${rdev}$mountlist[1]
  748.     shift mountlist
  749. end
  750. if ( $exitstatus != 0 ) then
  751.     echo ""
  752.     echo ============= WARNING ==================
  753.     echo ${prog:t}: BUILD OF $dev HAD ERRORS
  754.     echo DISK MAY NOT BE USABLE, REVIEW ERROR LOG
  755.     echo ========================================
  756. else
  757.     echo ""
  758.     echo ==========================
  759.     echo Build of $dev complete
  760.     echo ==========================
  761. endif
  762.  
  763. ejectit:
  764. if ( $type =~ od ) then
  765.     disk -e ${rdev}a
  766. endif
  767. exit($exitstatus)
  768.  
  769.  
  770.  
  771.  
  772.  
  773.