home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2 / Openstep-4.2-Intel-User.iso / NextAdmin / NetInstallHelper.app / make_netinstall_floppy < prev    next >
Text File  |  1997-03-13  |  13KB  |  445 lines

  1. echo This shell script is no longer supported.
  2. exit 1
  3.  
  4. #!/bin/csh -f
  5. #
  6. # Create boot and drivers disks for a NetInstall client
  7. # Copyright (C) 1994 by NeXT Computer, Inc.  All rights reserved.
  8.  
  9. # All command names are stored in variables
  10.  
  11. set AWK=/bin/awk
  12. set BASENAME=/usr/bin/basename
  13. set CAT=/bin/cat
  14. set CP=/bin/cp
  15. set DF=/bin/df
  16. set DISK=/usr/etc/disk
  17. set DU=/bin/du
  18. set ECHO=/bin/echo
  19. set ERROR=$ECHO
  20. set GREP=/bin/grep
  21. set HEAD=/usr/ucb/head
  22. set LIPO=/bin/lipo
  23. set LN=/bin/ln
  24. set LS=/bin/ls
  25. set MKDIRS=/bin/mkdirs
  26. set MOUNT=/usr/etc/mount
  27. set NIUTIL=/usr/bin/niutil
  28. set PS=/bin/ps
  29. set RM=/bin/rm
  30. set SED=/bin/sed
  31. set TAIL=/usr/ucb/tail
  32. set UMOUNT=/usr/etc/umount
  33. set ARCH_CMD=/usr/bin/arch
  34. set NEWFS=/etc/newfs
  35.  
  36. set TRUE=1
  37. set FALSE=0
  38.  
  39. set PROGRAM_NAME=`$BASENAME ${0} .csh`
  40. $ECHO -n "usage: ${PROGRAM_NAME} " > /tmp/_usage_$$
  41. $ECHO '[-n] [-c network disk] [-d] [-NeXT_OD] [-config_domain name]' >> /tmp/_usage_$$
  42. $ECHO 'options:' >> /tmp/_usage_$$
  43. $ECHO "  -n               Don't initialize floppy disk" >> /tmp/_usage_$$
  44. $ECHO '  -c network disk  Custom disk for given network and disk drivers' >> /tmp/_usage_$$
  45. $ECHO '  -d               Create a drivers disk rather than a boot disk' >> /tmp/_usage_$$
  46. $ECHO '  -NeXT_OD         Create a boot optical disk for a NeXT computer' >> /tmp/_usage_$$
  47. $ECHO '  -config_domain   Domain where servers are recorded (default is "/")' >> /tmp/_usage_$$
  48.  
  49. # This program must be run by root
  50.  
  51. set WHO=`$PS -l $$ | $TAIL -1 | $AWK '{print $2}'`
  52. if (${WHO}x != "0x") then
  53.     $ERROR 'You must run this program as "root".'
  54.     exit 1
  55. endif
  56.  
  57. # Determine host architecture
  58.  
  59. #set ARCH=-UNKNOWN-
  60. set ARCH=`$ARCH_CMD`
  61.  
  62. #$CAT /usr/lib/NextStep/software_version | $GREP Lightning > /dev/null
  63. #if ($status == 0) then
  64. if ($ARCH == m68k) then
  65.     set ARCH=NeXT
  66.     set M68K=$TRUE
  67. else
  68. #$CAT /usr/lib/NextStep/software_version | $GREP Thunder > /dev/null
  69. #if ($status == 0) then
  70. if ($ARCH == i386) then
  71.     set M68K=$FALSE
  72. else
  73. #$CAT /usr/lib/NextStep/software_version | $GREP Blaze > /dev/null
  74. #if ($status == 0) then
  75. if ($ARCH == hppa) then
  76.         set ARCH=hp
  77. endif
  78. endif
  79. endif
  80.  
  81. if ($ARCH != NeXT && $ARCH != i386) then
  82.     $ERROR 'You must run this program on a NeXT or Intel-based computer.'
  83.     exit 1
  84. endif
  85.  
  86. # Parse command-line options
  87.  
  88. set CONFIG_DOMAIN=/
  89. set INIT_DISK=$TRUE
  90. set CUSTOM=$FALSE
  91. set DRIVERS_DISK=$FALSE
  92. set BLOCK_DEV=/dev/fd0a
  93. set RAW_DEV=/dev/rfd0a
  94.  
  95. while ($#argv > 0)
  96.     switch (${1})
  97.     case "-help": # Print help message
  98.         $CAT /tmp/_usage_$$
  99.         $RM /tmp/_usage_$$
  100.         exit 1
  101.         breaksw
  102.     case "-n": # Don't initialize disk
  103.         set INIT_DISK=$FALSE
  104.         breaksw
  105.     case "-d": # Create a drivers disk
  106.         set DRIVERS_DISK=$TRUE
  107.         breaksw
  108.     case "-c": # Custom disk
  109.         if ($#argv < 3) then
  110.             $ERROR "${PROGRAM_NAME}: missing arguments to -d"
  111.             $CAT /tmp/_usage_$$
  112.             $RM /tmp/_usage_$$
  113.             exit 1
  114.         endif
  115.         set CUSTOM=$TRUE
  116.         set NETWORK_DRIVER="${2}"
  117.         set DISK_DRIVER="${3}"
  118.         shift
  119.         shift
  120.         breaksw
  121.     case "-NeXT_OD": # Create a NeXT Optical Disk
  122.         if ($ARCH != NeXT) then
  123.             $ERROR '-NeXT_OD option only supported on a NeXT computer.'
  124.             exit 1
  125.         endif
  126.         set BLOCK_DEV=/dev/od0a
  127.         set RAW_DEV=/dev/rod0a
  128.         breaksw
  129.     case "-config_domain": # Where servers are recorded
  130.         if ($#argv < 2) then
  131.             $ERROR "${PROGRAM_NAME}: missing argument to -config_domain."
  132.             $CAT /tmp/_usage_$$
  133.             $RM /tmp/_usage_$$
  134.             exit 1
  135.         endif
  136.         set CONFIG_DOMAIN="${2}"
  137.         shift
  138.         breaksw
  139.     default: # Unknown flag
  140.         $ERROR "${PROGRAM_NAME}: unknown option ${1}."
  141.         $CAT /tmp/_usage_$$
  142.         $RM /tmp/_usage_$$
  143.         exit 1
  144.         breaksw
  145.     endsw
  146.     shift
  147. end
  148.  
  149. $RM /tmp/_usage_$$
  150.  
  151. # Is there a NetInstall server?
  152.  
  153. $NIUTIL -list $CONFIG_DOMAIN /locations/install_servers >& /dev/null
  154. if ($status == 1) then
  155.     $ERROR 'Can't find any NetInstall servers.'
  156.     exit 1
  157. endif
  158.  
  159. set SERVER_NAME=`$NIUTIL -list $CONFIG_DOMAIN /locations/install_servers | $HEAD -1 | $AWK '{print $2}'`
  160. set SERVER_IMAGE=`$NIUTIL -read $CONFIG_DOMAIN /locations/install_servers/$SERVER_NAME | $GREP install_root | $AWK '{print $2}'`
  161. set IMAGE_DIR=/Net/${SERVER_NAME}$SERVER_IMAGE
  162.  
  163. $LS $IMAGE_DIR | $GREP "not found"
  164. if ($status == 0) then
  165.     $ERROR 'Can't find NetInstall server $SERVER_NAME directory $IMAGE_DIR.'
  166.     exit 1
  167. endif
  168.  
  169. # Make a NeXT disk?
  170.  
  171. if ($M68K == $TRUE) then
  172.  
  173.     set CUSTOM=$FALSE
  174.     set DRIVERS_DISK=$FALSE
  175.  
  176.     # Must be NeXT 
  177.  
  178.     if ($ARCH != NeXT) then
  179.         $ERROR 'You must run this program on an NeXT computer.'
  180.         exit 1
  181.     endif
  182.  
  183. else
  184.  
  185.     # Must be Intel 
  186.  
  187.     if ($ARCH != i386) then
  188.         $ERROR 'You must run this program on an Intel-based computer.'
  189.         exit 1
  190.     endif
  191.  
  192. endif
  193.  
  194. # Is there a disk mounted?
  195.  
  196. $GREP $BLOCK_DEV /etc/mtab > /dev/null
  197. if ($status == 0) then
  198.  
  199.     # There's a mounted disk in the drive.  Abort.
  200.  
  201.     set DISK_NAME=`$GREP $BLOCK_DEV /etc/mtab | $AWK '{print $2}'`
  202.     $ERROR "${PROGRAM_NAME}: Disk $DISK_NAME is present in the drive."
  203.     $ERROR "${PROGRAM_NAME}: Unmount and eject the disk before running this command."
  204.     exit 1
  205.  
  206. else
  207.     if ($M68K == $FALSE) then
  208.         # No disk present, get user to insert one
  209.  
  210.         $ECHO 'Please insert a floppy disk.'
  211.         $ECHO -n 'Press Enter to proceed or type "quit" to exit: '
  212.         set USER_INPUT=$<
  213.  
  214.         if (${USER_INPUT}x == "quitx") then
  215.             exit 0
  216.         endif
  217.     endif
  218. endif
  219.  
  220. # Initialize the disk
  221.  
  222. if ($INIT_DISK == $TRUE && $DRIVERS_DISK == $FALSE) then
  223.     $DISK -i -l NetInstall $RAW_DEV
  224.     $NEWFS -i 8192 $RAW_DEV
  225. endif
  226. if ($INIT_DISK == $TRUE && $DRIVERS_DISK == $TRUE) then
  227.     $DISK -i -l Drivers $RAW_DEV
  228. endif
  229.  
  230. # Mount the disk
  231.  
  232. set DISK_NAME=/tmp/_netinstall_$$
  233. $MKDIRS $DISK_NAME
  234. $MOUNT $BLOCK_DEV $DISK_NAME
  235.  
  236. $GREP "$DISK_NAME" /etc/mtab > /dev/null
  237. if ($status == 1) then
  238.     $ERROR "${PROGRAM_NAME}: Disk error."
  239.     exit 1
  240. endif
  241.  
  242. # Create drivers disk if -d flag specified
  243.  
  244. if ($DRIVERS_DISK == $TRUE) then
  245.  
  246.     # create /private/Drivers/i386
  247.  
  248.     $MKDIRS $DISK_NAME/private/Drivers/i386
  249.  
  250.     # Get a list of boot drivers
  251.  
  252.     set NET_TABLE=$IMAGE_DIR/private/Drivers/i386/System.config/Instance0.network
  253.     set BOOT_DRIVERS=`$GREP "Boot Drivers" $NET_TABLE | $SED 's/"Boot Drivers" = "//' | $SED 's/";//'`
  254.  
  255.     # if a custom disk, copy specified network and disk drivers
  256.  
  257.     if ($CUSTOM == $TRUE) then
  258.         set ALL_DRIVERS=`$ECHO $BOOT_DRIVERS $NETWORK_DRIVER $DISK_DRIVER`
  259.     else 
  260.         set ALL_DRIVERS=`$ECHO $BOOT_DRIVERS`
  261.  
  262.         # Find available network and disk drivers
  263.  
  264.         foreach DRIVER ($IMAGE_DIR/private/Drivers/i386/*.config)
  265.             set DRIVER_NAME=`$BASENAME $DRIVER .config`
  266.             set FAMILY=`$GREP '"Family"' $DRIVER/Default.table | $AWK '{print $3}' | $SED 's/"//g' | $SED 's/;//'`
  267.             if ($FAMILY == "Network" || $FAMILY == "Disk" || $FAMILY == "SCSI") then
  268.                 if ($DRIVER_NAME != "Floppy" \
  269.                     && $DRIVER_NAME != "IBMTokenRing" \
  270.                     && $DRIVER_NAME != "TokenExpress") then
  271.                     set ALL_DRIVERS=`$ECHO $ALL_DRIVERS $DRIVER_NAME`
  272.                 endif
  273.             endif
  274.         end
  275.     endif
  276.  
  277.     # Copy Drivers
  278.  
  279.     foreach DRIVER ($ALL_DRIVERS)
  280.         set DRIVER_SRC=$IMAGE_DIR/private/Drivers/i386/$DRIVER.config
  281.         set DRIVER_DST=$DISK_NAME/private/Drivers/i386/$DRIVER.config
  282.  
  283.         if (! -d $DRIVER_SRC) then
  284.             $ERROR "${PROGRAM_NAME}: Can't find $DRIVER_SRC"
  285.         else
  286.             $MKDIRS $DRIVER_DST
  287.             $CP $DRIVER_SRC/*_reloc $DRIVER_DST
  288.             $CP $DRIVER_SRC/*.table $DRIVER_DST
  289.             $RM -f $DRIVER_DST/Instance*.table
  290.  
  291.             foreach LANG ($DRIVER_SRC/*.lproj)
  292.                 $MKDIRS $DRIVER_DST/`$BASENAME $LANG`
  293.                 $CP $LANG/*.strings $DRIVER_DST/`$BASENAME $LANG`
  294.             end
  295.  
  296.         endif
  297.     end
  298.  
  299.     # Unmount and eject the disk
  300.  
  301.     $UMOUNT $BLOCK_DEV
  302.     $DISK -e $RAW_DEV
  303.     $RM -f $DISK_NAME
  304.  
  305.     # All done (drivers disk)
  306.  
  307.     $ECHO "NetInstall boot disk build complete."
  308.     $ECHO "You may remove the disk."
  309.     exit 0
  310.  
  311. endif
  312.  
  313. # Make a NeXT boot disk
  314.  
  315. if ($M68K == $TRUE) then
  316.     $DISK -B $IMAGE_DIR/usr/standalone/boot $RAW_DEV
  317.     $LIPO $IMAGE_DIR/mach_kernel -extract m68k -output ${DISK_NAME}/sdmach
  318.     $LN $DISK_NAME/sdmach $DISK_NAME/fdmach
  319.     $LN $DISK_NAME/sdmach $DISK_NAME/odmach
  320.     # Unmount and eject the disk
  321.  
  322.     $UMOUNT $BLOCK_DEV
  323.     $DISK -e $RAW_DEV
  324.     $RM -f $DISK_NAME
  325.  
  326.     # All done
  327.  
  328.     $ECHO "NetInstall boot disk build complete."
  329.     exit 0
  330. endif
  331.  
  332. # Make an Intel boot disk
  333.  
  334. $DISK -B $IMAGE_DIR/usr/standalone/i386/boot $RAW_DEV
  335. $LIPO $IMAGE_DIR/mach_kernel -extract i386 -output ${DISK_NAME}/mach_kernel
  336.  
  337. # Create /usr/standalone/i386/English.lproj
  338.  
  339. $MKDIRS $DISK_NAME/usr/standalone/i386/English.lproj
  340.  
  341. # Copy sarld
  342.  
  343. $CP $IMAGE_DIR/usr/standalone/i386/sarld $DISK_NAME/usr/standalone/i386
  344.  
  345. # Copy /usr/standalone/i386/Language.table
  346.  
  347. $CP $IMAGE_DIR/usr/standalone/i386/Language.table $DISK_NAME/usr/standalone/i386
  348.  
  349. # Copy /usr/standalone/i386/BootHelp.txt
  350.  
  351. $CP $IMAGE_DIR/usr/standalone/i386/BootHelp.txt $DISK_NAME/usr/standalone/i386
  352.  
  353. # Create /usr/standalone/i386/English.lproj/Localizable.strings
  354.  
  355. $CAT << END_OF_STRINGS > /tmp/_strings_$$
  356. "Loading NEXTSTEP";
  357. "Loading %s\n";
  358. "Reading NEXTSTEP configuration";
  359. "Couldn't load standalone linker; unable to load boot drivers.\n";
  360. "Insert file system media and press Return";
  361. "Errors encountered while starting up the computer.\n";
  362. "Pausing 5 seconds...\n";
  363. "Starting NEXTSTEP";
  364. "Can't find %s\n";
  365. "Couldn't start up the computer using this floppy disk.";
  366. "Error loading %s\n";
  367. "Fat binary file doesn't contain i386 code\n";
  368. "Unrecognized binary format\n";
  369. "Error reading commands\n";
  370. "Error loading section\n";
  371. "Read error\n";
  372. "Can't load driver %s without sarld\n";
  373. "Driver %s is larger than %d bytes and can't be loaded.\n";
  374. "Error occurred while linking driver %s:\n%s";
  375. "The floppy disk in the drive contains the following SCSI adapter and hard disk controller device drivers:\n";
  376. "Loading driver %s\n";
  377. "Error loading driver %s\n";
  378. "The driver was not loaded.  ";
  379. "The driver was loaded successfully.  ";
  380. "Press Return to continue.\n";
  381. "Type 1 to load a device driver from the disk in the floppy disk drive.\n";
  382. "Type 2 to continue without loading additional device drivers.\n";
  383. "When you began installing NEXTSTEP, you loaded the following device drivers from a floppy disk:\n";
  384. "Insert the floppy disk that contains these device drivers.\n";
  385. "If you have a floppy disk with NEXTSTEP device drivers that you need to use during installation, insert the floppy disk that contains the device driver for that device.\n";
  386. "The following SCSI adapter and hard disk controller device drivers are available while installing NEXTSTEP:\n";
  387. "If you have a different kind of SCSI adapter or hard disk controller, insert the floppy disk that contains its device driver.\n";
  388. "Searching for drivers";
  389. "Couldn't find /private/Drivers/i386\n";
  390. "There are no device drivers on this floppy disk.\n";
  391. "Error in standalone linker executable\n";
  392. "No room in memory for config file %s\n";
  393. "Reading config: %s\n";
  394. "Config file \"%s\" not found\n";
  395. "System config file '%s' not found\n";
  396. "Loading binary for %s\n";
  397. "Warning: No active drivers specified in system config\n";
  398. "Type the number for the device driver you want to install.\n";
  399. "Type %d to view a list of additional device drivers on this disk.\n";
  400. "Type %d to continue without installing a device driver from this disk.\n";
  401. "The floppy disk in the drive contains device drivers for the following SCSI adapters and hard disk controllers:\n" = "The floppy disk in the drive contains device drivers for the following SCSI adapters, hard disk controllers, and network adapters:\n";
  402. "MESSAGE1" = "Type the number for the network adapter in your computer.\n\n";
  403. "MESSAGE2" = "Type the number for the SCSI adapter or hard disk controller that the hard disk you want to install NEXTSTEP on is connected to.\n\n";
  404. "MESSAGE3" = "If you have another disk with the device driver for this network adapter, insert that disk in the floppy disk drive and type %d.\n";
  405. "MESSAGE4" = "If you have another disk with the device driver for this SCSI adapter or hard disk controller, insert that disk in the floppy disk drive and type %d.\n";
  406. END_OF_STRINGS
  407.  
  408. $CP /tmp/_strings_$$ $DISK_NAME/usr/standalone/i386/English.lproj/Localizable.strings
  409. $RM /tmp/_strings_$$
  410.  
  411. # Copy /private/Drivers/i386/System.config/Instance0.network to Instance0.table
  412.  
  413. $MKDIRS $DISK_NAME/private/Drivers/i386/System.config
  414.  
  415. # if a custom disk, include specified network and disk drivers in Boot Drivers
  416.  
  417.  
  418. set NET_TABLE=$IMAGE_DIR/private/Drivers/i386/System.config/Instance0.network
  419.  
  420. if ($CUSTOM == $TRUE) then
  421.     set BOOT_DRIVERS=`$GREP "Boot Drivers" $NET_TABLE | $SED 's/"Boot Drivers" = "//' | $SED 's/";//'`
  422.     set BOOT_DRIVERS=`$ECHO $BOOT_DRIVERS $NETWORK_DRIVER $DISK_DRIVER`
  423.     $ECHO -n '"Boot Drivers" = "' > /tmp/_table_$$
  424.     $ECHO -n $BOOT_DRIVERS >> /tmp/_table_$$
  425.     $ECHO '";' >> /tmp/_table_$$
  426.     $ECHO '"Install Mode" = "No";' >> /tmp/_table_$$
  427.     $GREP -v "Boot Drivers" $NET_TABLE | $GREP -v "Install Mode" >> /tmp/_table_$$
  428.     $CP /tmp/_table_$$ $DISK_NAME/private/Drivers/i386/System.config/Instance0.table
  429.     $RM /tmp/_table_$$
  430. else
  431.     $CP $NET_TABLE $DISK_NAME/private/Drivers/i386/System.config/Instance0.table
  432. endif
  433.  
  434. # Unmount and eject the floppy disk
  435.  
  436. $UMOUNT $BLOCK_DEV
  437. $DISK -e $RAW_DEV
  438. $RM -f $DISK_NAME
  439.  
  440. # All done
  441.  
  442. $ECHO "NetInstall boot disk build complete."
  443. $ECHO "You may remove the disk."
  444. exit 0
  445.