home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 3.3J / os33j.iso / private / etc / rc.cdrom < prev    next >
Text File  |  1995-03-29  |  11KB  |  479 lines

  1. #!/bin/sh -u
  2. #
  3. # CD-ROM Software Installation Procedure
  4. #
  5. # Copyright (C) 1994 by NeXT Computer, Inc.  All rights reserved.
  6. #
  7. # This script is invoked automatically when booted from a CD-ROM.
  8. # Trying to run it directly will probably not do what you expect.
  9.  
  10. clear() {
  11.    echo -n "\f"
  12. }
  13.  
  14. (
  15. # Exit with status 1 if we get a SIGINT (from, e.g., a ^C being typed).
  16. trap "exit 1" 2
  17.  
  18. . /.profile
  19.  
  20. # Check to be sure we're running from a CD-ROM
  21.  
  22. CDDIR=${ROOT}/NextCD
  23.  
  24. if [ ! -d ${CDDIR} ]; then 
  25.     echo
  26.     echo "This program is for installing NEXTSTEP on a hard disk when the"
  27.     echo "NEXTSTEP CD-ROM is the startup disk.  Since the NEXTSTEP CD-ROM"
  28.     echo "isn't the startup disk, you can't use this program."
  29.     exit 1
  30. fi
  31.  
  32. ROOT=
  33. export ROOT
  34.  
  35. # In case we had a custom file
  36. CDIS_DIR=${ROOT}/${CDDIR}/CDIS
  37.  
  38. AWK=${ROOT}/bin/awk
  39. ARCH=`${ROOT}/usr/bin/arch`
  40. CHECKFLOP=${CDIS_DIR}/checkflop
  41. CHMOD=${ROOT}/bin/chmod
  42. CP=${ROOT}/bin/cp
  43. DISK=${ROOT}/usr/etc/disk
  44. DITTO=${CDIS_DIR}/ditto
  45. EXPR=${ROOT}/bin/expr
  46. FINDROOT=${CDIS_DIR}/findroot
  47. FDISK=${ROOT}/usr/etc/fdisk
  48. GREP=${ROOT}/bin/grep
  49. HALT=${ROOT}/usr/etc/halt
  50. LOCALECHO=${CDIS_DIR}/localecho
  51. LN=${ROOT}/bin/ln
  52. MINSIZE=75
  53. MKDIRS=${ROOT}/bin/mkdirs
  54. MKFILE=${ROOT}/usr/etc/mkfile
  55. MOUNT=${ROOT}/usr/etc/mount
  56. MV=${ROOT}/bin/mv
  57. PICKDISK=${CDIS_DIR}/pickdisk
  58. REBOOT=${ROOT}/usr/etc/reboot
  59. RM=${ROOT}/bin/rm
  60. SED=${ROOT}/bin/sed
  61. STTY=${ROOT}/bin/stty
  62. SWAPON=${ROOT}/usr/etc/mach_swapon
  63. SYNC=${ROOT}/bin/sync
  64. SYSCONFIG=${CDIS_DIR}/sysconfig
  65. TABLE=${CDIS_DIR}/table
  66. TAR=${ROOT}/usr/bin/gnutar
  67. HD=/private/tmp/mnta
  68. FD=/private/tmp/mntb
  69. VERFILE=${ROOT}/usr/lib/NextStep/software_version
  70.  
  71. # Clean up output
  72. ${STTY} -tabs
  73.  
  74. # check software_version file
  75. echo -n "NEXTSTEP Release "
  76. realversion=`$AWK 'NR==1{print $1}' $VERFILE`
  77. echo $realversion
  78. version=`$AWK 'NR==1{print $1}' $VERFILE | $SED 's/^[\.0-9]*//' `
  79.  
  80. LANGUAGE=`${SYSCONFIG} Language`
  81. if [ "${LANGUAGE}" = "" -o "${LANGUAGE}" = "No language selected" ]
  82. then
  83.     reply=""
  84.     while [ -z "$reply" ]
  85.     do
  86.     clear
  87.     echo
  88.     echo "Type 1 to use the Japanese language and keyboard while installing NEXTSTEP."
  89.     echo
  90.     echo "Type 2 to use the English language and USA keyboard while installing NEXTSTEP."
  91.     echo
  92.     echo "Tapez 3 pour installer NEXTSTEP avec un clavier et des messages francais."
  93.     echo
  94.     echo "Eingabe 4 fuer NEXTSTEP-Installation mit deutscher Sprache und Tastatur."
  95.     echo
  96.     echo "Premi 5 per installare NEXTSTEP usando lingua italiana e tastiera italiana."
  97.     echo
  98.     echo "Pulse 6 para usar el idioma y el teclado espanol en la instalacion de NEXTSTEP."
  99.     echo
  100.     echo "Skriv 7 for att anvanda svenska/svenskt tangentbord vid installation av NEXTSTEP."
  101.         echo
  102.     echo -n "---> "
  103.     read reply
  104.     case "$reply" in
  105.     1)    LANGUAGE=Japanese
  106.         break;;
  107.     2)    LANGUAGE=English
  108.         break;;
  109.     3)    LANGUAGE=French
  110.         break;;
  111.     4)    LANGUAGE=German
  112.         break;;
  113.     5)    LANGUAGE=Italian
  114.         break;;
  115.     6)    LANGUAGE=Spanish
  116.         break;;
  117.     7)    LANGUAGE=Swedish
  118.         break;;
  119.     *)    reply=""
  120.         clear
  121.         continue;;
  122.     esac
  123.     done
  124. fi
  125.  
  126. # Let localecho know what our language is...
  127. export LANGUAGE
  128.  
  129. reply=""
  130. while [ -z "$reply" ]
  131. do
  132.    clear
  133.    ${LOCALECHO} BOOT_DISK
  134.    echo
  135.  
  136.    ${PICKDISK} 0
  137.    numdisks=$?
  138.    
  139.    if [ $numdisks = 255 ]
  140.    then
  141.         ${LOCALECHO} INSTALLFAILED
  142.         echo
  143.         ${LOCALECHO} QUITTING
  144.         ${HALT} -e
  145.    fi
  146.    echo
  147.    ${LOCALECHO} WHICH_DISK
  148.    echo
  149.    echo -n "---> "
  150.    read reply
  151.    if [ "$reply" = 1 -o "$reply" = 2 ]
  152.    then
  153.       continue
  154.    else
  155.       reply=""
  156.       continue
  157.    fi
  158. done
  159.  
  160. if [ "$reply" = 2 ]
  161. then
  162.    reply=""
  163.    while [ -z "$reply" ]
  164.    do
  165.       clear
  166.       ${LOCALECHO} AVAILABLE_DISKS
  167.       echo
  168.  
  169.       ${PICKDISK}
  170.       numdisks=$?
  171.  
  172.       if [ $numdisks = 255 ]
  173.       then
  174.                ${LOCALECHO} INSTALLFAILED
  175.                echo
  176.                ${LOCALECHO} QUITTING
  177.                ${HALT} -e
  178.       fi
  179.       echo
  180.       ${LOCALECHO} ALL_DISKS
  181.       echo
  182.       echo -n "---> "
  183.       read reply
  184.       if [ "$reply" -ge 1 -a "$reply" -le "$numdisks" ]
  185.       then
  186.          continue
  187.       else
  188.          reply=""
  189.          continue
  190.       fi
  191.    done
  192. fi
  193.  
  194. disknum=$reply
  195. diskie=`${PICKDISK} ${disknum}`
  196.  
  197. rawdisk=/dev/r${diskie}
  198. livedisk=`echo $rawdisk | ${SED} s/a/h/`
  199.  
  200. if [ "${ARCH}" = "i386" ]; then
  201.    reply=""
  202.    while [ -z "$reply" ]
  203.    do
  204.       ispartitioned=`${FDISK} $livedisk -isDiskPartitioned`
  205.       disksize=`${FDISK} $livedisk -diskSize`
  206.       if [ $ispartitioned = "Yes" ]
  207.       then
  208.      currentsize=`${FDISK} $livedisk -installSize`
  209.      freesize=`${FDISK} $livedisk -freeSpace`
  210.      esize=`${FDISK} $livedisk -sizeofExtended`
  211.       else
  212.      currentsize=0
  213.      freesize=0
  214.      esize=0
  215.       fi
  216.       choices=2
  217.       freenum=0
  218.       enum=0
  219.       currentnum=0
  220.       if [ $currentsize -ge $MINSIZE -a $currentsize -ne $disksize ]
  221.       then
  222.      choices=`$EXPR $choices + 1`
  223.      currentnum=$choices
  224.       fi
  225.       if [ $currentnum -eq 0 -a $freesize -ge $MINSIZE -a $freesize -ne $disksize ]
  226.       then
  227.      choices=`$EXPR $choices + 1`
  228.      freenum=$choices
  229.       fi
  230.       if [ $currentnum -eq 0 -a $esize -ge $MINSIZE ]
  231.       then
  232.      choices=`$EXPR $choices + 1`
  233.      enum=$choices
  234.       fi
  235.       choices=`$EXPR $choices + 1`
  236.       
  237.       clear
  238.       eval `${LOCALECHO} FDISK_MENU1`
  239.       eval `${LOCALECHO} FDISK_MENU2`
  240.       if [ $currentnum -ne 0 ]
  241.       then
  242.      eval `${LOCALECHO} FDISK_MENU3`
  243.       fi
  244.       if [ $freenum -ne 0 ]
  245.       then
  246.      eval `${LOCALECHO} FDISK_MENU4`
  247.       fi
  248.       if [ $enum -ne 0 ]
  249.       then
  250.      eval `${LOCALECHO} FDISK_MENU5`
  251.       fi
  252.       eval `${LOCALECHO} FDISK_MENU6`
  253.  
  254.       echo
  255.       echo -n "---> "
  256.       read reply
  257.       if [ "$reply" -ge 1 -a "$reply" -le $choices ]
  258.       then
  259.      echo
  260.      case "${reply}" in
  261.            1)         FDISK_FLAGS="-removePartitioning" ;;
  262.            2)         ${LOCALECHO} -q HOW_MUCH
  263.                   read resp2
  264.                               reply=""
  265.                   newsize=`${EXPR} $disksize - $resp2`
  266.                               if [ $? != 0 ]; then
  267.                        continue
  268.                   fi
  269.                               if [ $newsize -gt $MINSIZE ]; then
  270.                  FDISK_FLAGS="-dosPlusNeXT ${resp2}"
  271.                   else
  272.                  ${LOCALECHO} TOO_SMALL
  273.                  continue
  274.                   fi ;;
  275.            $currentnum)    continue ;;
  276.            $freenum)    FDISK_FLAGS="-setAvailableToNeXT" ;;
  277.            $enum)        resp2=`${FDISK} $livedisk -sizeofExtended`
  278.                   if [ $resp2 -gt $MINSIZE ]; then
  279.                  FDISK_FLAGS="-setExtendedToNeXT"
  280.                   else
  281.                  ${LOCALECHO} TOO_SMALL
  282.                  reply=""
  283.                  continue
  284.                   fi ;;
  285.            $choices)    ${FDISK} $livedisk
  286.                   reply=""
  287.                   continue ;;
  288.            *)        reply=""
  289.                   continue ;;
  290.      esac
  291.    
  292.      ${FDISK} $livedisk ${FDISK_FLAGS}
  293.      currentsize=`${FDISK} $livedisk -installSize`
  294.  
  295.      if [ -z "$reply" ]; then
  296.         continue
  297.          fi
  298.          if [ -z "$currentsize" -o ${currentsize} -lt $MINSIZE ]; then
  299.            ${LOCALECHO} TOO_SMALL
  300.            reply=""
  301.            continue
  302.      else
  303.            break
  304.      fi
  305.       else
  306.      reply=""
  307.       fi
  308.    done
  309. fi     
  310.  
  311. reply=""
  312. while [ -z "$reply" ]
  313. do
  314.    clear
  315.    ${LOCALECHO} READY
  316.    echo
  317.    echo -n "---> "
  318.    read reply
  319.    
  320.    case $reply in
  321.       1) continue;;
  322.       2) echo
  323.      ${LOCALECHO} QUITTING
  324.      ${HALT} -e
  325.      exit 1;;
  326.       *) reply="";;
  327.    esac
  328. done
  329.  
  330. # Get off the disk before we initialize it!
  331. clear
  332. ${LOCALECHO} GOING
  333. cd ${CDDIR}
  334.  
  335. ROOTDEV=`${FINDROOT}`
  336.  
  337. if [ $? -ne 0 ]; then
  338.       ROOTTYPE=nfs
  339. else
  340.       ROOTTYPE=4.3
  341. fi
  342.  
  343. ${DISK} -i $livedisk >> /dev/null
  344.     
  345. if [ $? -ne 0 ]; then
  346.     echo
  347.     ${LOCALECHO} INITFAILED
  348.     echo
  349.     ${LOCALECHO} QUITTING
  350.     echo
  351.     ${SYNC} ; ${REBOOT}
  352.     exit 1
  353. fi
  354.  
  355. ${MOUNT} -n /dev/$diskie ${HD} >> /dev/null
  356.  
  357. ${MKDIRS} ${HD}/private/vm
  358. ${MKDIRS} ${HD}/private/tmp
  359.  
  360. ${MKFILE} 16m ${HD}/private/vm/swapfile
  361. ${SWAPON} -o nocompress ${HD}/private/vm/swapfile
  362.  
  363. ${DITTO} -T -arch ${ARCH} -bom /usr/lib/NextStep/BaseSystem.bom -outBom ${HD}/BaseSystem.bom / ${HD}
  364. ${MV} ${HD}/BaseSystem.bom ${HD}/usr/lib/NextStep/BaseSystem.bom
  365.  
  366. FONTS_FILE=/NextLibrary/Fonts/Kanji/.fpexData
  367. if [ -f ${ROOT}${FONTS_FILE} ]; then
  368.     ${CP} -p ${ROOT}${FONTS_FILE} ${HD}${FONTS_FILE}
  369. fi
  370.  
  371. RECEIPT_DIR=/NextLibrary/Receipts
  372.  
  373. if [ "${LANGUAGE}" != "English" -a "${LANGUAGE}" != "Japanese" ]; then
  374.     ${DITTO} -T -arch ${ARCH} -bom ${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg/${LANGUAGE}Essentials.bom -outBom ${HD}/${LANGUAGE}Essentials.bom / ${HD}
  375.     ${MKDIRS} ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg
  376.     ${DITTO} ${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg
  377.     ${MV} ${HD}/${LANGUAGE}Essentials.bom ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg/${LANGUAGE}Essentials.bom
  378. fi
  379.  
  380. echo
  381.  
  382. echo "/dev/${diskie} / 4.3 rw,noquota,noauto 0 1" > ${HD}/private/etc/fstab
  383.  
  384. # Set permissions on / and /private/tmp
  385. ${CHMOD} 1777 ${HD}
  386. ${CHMOD} 1777 ${HD}/private/tmp
  387.  
  388. if [ "${ROOTTYPE}" = "4.3" ]; then
  389. echo "${ROOTDEV} /NEXTSTEP_INSTALL 4.3 ro,noquota 0 2" \
  390.    >> ${HD}/private/etc/fstab
  391. fi
  392.  
  393. CUSTOM_FILE=/private/adm/CDIS.custom
  394. echo "LANGUAGE=${LANGUAGE}" > ${HD}${CUSTOM_FILE}
  395.  
  396. if [ "${ARCH}" != "m68k" ]; then
  397.  
  398.    # Set up /private/Devices symlink
  399.    ${LN} -s Drivers/${ARCH} ${HD}/private/Devices
  400.  
  401.    DEFAULT_FILE=/usr/Devices/System.config/Default.table
  402.  
  403.    # Write out CDIS.custom file
  404.    ${MKDIRS} ${HD}/usr/Devices/System.config
  405.    echo "ROOT=${ROOT}" >> ${HD}${CUSTOM_FILE}
  406.    if [ "${ARCH}" = "i386" ]; then
  407.       echo "FDISK_FLAGS=${FDISK_FLAGS}" >> ${HD}${CUSTOM_FILE}
  408.    fi
  409.    echo "diskie=${diskie}" >> ${HD}${CUSTOM_FILE}
  410.  
  411.    BOOTDRIVERS=`${SYSCONFIG} -c -a ${ARCH}`
  412.    ${CP} ${ROOT}/private/Drivers/${ARCH}/System.config/Default.table ${HD}/usr/Devices/System.config/Default.install
  413.    ${GREP} -v 'Boot Drivers' ${HD}/usr/Devices/System.config/Default.install > ${HD}${DEFAULT_FILE}
  414.    echo "\"Boot Drivers\" = \"${BOOTDRIVERS}\";" >> ${HD}${DEFAULT_FILE}
  415.    echo "\"Language\" = \"${LANGUAGE}\";" >> ${HD}${DEFAULT_FILE}
  416.    
  417.    INSTALLHINTS=${HD}/usr/Devices/System.config/InstallHints
  418.    /bin/rm -rf ${INSTALLHINTS}
  419.    /bin/mkdir ${INSTALLHINTS}
  420.    for driver in ${BOOTDRIVERS}
  421.    do
  422.      ${SYSCONFIG} -d ${driver} > ${INSTALLHINTS}/${driver}.table 2>>/dev/null
  423.    done
  424.    ${CHMOD} -R 777 ${INSTALLHINTS}
  425.  
  426.  
  427. # -------------------
  428.    # fixup Default.table if we did not boot from it.
  429.    for i in ${BOOTDRIVERS}
  430.    do
  431.         # does the table exist?
  432.         (${SYSCONFIG} -d $i | ${GREP} '"Default Table"')  >> /dev/null 2>&1
  433.     STATUS=$?
  434.     
  435.     if [ ${STATUS} -eq 0 ]; then
  436.         # now grok it to get the driver name out
  437.         DEFAULTTABLE=`${SYSCONFIG} -d $i 2>>/dev/null | \
  438.             ${GREP} '"Default Table"' | \
  439.         ${AWK} -F= '{print $2}' | ${SED} 's/"//g' | \
  440.         ${SED} 's/;//g' | ${SED} 's/ //g'`
  441.         if [ "${DEFAULTTABLE}" != "Default" ];
  442.             then
  443.                 DEST=${HD}/usr/Devices/${i}.config
  444.                 if [ -d ${DEST} ]; then
  445.             cd ${DEST}
  446.             ${MV} Default.table Install.table
  447.             ${MV} ${DEFAULTTABLE}.table Default.table
  448.     
  449.             for lang in *.lproj
  450.             do
  451.             ${MV} ${lang}/Localizable.strings ${lang}/Install.strings
  452.             ${MV} ${lang}/${DEFAULTTABLE}.strings ${lang}/Localizable.strings
  453.             done
  454.         fi
  455.             fi
  456.     fi
  457.    done
  458.  
  459. # -------------------
  460.  
  461. fi
  462.  
  463. ${SYNC}
  464.  
  465. echo
  466. ${CHECKFLOP} && ${DISK} -e /dev/rfd0a
  467. ${LOCALECHO} DONE
  468. if [ "${ARCH}" = "i386" ]; then
  469.     ${LOCALECHO} -q REMOVE_FLOPPY
  470. else
  471.     ${LOCALECHO} -q RESTART
  472. fi
  473. read glop
  474.    ${LOCALECHO} RESTARTING
  475.    ${REBOOT} 'sd -'
  476.     exit 1
  477. ) < /dev/console >> /dev/console 2>&1
  478. exit 0
  479.