#!/bin/sh -u # # CD-ROM Software Installation Procedure # # Copyright (C) 1994 by NeXT Computer, Inc. All rights reserved. # # This script is invoked automatically when booted from a CD-ROM. # Trying to run it directly will probably not do what you expect. # # This script has been modified starting at line 422. Is is NeXTanser # document #2085. See NeXTanswer 2084_NetInstalling_with_Additional_Drivers # for information on the use of this script # clear() { echo -n "\f" } ( # Exit with status 1 if we get a SIGINT (from, e.g., a ^C being typed). trap "exit 1" 2 . /.profile # Check to be sure we're running from a CD-ROM CDDIR=${ROOT}/NextCD if [ ! -d ${CDDIR} ]; then echo echo "This program is for installing NEXTSTEP on a hard disk when the" echo "NEXTSTEP CD-ROM is the startup disk. Since the NEXTSTEP CD-ROM" echo "isn't the startup disk, you can't use this program." exit 1 fi ROOT= export ROOT # In case we had a custom file CDIS_DIR=${ROOT}/${CDDIR}/CDIS AWK=${ROOT}/bin/awk ARCH=`${ROOT}/usr/bin/arch` CHECKFLOP=${CDIS_DIR}/checkflop CHMOD=${ROOT}/bin/chmod CAT=${ROOT}/bin/cat CP=${ROOT}/bin/cp DISK=${ROOT}/usr/etc/disk DITTO=${CDIS_DIR}/ditto EXPR=${ROOT}/bin/expr FINDROOT=${CDIS_DIR}/findroot FDISK=${ROOT}/usr/etc/fdisk GREP=${ROOT}/bin/grep HALT=${ROOT}/usr/etc/halt ITAR=${ROOT}/NextAdmin/Installer.app/installer_bigtar LOCALECHO=${CDIS_DIR}/localecho LN=${ROOT}/bin/ln MINSIZE=75 MKDIRS=${ROOT}/bin/mkdirs MKFILE=${ROOT}/usr/etc/mkfile MOUNT=${ROOT}/usr/etc/mount MV=${ROOT}/bin/mv PICKDISK=${CDIS_DIR}/pickdisk REBOOT=${ROOT}/usr/etc/reboot RM=${ROOT}/bin/rm SED=${ROOT}/bin/sed STTY=${ROOT}/bin/stty SWAPON=${ROOT}/usr/etc/mach_swapon SYNC=${ROOT}/bin/sync SYSCONFIG=${CDIS_DIR}/sysconfig TABLE=${CDIS_DIR}/table TAR=${ROOT}/usr/bin/gnutar HD=/private/tmp/mnta FD=/private/tmp/mntb VERFILE=${ROOT}/usr/lib/NextStep/software_version ZCAT=${ROOT}/usr/ucb/zcat # Clean up output ${STTY} -tabs # check software_version file echo -n "NEXTSTEP Release " realversion=`$AWK 'NR==1{print $1}' $VERFILE` echo $realversion version=`$AWK 'NR==1{print $1}' $VERFILE | $SED 's/^[\.0-9]*//' ` LANGUAGE=`${SYSCONFIG} Language` if [ "${LANGUAGE}" = "" -o "${LANGUAGE}" = "No language selected" ] then reply="" while [ -z "$reply" ] do clear echo echo "Type 1 to use the English language and USA keyboard while installing NEXTSTEP." echo echo "Tapez 2 pour installer NEXTSTEP avec un clavier et des messages francais." echo echo "Eingabe 3 fuer NEXTSTEP-Installation mit deutscher Sprache und Tastatur." echo echo "Premi 4 per installare NEXTSTEP usando lingua italiana e tastiera italiana." echo echo "Pulse 5 para usar el idioma y el teclado espanol en la instalacion de NEXTSTEP." echo echo "Skriv 6 for att anvanda svenska/svenskt tangentbord vid installation av NEXTSTEP." echo echo -n "---> " read reply case "$reply" in 1) LANGUAGE=English break;; 2) LANGUAGE=French break;; 3) LANGUAGE=German break;; 4) LANGUAGE=Italian break;; 5) LANGUAGE=Spanish break;; 6) LANGUAGE=Swedish break;; *) reply="" clear continue;; esac done fi # Let localecho know what our language is... export LANGUAGE reply="" while [ -z "$reply" ] do clear ${LOCALECHO} BOOT_DISK echo ${PICKDISK} 0 numdisks=$? if [ $numdisks = 255 ] then ${LOCALECHO} INSTALLFAILED echo ${LOCALECHO} QUITTING ${HALT} -e fi echo ${LOCALECHO} WHICH_DISK echo echo -n "---> " read reply if [ "$reply" = 1 -o "$reply" = 2 ] then continue else reply="" continue fi done if [ "$reply" = 2 ] then reply="" while [ -z "$reply" ] do clear ${LOCALECHO} AVAILABLE_DISKS echo ${PICKDISK} numdisks=$? if [ $numdisks = 255 ] then ${LOCALECHO} INSTALLFAILED echo ${LOCALECHO} QUITTING ${HALT} -e fi echo ${LOCALECHO} ALL_DISKS echo echo -n "---> " read reply if [ "$reply" -ge 1 -a "$reply" -le "$numdisks" ] then continue else reply="" continue fi done fi disknum=$reply diskie=`${PICKDISK} ${disknum}` rawdisk=/dev/r${diskie} livedisk=`echo $rawdisk | ${SED} s/a/h/` if [ "${ARCH}" = "i386" ]; then reply="" while [ -z "$reply" ] do ispartitioned=`${FDISK} $livedisk -isDiskPartitioned` disksize=`${FDISK} $livedisk -diskSize` if [ $ispartitioned = "Yes" ] then currentsize=`${FDISK} $livedisk -installSize` freesize=`${FDISK} $livedisk -freeSpace` esize=`${FDISK} $livedisk -sizeofExtended` else currentsize=0 freesize=0 esize=0 fi choices=2 freenum=0 enum=0 currentnum=0 if [ $currentsize -ge $MINSIZE -a $currentsize -ne $disksize ] then choices=`$EXPR $choices + 1` currentnum=$choices fi if [ $currentnum -eq 0 -a $freesize -ge $MINSIZE -a $freesize -ne $disksize ] then choices=`$EXPR $choices + 1` freenum=$choices fi if [ $currentnum -eq 0 -a $esize -ge $MINSIZE ] then choices=`$EXPR $choices + 1` enum=$choices fi choices=`$EXPR $choices + 1` clear eval `${LOCALECHO} FDISK_MENU1` eval `${LOCALECHO} FDISK_MENU2` if [ $currentnum -ne 0 ] then eval `${LOCALECHO} FDISK_MENU3` fi if [ $freenum -ne 0 ] then eval `${LOCALECHO} FDISK_MENU4` fi if [ $enum -ne 0 ] then eval `${LOCALECHO} FDISK_MENU5` fi eval `${LOCALECHO} FDISK_MENU6` echo echo -n "---> " read reply if [ "$reply" -ge 1 -a "$reply" -le $choices ] then echo case "${reply}" in 1) FDISK_FLAGS="-removePartitioning" ;; 2) ${LOCALECHO} -q HOW_MUCH read resp2 reply="" newsize=`${EXPR} $disksize - $resp2` if [ $? != 0 ]; then continue fi if [ $newsize -gt $MINSIZE ]; then FDISK_FLAGS="-dosPlusNeXT ${resp2}" else ${LOCALECHO} TOO_SMALL continue fi ;; $currentnum) continue ;; $freenum) FDISK_FLAGS="-setAvailableToNeXT" ;; $enum) resp2=`${FDISK} $livedisk -sizeofExtended` if [ $resp2 -gt $MINSIZE ]; then FDISK_FLAGS="-setExtendedToNeXT" else ${LOCALECHO} TOO_SMALL reply="" continue fi ;; $choices) ${FDISK} $livedisk reply="" continue ;; *) reply="" continue ;; esac ${FDISK} $livedisk ${FDISK_FLAGS} currentsize=`${FDISK} $livedisk -installSize` if [ -z "$reply" ]; then continue fi if [ -z "$currentsize" -o ${currentsize} -lt $MINSIZE ]; then ${LOCALECHO} TOO_SMALL reply="" continue else break fi else reply="" fi done fi reply="" while [ -z "$reply" ] do clear ${LOCALECHO} READY echo echo -n "---> " read reply case $reply in 1) continue;; 2) echo ${LOCALECHO} QUITTING ${HALT} -e exit 1;; *) reply="";; esac done # Get off the disk before we initialize it! clear ${LOCALECHO} GOING cd ${CDDIR} ROOTDEV=`${FINDROOT}` if [ $? -ne 0 ]; then ROOTTYPE=nfs else ROOTTYPE=4.3 fi ${DISK} -i $livedisk >> /dev/null if [ $? -ne 0 ]; then echo ${LOCALECHO} INITFAILED echo ${LOCALECHO} QUITTING echo ${SYNC} ; ${REBOOT} exit 1 fi ${MOUNT} -n /dev/$diskie ${HD} >> /dev/null ${MKDIRS} ${HD}/private/vm ${MKDIRS} ${HD}/private/tmp ${MKFILE} 16m ${HD}/private/vm/swapfile ${SWAPON} -o nocompress ${HD}/private/vm/swapfile ${DITTO} -T -arch ${ARCH} -bom /usr/lib/NextStep/BaseSystem.bom -outBom ${HD}/BaseSystem.bom / ${HD} ${MV} ${HD}/BaseSystem.bom ${HD}/usr/lib/NextStep/BaseSystem.bom RECEIPT_DIR=/NextLibrary/Receipts if [ "${LANGUAGE}" != "English" ]; then ${DITTO} -T -arch ${ARCH} -bom ${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg/${LANGUAGE}Essentials.bom -outBom ${HD}/${LANGUAGE}Essentials.bom / ${HD} ${MKDIRS} ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg ${DITTO} ${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg ${MV} ${HD}/${LANGUAGE}Essentials.bom ${HD}${RECEIPT_DIR}/${LANGUAGE}Essentials.pkg/${LANGUAGE}Essentials.bom fi echo echo "/dev/${diskie} / 4.3 rw,noquota,noauto 0 1" > ${HD}/private/etc/fstab # Set permissions on / and /private/tmp ${CHMOD} 1777 ${HD} ${CHMOD} 1777 ${HD}/private/tmp if [ "${ROOTTYPE}" = "4.3" ]; then echo "${ROOTDEV} /NEXTSTEP_INSTALL 4.3 ro,noquota 0 2" \ >> ${HD}/private/etc/fstab fi CUSTOM_FILE=/private/adm/CDIS.custom echo "LANGUAGE=${LANGUAGE}" > ${HD}${CUSTOM_FILE} if [ "${ARCH}" != "m68k" ]; then # Set up /private/Devices symlink ${LN} -s Drivers/${ARCH} ${HD}/private/Devices DEFAULT_FILE=/usr/Devices/System.config/Default.table # Write out CDIS.custom file ${MKDIRS} ${HD}/usr/Devices/System.config echo "ROOT=${ROOT}" >> ${HD}${CUSTOM_FILE} if [ "${ARCH}" = "i386" ]; then echo "FDISK_FLAGS=${FDISK_FLAGS}" >> ${HD}${CUSTOM_FILE} fi echo "diskie=${diskie}" >> ${HD}${CUSTOM_FILE} BOOTDRIVERS=`${SYSCONFIG} -c -a ${ARCH}` ${CP} ${ROOT}/private/Drivers/${ARCH}/System.config/Default.table ${HD}/usr/Devices/System.config/Default.install ${GREP} -v 'Boot Drivers' ${HD}/usr/Devices/System.config/Default.install > ${HD}${DEFAULT_FILE} echo "\"Boot Drivers\" = \"${BOOTDRIVERS}\";" >> ${HD}${DEFAULT_FILE} echo "\"Language\" = \"${LANGUAGE}\";" >> ${HD}${DEFAULT_FILE} INSTALLHINTS=${HD}/usr/Devices/System.config/InstallHints /bin/rm -rf ${INSTALLHINTS} /bin/mkdir ${INSTALLHINTS} for driver in ${BOOTDRIVERS} do ${SYSCONFIG} -d ${driver} > ${INSTALLHINTS}/${driver}.table 2>>/dev/null done ${CHMOD} -R 777 ${INSTALLHINTS} # This routine will automatically install drivers located in # directory named /RELEASED_DRIVERS (placed into the install image) # to the hard disk of the machine being installed. # Added by Scott Vail 1995 if [ "${ARCH}" = "i386" ]; then if [ -d /RELEASED_DRIVERS ]; then oldir=`/bin/pwd` packages=`/bin/ls /RELEASED_DRIVERS/*.pkg/*.tar.Z` cd ${HD} echo echo "Installing Device Drivers" for name in $packages do bom=`echo $name|sed 's/tar\.Z/bom/'` ${ZCAT} $name | ${ITAR} -xpfT - $bom done if [ -d ${HD}/private/Drivers/i386/ISASerialPort.config -a \ -d ${HD}/private/Drivers/i386/SerialPointingDevice.config ] ; then ${CAT} ${HD}/private/Drivers/i386/System.config/Default.table | \ ${SED} 's/SerialMouse/SerialPointingDevice/' | \ ${SED} 's/SerialPorts/ISASerialPort/' > \ ${HD}/tmp/Default.table ${MV} ${HD}/tmp/Default.table ${HD}/private/Drivers/i386/System.config fi cd $oldir fi fi # ------------------- # fixup Default.table if we did not boot from it. for i in ${BOOTDRIVERS} do # does the table exist? (${SYSCONFIG} -d $i | ${GREP} '"Default Table"') >> /dev/null 2>&1 STATUS=$? if [ ${STATUS} -eq 0 ]; then # now grok it to get the driver name out DEFAULTTABLE=`${SYSCONFIG} -d $i 2>>/dev/null | \ ${GREP} '"Default Table"' | \ ${AWK} -F= '{print $2}' | ${SED} 's/"//g' | \ ${SED} 's/;//g' | ${SED} 's/ //g'` if [ "${DEFAULTTABLE}" != "Default" ]; then DEST=${HD}/usr/Devices/${i}.config if [ -d ${DEST} ]; then cd ${DEST} ${MV} Default.table Install.table ${MV} ${DEFAULTTABLE}.table Default.table for lang in *.lproj do ${MV} ${lang}/Localizable.strings ${lang}/Install.strings ${MV} ${lang}/${DEFAULTTABLE}.strings ${lang}/Localizable.strings done fi fi fi done # ------------------- fi ${SYNC} echo ${CHECKFLOP} && ${DISK} -e /dev/rfd0a ${LOCALECHO} DONE if [ "${ARCH}" = "i386" ]; then ${LOCALECHO} -q REMOVE_FLOPPY else ${LOCALECHO} -q RESTART fi read glop ${LOCALECHO} RESTARTING ${REBOOT} 'sd -' exit 1 ) < /dev/console >> /dev/console 2>&1 exit 0