home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 4.0 PR1 / NeXT_NEXTSTEP_4.0_PR1_(beta).rar / Openstep4-Pr1User.iso / private / etc / rc.cdrom < prev    next >
Text File  |  1994-11-10  |  11KB  |  470 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 English language and USA keyboard while installing NEXTSTEP."
  89.     echo
  90.     echo "Tapez 2 pour installer NEXTSTEP avec un clavier et des messages francais."
  91.     echo
  92.     echo "Eingabe 3 fuer NEXTSTEP-Installation mit deutscher Sprache und Tastatur."
  93.     echo
  94.     echo "Premi 4 per installare NEXTSTEP usando lingua italiana e tastiera italiana."
  95.     echo
  96.     echo "Pulse 5 para usar el idioma y el teclado espanol en la instalacion de NEXTSTEP."
  97.     echo
  98.     echo "Skriv 6 for att anvanda svenska/svenskt tangentbord vid installation av NEXTSTEP."
  99.         echo
  100.     echo -n "---> "
  101.     read reply
  102.     case "$reply" in
  103.     1)    LANGUAGE=English
  104.         break;;
  105.     2)    LANGUAGE=French
  106.         break;;
  107.     3)    LANGUAGE=German
  108.         break;;
  109.     4)    LANGUAGE=Italian
  110.         break;;
  111.     5)    LANGUAGE=Spanish
  112.         break;;
  113.     6)    LANGUAGE=Swedish
  114.         break;;
  115.     *)    reply=""
  116.         clear
  117.         continue;;
  118.     esac
  119.     done
  120. fi
  121.  
  122. # Let localecho know what our language is...
  123. export LANGUAGE
  124.  
  125. reply=""
  126. while [ -z "$reply" ]
  127. do
  128.    clear
  129.    ${LOCALECHO} BOOT_DISK
  130.    echo
  131.  
  132.    ${PICKDISK} 0
  133.    numdisks=$?
  134.    
  135.    if [ $numdisks = 255 ]
  136.    then
  137.         ${LOCALECHO} INSTALLFAILED
  138.         echo
  139.         ${LOCALECHO} QUITTING
  140.         ${HALT} -e
  141.    fi
  142.    echo
  143.    ${LOCALECHO} WHICH_DISK
  144.    echo
  145.    echo -n "---> "
  146.    read reply
  147.    if [ "$reply" = 1 -o "$reply" = 2 ]
  148.    then
  149.       continue
  150.    else
  151.       reply=""
  152.       continue
  153.    fi
  154. done
  155.  
  156. if [ "$reply" = 2 ]
  157. then
  158.    reply=""
  159.    while [ -z "$reply" ]
  160.    do
  161.       clear
  162.       ${LOCALECHO} AVAILABLE_DISKS
  163.       echo
  164.  
  165.       ${PICKDISK}
  166.       numdisks=$?
  167.  
  168.       if [ $numdisks = 255 ]
  169.       then
  170.                ${LOCALECHO} INSTALLFAILED
  171.                echo
  172.                ${LOCALECHO} QUITTING
  173.                ${HALT} -e
  174.       fi
  175.       echo
  176.       ${LOCALECHO} ALL_DISKS
  177.       echo
  178.       echo -n "---> "
  179.       read reply
  180.       if [ "$reply" -ge 1 -a "$reply" -le "$numdisks" ]
  181.       then
  182.          continue
  183.       else
  184.          reply=""
  185.          continue
  186.       fi
  187.    done
  188. fi
  189.  
  190. disknum=$reply
  191. diskie=`${PICKDISK} ${disknum}`
  192.  
  193. rawdisk=/dev/r${diskie}
  194. livedisk=`echo $rawdisk | ${SED} s/a/h/`
  195.  
  196. if [ "${ARCH}" = "i386" ]; then
  197.    reply=""
  198.    while [ -z "$reply" ]
  199.    do
  200.       ispartitioned=`${FDISK} $livedisk -isDiskPartitioned`
  201.       disksize=`${FDISK} $livedisk -diskSize`
  202.       if [ $ispartitioned = "Yes" ]
  203.       then
  204.      currentsize=`${FDISK} $livedisk -installSize`
  205.      freesize=`${FDISK} $livedisk -freeSpace`
  206.      esize=`${FDISK} $livedisk -sizeofExtended`
  207.       else
  208.      currentsize=0
  209.      freesize=0
  210.      esize=0
  211.       fi
  212.       choices=2
  213.       freenum=0
  214.       enum=0
  215.       currentnum=0
  216.       if [ $currentsize -ge $MINSIZE -a $currentsize -ne $disksize ]
  217.       then
  218.      choices=`$EXPR $choices + 1`
  219.      currentnum=$choices
  220.       fi
  221.       if [ $currentnum -eq 0 -a $freesize -ge $MINSIZE -a $freesize -ne $disksize ]
  222.       then
  223.      choices=`$EXPR $choices + 1`
  224.      freenum=$choices
  225.       fi
  226.       if [ $currentnum -eq 0 -a $esize -ge $MINSIZE ]
  227.       then
  228.      choices=`$EXPR $choices + 1`
  229.      enum=$choices
  230.       fi
  231.       choices=`$EXPR $choices + 1`
  232.       
  233.       clear
  234.       eval `${LOCALECHO} FDISK_MENU1`
  235.       eval `${LOCALECHO} FDISK_MENU2`
  236.       if [ $currentnum -ne 0 ]
  237.       then
  238.      eval `${LOCALECHO} FDISK_MENU3`
  239.       fi
  240.       if [ $freenum -ne 0 ]
  241.       then
  242.      eval `${LOCALECHO} FDISK_MENU4`
  243.       fi
  244.       if [ $enum -ne 0 ]
  245.       then
  246.      eval `${LOCALECHO} FDISK_MENU5`
  247.       fi
  248.       eval `${LOCALECHO} FDISK_MENU6`
  249.  
  250.       echo
  251.       echo -n "---> "
  252.       read reply
  253.       if [ "$reply" -ge 1 -a "$reply" -le $choices ]
  254.       then
  255.      echo
  256.      case "${reply}" in
  257.            1)         FDISK_FLAGS="-removePartitioning" ;;
  258.            2)         ${LOCALECHO} -q HOW_MUCH
  259.                   read resp2
  260.                               reply=""
  261.                   newsize=`${EXPR} $disksize - $resp2`
  262.                               if [ $? != 0 ]; then
  263.                        continue
  264.                   fi
  265.                               if [ $newsize -gt $MINSIZE ]; then
  266.                  FDISK_FLAGS="-dosPlusNeXT ${resp2}"
  267.                   else
  268.                  ${LOCALECHO} TOO_SMALL
  269.                  continue
  270.                   fi ;;
  271.            $currentnum)    continue ;;
  272.            $freenum)    FDISK_FLAGS="-setAvailableToNeXT" ;;
  273.            $enum)        resp2=`${FDISK} $livedisk -sizeofExtended`
  274.                   if [ $resp2 -gt $MINSIZE ]; then
  275.                  FDISK_FLAGS="-setExtendedToNeXT"
  276.                   else
  277.                  ${LOCALECHO} TOO_SMALL
  278.                  reply=""
  279.                  continue
  280.                   fi ;;
  281.            $choices)    ${FDISK} $livedisk
  282.                   reply=""
  283.                   continue ;;
  284.            *)        reply=""
  285.                   continue ;;
  286.      esac
  287.    
  288.      ${FDISK} $livedisk ${FDISK_FLAGS}
  289.      currentsize=`${FDISK} $livedisk -installSize`
  290.  
  291.      if [ -z "$reply" ]; then
  292.         continue
  293.          fi
  294.          if [ -z "$currentsize" -o ${currentsize} -lt $MINSIZE ]; then
  295.            ${LOCALECHO} TOO_SMALL
  296.            reply=""
  297.            continue
  298.      else
  299.            break
  300.      fi
  301.       else
  302.      reply=""
  303.       fi
  304.    done
  305. fi     
  306.  
  307. reply=""
  308. while [ -z "$reply" ]
  309. do
  310.    clear
  311.    ${LOCALECHO} READY
  312.    echo
  313.    echo -n "---> "
  314.    read reply
  315.    
  316.    case $reply in
  317.       1) continue;;
  318.       2) echo
  319.      ${LOCALECHO} QUITTING
  320.      ${HALT} -e
  321.      exit 1;;
  322.       *) reply="";;
  323.    esac
  324. done
  325.  
  326. # Get off the disk before we initialize it!
  327. clear
  328. ${LOCALECHO} GOING
  329. cd ${CDDIR}
  330.  
  331. ROOTDEV=`${FINDROOT}`
  332.  
  333. if [ $? -ne 0 ]; then
  334.       ROOTTYPE=nfs
  335. else
  336.       ROOTTYPE=4.3
  337. fi
  338.  
  339. ${DISK} -i $livedisk >> /dev/null
  340.     
  341. if [ $? -ne 0 ]; then
  342.     echo
  343.     ${LOCALECHO} INITFAILED
  344.     echo
  345.     ${LOCALECHO} QUITTING
  346.     echo
  347.     ${SYNC} ; ${REBOOT}
  348.     exit 1
  349. fi
  350.  
  351. ${MOUNT} -n /dev/$diskie ${HD} >> /dev/null
  352.  
  353. ${MKDIRS} ${HD}/private/vm
  354. ${MKDIRS} ${HD}/private/tmp
  355.  
  356. ${MKFILE} 16m ${HD}/private/vm/swapfile
  357. ${SWAPON} -o nocompress ${HD}/private/vm/swapfile
  358.  
  359. ${DITTO} -T -arch ${ARCH} -bom /usr/lib/NextStep/BaseSystem.bom -outBom ${HD}/BaseSystem.bom / ${HD}
  360. ${MV} ${HD}/BaseSystem.bom ${HD}/usr/lib/NextStep/BaseSystem.bom
  361.  
  362. RECEIPT_DIR=/NextLibrary/Receipts
  363.  
  364. if [ "${LANGUAGE}" != "English" ]; then
  365.     ${DITTO} -T -arch ${ARCH} -bom ${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg/${LANGUAGE}Essentials.bom -outBom ${HD}/${LANGUAGE}Essentials.bom / ${HD}
  366.     ${MKDIRS} ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg
  367.     ${DITTO} ${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg
  368.     ${MV} ${HD}/${LANGUAGE}Essentials.bom ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg/${LANGUAGE}Essentials.bom
  369. fi
  370.  
  371. echo
  372.  
  373. echo "/dev/${diskie} / 4.3 rw,noquota,noauto 0 1" > ${HD}/private/etc/fstab
  374.  
  375. # Set permissions on / and /private/tmp
  376. ${CHMOD} 1777 ${HD}
  377. ${CHMOD} 1777 ${HD}/private/tmp
  378.  
  379. if [ "${ROOTTYPE}" = "4.3" ]; then
  380. echo "${ROOTDEV} /NEXTSTEP_INSTALL 4.3 ro,noquota 0 2" \
  381.    >> ${HD}/private/etc/fstab
  382. fi
  383.  
  384. CUSTOM_FILE=/private/adm/CDIS.custom
  385. echo "LANGUAGE=${LANGUAGE}" > ${HD}${CUSTOM_FILE}
  386.  
  387. if [ "${ARCH}" != "m68k" ]; then
  388.  
  389.    # Set up /private/Devices symlink
  390.    ${LN} -s Drivers/${ARCH} ${HD}/private/Devices
  391.  
  392.    DEFAULT_FILE=/usr/Devices/System.config/Default.table
  393.  
  394.    # Write out CDIS.custom file
  395.    ${MKDIRS} ${HD}/usr/Devices/System.config
  396.    echo "ROOT=${ROOT}" >> ${HD}${CUSTOM_FILE}
  397.    if [ "${ARCH}" = "i386" ]; then
  398.       echo "FDISK_FLAGS=${FDISK_FLAGS}" >> ${HD}${CUSTOM_FILE}
  399.    fi
  400.    echo "diskie=${diskie}" >> ${HD}${CUSTOM_FILE}
  401.  
  402.    BOOTDRIVERS=`${SYSCONFIG} -c -a ${ARCH}`
  403.    ${CP} ${ROOT}/private/Drivers/${ARCH}/System.config/Default.table ${HD}/usr/Devices/System.config/Default.install
  404.    ${GREP} -v 'Boot Drivers' ${HD}/usr/Devices/System.config/Default.install > ${HD}${DEFAULT_FILE}
  405.    echo "\"Boot Drivers\" = \"${BOOTDRIVERS}\";" >> ${HD}${DEFAULT_FILE}
  406.    echo "\"Language\" = \"${LANGUAGE}\";" >> ${HD}${DEFAULT_FILE}
  407.    
  408.    INSTALLHINTS=${HD}/usr/Devices/System.config/InstallHints
  409.    /bin/rm -rf ${INSTALLHINTS}
  410.    /bin/mkdir ${INSTALLHINTS}
  411.    for driver in ${BOOTDRIVERS}
  412.    do
  413.      ${SYSCONFIG} -d ${driver} > ${INSTALLHINTS}/${driver}.table 2>>/dev/null
  414.    done
  415.    ${CHMOD} -R 777 ${INSTALLHINTS}
  416.  
  417.  
  418. # -------------------
  419.    # fixup Default.table if we did not boot from it.
  420.    for i in ${BOOTDRIVERS}
  421.    do
  422.         # does the table exist?
  423.         (${SYSCONFIG} -d $i | ${GREP} '"Default Table"')  >> /dev/null 2>&1
  424.     STATUS=$?
  425.     
  426.     if [ ${STATUS} -eq 0 ]; then
  427.         # now grok it to get the driver name out
  428.         DEFAULTTABLE=`${SYSCONFIG} -d $i 2>>/dev/null | \
  429.             ${GREP} '"Default Table"' | \
  430.         ${AWK} -F= '{print $2}' | ${SED} 's/"//g' | \
  431.         ${SED} 's/;//g' | ${SED} 's/ //g'`
  432.         if [ "${DEFAULTTABLE}" != "Default" ];
  433.             then
  434.                 DEST=${HD}/usr/Devices/${i}.config
  435.                 if [ -d ${DEST} ]; then
  436.             cd ${DEST}
  437.             ${MV} Default.table Install.table
  438.             ${MV} ${DEFAULTTABLE}.table Default.table
  439.     
  440.             for lang in *.lproj
  441.             do
  442.             ${MV} ${lang}/Localizable.strings ${lang}/Install.strings
  443.             ${MV} ${lang}/${DEFAULTTABLE}.strings ${lang}/Localizable.strings
  444.             done
  445.         fi
  446.             fi
  447.     fi
  448.    done
  449.  
  450. # -------------------
  451.  
  452. fi
  453.  
  454. ${SYNC}
  455.  
  456. echo
  457. ${CHECKFLOP} && ${DISK} -e /dev/rfd0a
  458. ${LOCALECHO} DONE
  459. if [ "${ARCH}" = "i386" ]; then
  460.     ${LOCALECHO} -q REMOVE_FLOPPY
  461. else
  462.     ${LOCALECHO} -q RESTART
  463. fi
  464. read glop
  465.    ${LOCALECHO} RESTARTING
  466.    ${REBOOT} 'sd -'
  467.     exit 1
  468. ) < /dev/console >> /dev/console 2>&1
  469. exit 0
  470.