diff options
author | rgrimes <rgrimes@FreeBSD.org> | 1994-03-20 00:12:38 +0000 |
---|---|---|
committer | rgrimes <rgrimes@FreeBSD.org> | 1994-03-20 00:12:38 +0000 |
commit | 5dc4502e167f2f42996e963427610f624ba73203 (patch) | |
tree | ecb77cb764be3498465f4caf9db3b07e43d445dc /etc | |
parent | 40b47c723e3d802056d28807c8c932e720f49cbc (diff) | |
download | FreeBSD-src-5dc4502e167f2f42996e963427610f624ba73203.zip FreeBSD-src-5dc4502e167f2f42996e963427610f624ba73203.tar.gz |
These are the installation and profile files from the 1.0 cdins*.flp
floppy images. Put in as they were in 1.0, about to change them to
work with 1.1.
Diffstat (limited to 'etc')
-rw-r--r-- | etc/etc.i386/cdinst1.install | 1031 | ||||
-rw-r--r-- | etc/etc.i386/cdinst1.profile | 65 |
2 files changed, 1096 insertions, 0 deletions
diff --git a/etc/etc.i386/cdinst1.install b/etc/etc.i386/cdinst1.install new file mode 100644 index 0000000..bf7dde8 --- /dev/null +++ b/etc/etc.i386/cdinst1.install @@ -0,0 +1,1031 @@ +#!/bin/sh +# cd install floppy disk /install script +# +# $Id$ + +# ${OPSYSTEM}, the mounting of the cdrom drive, and the path are all +# setup by .profile +# +OPSYSID=165 +ROOTMIN=7 +SWAPMIN=8 +USRMIN=45 +DISKMIN=`expr $ROOTMIN + $SWAPMIN + $USRMIN + 1` +DEFBLOCKING=2 +DEFSECT=17 +DEFHEAD=12 +DEFCYLN=1024 +RUN_FDISK="" + +DOS1_ID=1 +DOS2_ID=4 +DOS3_ID=6 + +set_arbitrary_defaults() { +cyls_per_disk=$DEFCYLN +tracks_per_cyl=$DEFHEAD +sects_per_track=$DEFSECT +unused_last_part=3 +part_cnt=4 +} + + +get_fdisk_data() { +cyls_per_disk= +part_id= +got_sysid= +part_cnt=0 +sysid_cnt=0 +have_opsys_part= +have_dos_part= +unused_last_part= +extent_max=0 +extent_max_part= + +fdisk /dev/r${drivename}d >fdisk.out 2>fdisk.err +if [ $? -gt 0 ]; then + echo "Can't open /dev/r${drivename}d for reading!" + set_arbitrary_defaults + >fdisk.out + >fdisk.err + return 2 +elif [ -s fdisk.err ]; then + echo "Disk doesn't appear to be initialized..." + >fdisk.out + >fdisk.err + no_part_table=1 +fi +while read data; do + if [ ! "$cyls_per_disk" ]; then + cyls_per_disk=`expr "$data" : '[^=]*=\([0-9]*\)'` + tracks_per_cyl=`expr "$data" : '[^=]*=[^=]*=\([0-9]*\)'` + sects_per_track=`expr "$data" : '[^=]*=[^=]*=[^=]*=\([0-9]*\)'` + continue + fi + if [ "$got_sysid" ]; then + start_part=`expr "$data" : '[^0-9]*\([0-9]*\)'` + size_part=`expr "$data" : '[^0-9]*[0-9]*[^0-9]*\([0-9]*\)'` + extent_part=`expr $start_part + $size_part` + if [ $extent_part -gt $extent_max ]; then + extent_max=$extent_part + extent_max_part=$part_id + fi + eval start${part_id}=$start_part + eval size${part_id}=$size_part + sysid_cnt=`expr $sysid_cnt + 1` + got_sysid= + part_id= + elif [ "$part_id" ]; then + sysid=`expr "$data" : 'sysid \([0-9]*\)'` + sysname=`expr "$data" : 'sysid[^(]*(\([^)]*\)'` + if [ "$no_part_table" -o "$sysid" = "0" -o \ + "$(expr "$data" : '\(<UNUSED>\)')" = "<UNUSED>" ]; then + unused_last_part=$part_id + part_id= + continue + fi + if [ "$sysid" = "$OPSYSID" ]; then + have_opsys_part=$part_id + elif [ ! "$have_dos_part" -a \( "$sysid" = "$DOS1_ID" -o \ + "$sysid" = "$DOS2_ID" -o "$sysid" = "$DOS3_ID" \) ]; then + have_dos_part=$part_id + fi + eval sysid${part_id}=$sysid + eval sysname${part_id}=\"$sysname\" + got_sysid=1 + else + part_id=`expr "$data" : 'The data[^0-9]*\([0-9]*\)'` + beg_cyl=`expr "$data" : '[ ]*beg[^0-9]*\([0-9]*\)'` + end_cyl=`expr "$data" : '[ ]*end[^0-9]*\([0-9]*\)'` + if [ "$part_id" ]; then + part_cnt=`expr $part_cnt + 1` + elif [ "${beg_cyl}" -gt "${cyls_per_disk}" -o \ + "${end_cyl}" -gt "${cyls_per_disk}" ]; then + no_part_table=1 + sysid_cnt=0 + have_opsys_part=0 + unused_last_part=`expr $part_cnt - 1` + fi + fi +done <fdisk.out +if [ ! "$cyls_per_disk" ]; then + set_arbitrary_defaults + return 2 +fi +>fdisk.out +>fdisk.err +return 0 +} + +set_existing_part() { +# Set existing partiton values as default (adjusting to cylinder boundaries) +eval opsys_size=\$size${opsys_part} +eval opsys_start=\$start${opsys_part} +[ $opsys_size -eq 50000 ] && opsys_size=$disksize +opsys_off=`expr $opsys_start / $cylindersize` +opsys_adjusted=`expr $opsys_off \* $cylindersize` +if [ $opsys_adjusted -lt $opsys_start -o $opsys_off -eq 0 ]; then + opsys_off=`expr $opsys_off + 1` + opsys_adjusted=`expr $opsys_off \* $cylindersize` + opsys_size=`expr $opsys_size - $opsys_adjusted + $opsys_start` +fi +cyls_per_opsys=`expr $opsys_size / $cylindersize` +RUN_FDISK="fdisk -u" +} + + +set_overwrite_part() { +while :; do + echo + echo -n "Please specify partition to overwrite: [3] " + read resp junk + opsys_part=${resp:-3} + if [ "$opsys_part" -ge 0 -a "$opsys_part" -le 3 ]; then + break + else + echo + echo "Partition must be in the range [0-3]" + fi +done +set_existing_part +} + +analyze_fdisk_data() { +if [ "$part_cnt" -gt 0 ]; then + echo + echo "Partition Offset* Size* Name" + echo "--------- ------ ---- ----" + i=0 + while [ $i -lt $part_cnt ]; do + pcyls= + poff= + eval psize=\$size${i} + eval pstart=\$start${i} + eval pname=\$sysname${i} + [ "$psize" -eq 50000 ] && psize=$disksize + if [ "$psize" ]; then + poff=`expr $pstart / $cylindersize` + padjusted=`expr $poff \* $cylindersize` + if [ "$padjusted" -lt "$pstart" ]; then + poff=`expr $poff + 1` + padjusted=`expr $poff \* $cylindersize` + psize=`expr $psize - $padjusted + $pstart` + fi + pcyls=`expr $psize / $cylindersize` + fi + echo -n "${i}" + echo -n " ${poff:-0}" + echo -n " ${pcyls:-0}" + echo " ${pname:-(Unused)}" + i=`expr $i + 1` + done + echo "* Sizes and offsets are in units of cylinders." +fi +# Case I: >1024 cylinders +force_offset= +if [ $cyls_per_disk -gt 1024 ]; then + echo + echo " WARNING: >1024 cylinders. On some hardware, this prevents" + echo " ${OPSYSTEM} from sharing the disk with other operating systems." + echo -n "Install ${OPSYSTEM} on entire disk, overwriting existing partitions? [n] " + read resp junk + case "$resp" in + y*|Y*) + RUN_FDISK="" + force_offset=1 + opsys_off=0 + cyls_per_opsys=${cyls_per_disk} + opsys_part=${unused_last_part:-3} + return 0 + ;; + *) + echo + echo "If the number of disk cylinders does not exceed 1024, then ${OPSYSTEM}" + echo "can be installed alongside other operating systems on a single disk." + echo "Otherwise, it is system-dependent whether this will work or not." + echo "In the worst case, ${OPSYSTEM} MUST be installed at the beginning of" + echo "the disk, and existing partitions will be lost." + echo + echo "For now, we will assume that >1024 cylinders creates no problems..." + # FALL THROUGH + ;; + esac +fi +# Case II: no partitions used +if [ $sysid_cnt -eq 0 ]; then + echo + echo " WARNING: partition table is either missing or corrupt." + echo " Existing partitions will be lost." + part_cnt=${part_cnt:-4} + RUN_FDISK="overwrite" + opsys_off=1 + cyls_per_opsys=`expr ${cyls_per_disk} - 1` + opsys_part=${unused_last_part:-3} + return 0 +# Case IIIa: overwrite an existing 386BSD/NetBSD/FreeBSD partition +elif [ "$have_opsys_part" ]; then + echo + echo "386/Net/FreeBSD partition already exists!" + echo -n "Overwrite existing partition? [n] " + read resp junk + case "$resp" in + y*|Y*) + opsys_part=${have_opsys_part} + set_existing_part + return 0 + ;; + *) + have_opsys_part= + # FALL THROUGH + ;; + esac +fi + +# Case IIIb: no partitions available +if [ $sysid_cnt -eq $part_cnt -a ! "$have_opsys_part" ]; then + echo + echo "No unused partitions." + echo -n "Install $OPSYSTEM and overwrite the entire disk? [n] " + read resp junk + case "$resp" in + y*|Y*) + # don't use first cylinder! + opsys_off=1 + cyls_per_opsys=`expr $cyls_per_disk - 1` + opsys_part=${unused_last_part} + RUN_FDISK="overwrite" + ;; + *) + set_overwrite_part + ;; + esac + return 0 +fi + + +# *** CAVEAT *** +# $OPSYSTEM installs at the end of the disk. If the +# beginning of the disk is free but not the end, install fails! + +# Assume `fdisk -u' to add $OPSYSTEM in last unused partition for remaining cases +opsys_part=${unused_last_part} +RUN_FDISK="fdisk -u" +mb_sect=`expr 1024 \* 1024 / $bytes_per_sect` +disk_minimum=`expr $DISKMIN \* $mb_sect` + +# Case IV: No room (at end of disk) for mininal install +[ $extent_max -eq 50000 ] && extent_max=$disksize +disk_remaining=`expr $disksize - $extent_max` +if [ $disk_remaining -lt $disk_minimum ]; then + echo + echo "Not enough space ($DISKMIN Mb) at end of disk to install $OPSYSTEM." + echo -n "Install FreeBSD and overwrite the entire disk? [n] " + read resp junk + case "$resp" in + y*|Y*) + # don't use first cylinder! + opsys_off=1 + cyls_per_opsys=`expr $cyls_per_disk - 1` + opsys_part=${unused_last_part} + RUN_FDISK="overwrite" + ;; + *) + echo + echo -n "Overwrite an existing partition? [n] " + read resp junk + case "$resp" in + y*|Y*) + set_overwrite_part + ;; + *) + echo + echo " WARNING: To install ${OPSYSTEM}, you're on your own in figuring" + echo " out where on the disk it will fit without overwriting another" + echo " partition..." + # Set defaults assuming there is only one partition at end of disk + eval start=\$start${extent_max_part} + # don't use first cylinder! + opsys_off=1 + cyls_per_opsys=`expr $start / $cylindersize - 1` + [ $cyls_per_opsys -lt 0 ] && cyls_per_opsys=0 + ;; + esac + ;; + esac + return 0 +fi + +# Case V: Room for $OPSYSTEM and partition data okay +opsys_off=`expr $extent_max / $cylindersize` +opsys_extent=`expr $opsys_off \* $cylindersize` +[ $opsys_extent -lt $extent_max ] && opsys_off=`expr $opsys_off + 1` +cyls_per_opsys=`expr $cyls_per_disk - $opsys_off` +return 0 +} + +put_fdisk_data() { +start=$root_offset +size=$partition + +if [ "$RUN_FDISK" = "overwrite" ]; then + # How do you overwrite without explicitly editing each entry? + ( + echo y + echo $cyls_per_disk + echo $tracks_per_cyl + echo $sects_per_track + echo y + ) >fdisk.script + i=0 + n=`expr ${part_cnt:-4} - 1` + while [ $i -lt $n ]; do + echo y + echo 0 + echo 0 + echo 0 + echo n + echo y + i=`expr $i + 1` + done >>fdisk.script + ( echo y + echo ${OPSYSID} + echo ${start} + echo ${size} + echo n + echo y + echo y + echo ${n} + echo y + echo y + ) >>fdisk.script + fdisk -u /dev/r${drivename}d <fdisk.script >/dev/null 2>&1 +elif [ "$RUN_FDISK" ]; then + $RUN_FDISK -${opsys_part:-${unused_last_part:-3}} /dev/r${drivename}d <<-EOF >/dev/null 2>&1 + y + $cyls_per_disk + $tracks_per_cyl + $sects_per_track + y + y + ${OPSYSID} + ${start} + ${size} + n + y + y + ${opsys_part:-${unused_last_part:-3}} + y + y + EOF +fi + +} + +echo +echo "This program is designed to help put ${OPSYSTEM} on a hard disk with" +echo "at least $DISKMIN Megabytes of free space." +echo +echo "Before starting, it is important to know your hard disk's geometry" +echo "(i.e., number of cylinders, heads and sectors/track). If installing" +echo "${OPSYSTEM} on the same disk as another operating system, then the" +echo "two systems should use the same geometry. In particular, ${OPSYSTEM}'s" +echo "default geometry is inappropriate for MS-DOS. So in this case, the" +echo "DOS geometry should be used instead." +echo +echo "As with anything which modifies a hard drive's contents, this program" +echo "can cause SIGNIFICANT DATA LOSS. We strongly recommend making sure" +echo "that the hard drive is backed up before going further with the" +echo "installation process." +echo +echo -n "Proceed with installation? [y] " +read resp junk +resp=${resp:-y} +case "$resp" in +y*|Y*) + echo + echo "Cool! Let's get to it..." + echo + echo "You will be given a chance to start over if you make a" + echo "mistake during these questions." + echo "At the end, you have the option of redoing the configuration." + echo "If you really must quit at some point, type <CTRL>+C and" + echo "enter \`halt' at the command prompt, \`#'." + ;; +*) + echo + echo "OK, then. Enter \`halt' to halt the machine." + echo "Once the machine has halted, remove the floppy," + echo "and press any key to reboot." + exit + ;; +esac + +mount -u /dev/fd0a / || { + if mount -u /dev/fd1a / ; then + echo "[Please ignore the above error message, that's normal.]" + else + echo "Oh boy, we're in trouble here: Could not mount floppy read-write." + exit 1 + fi +} +sync +verified_install="" +while [ ! "$verified_install" ]; do # Begin of Big Loop + +rotdelay="" +drivename=wd0 +drivetype=wd +sect_fwd="" +echo +echo "First, we need to know the drive type. This can be can be one of" +echo "ESDI, SCSI, ST506, or IDE." +echo -n "Drive type? [${type:-IDE}] " +read resp junk +type=${resp:-${type:-IDE}} +case "$type" in +e*|E*|st*|ST*) + echo -n "Does it support AUTOMATIC sector remapping? [y] " + read remap junk + case "$remap" in + n*|N*) + sect_fwd="sf:" + ;; + esac + case "$type" in + e*|E*) + DEFSECT=36 + ;; + esac + ;; +i*|I*) + type=ST506 + rotdelay="-d 0" + ;; +sc*|SC*) + drivename=sd0 + drivetype=sd + type=SCSI + rotdelay="-d 0" + DEFSECT=32 + DEFHEAD=64 + ;; +*) + echo "Unknown type. Assuming ST506 with automatic sectoring..." + type=ST506 + ;; +esac +if [ ! "$partition" ]; then + echo + echo "Please wait. Examining device /dev/r${drivename}d..." + get_fdisk_data + if [ $? -gt 1 ]; then + echo "Hm - we can't seem to read that drive." + echo + echo -n "Are you sure that $type is the correct type? [n] " + read resp + case "$resp" in + y*|Y*) + echo + echo "Well, since we can't even open it, there isn't much" + echo "hope for writing a label on it. But you're free" + echo "to give it a try. You need to specify the geometry." + ;; + *) + echo + echo "Okay. Let's start again from the top." + continue + ;; + esac + fi +fi +echo +echo "Now we want to build a data base entry in /etc/disktab describing" +echo "the geometry of the /dev/$drivename disk. The name of the entry" +echo "should be descriptive of the disk's type and model. For example," +echo "a Maxtor IDE, model 7080 disk might be named \`maxtor7080'." +echo -n "Disk label name (one word, please)? [${name:-mfr_model}] " +read resp junk +name=${resp:-${name:-mfr_model}} +echo +echo "${OPSYSTEM} should use the same hard disk geometry as used by other" +echo "operating systems on the hard disk." +echo -n "Number of bytes per disk sector? [${bytes_per_sect:-512}] " +read resp junk +bytes_per_sect=${resp:-${bytes_per_sect:-512}} +echo +echo -n "Total number of disk cylinders? [${cyls_per_disk:-${DEFCYLN}}] " +read resp junk +cyls_per_disk=${resp:-${cyls_per_disk:-${DEFCYLN}}} +echo +echo -n "Number of disk heads (i.e., tracks/cylinder)? [${tracks_per_cyl:-${DEFHEAD}}] " +read resp junk +tracks_per_cyl=${resp:-${tracks_per_cyl:-${DEFHEAD}}} +echo +echo -n "Number of disk sectors (i.e., sectors/track)? [${sects_per_track:-${DEFSECT}}] " +read resp junk +sects_per_track=${resp:-${sects_per_track:-${DEFSECT}}} +cylindersize=`expr $sects_per_track \* $tracks_per_cyl` +disksize=`expr $cylindersize \* $cyls_per_disk` +mb_sect=`expr 1024 \* 1024 / $bytes_per_sect` +mb_per_disk=`expr $disksize / $mb_sect` +opsys_cyls_min=`expr $DISKMIN \* $mb_sect / $cylindersize` +analyze_fdisk_data +if [ $? -eq 0 ]; then + partition=`expr $cyls_per_opsys \* $cylindersize` + part_offset=`expr $opsys_off \* $cylindersize` +fi +echo +echo "Disk has a total of $mb_per_disk Mb." +echo "The size of the ${OPSYSTEM} portion of the disk must be at least" +echo "${opsys_cyls_min} cylinders, and should not exceed $(expr $cyls_per_disk - 1) cylinders." +echo "The offset of ${OPSYSTEM} from the beginning of the disk should be at" +echo "least 1 cylinder." +echo +echo "For efficiency, partitions begin and end on cylinder boundaries." +echo "If you know the size NN in Megabytes (Mb) of a partition you want, then" +echo "use the following formula to determine the number NC of cylinders to use:" +echo " NC = integer { ( NN * $mb_sect ) / $cylindersize }" +while :; do + echo -n "Total size of the ${OPSYSTEM} portion of the disk (in cylinders)? [${cyls_per_opsys:-`expr ${cyls_per_disk} - 1`}] " + read resp junk + cyls_per_opsys=${resp:-${cyls_per_opsys:-`expr ${cyls_per_disk} - 1`}} + partition=`expr $cyls_per_opsys \* $cylindersize` + if [ $cyls_per_opsys -lt $cyls_per_disk -a ! "$force_offset" ]; then + echo + echo -n "Offset of ${OPSYSTEM} from beginning of disk (in cylinders)? [${opsys_off:-1}] " + read resp junk + opsys_off=${resp:-${opsys_off:-1}} + else + echo + echo " WARNING: Existing partitions will be lost. In addition," + echo " installing at cylinder 0 may cause problems for some disk" + echo " controllers. If the filesystem is corrupted or install" + echo " fails, install at cylinder 1." + RUN_FDISK="" + cyls_per_opsys=$cyls_per_disk + partition=$disksize + opsys_off=0 + fi + part_offset=`expr $opsys_off \* $cylindersize` + opsys_extent=`expr $opsys_off + $cyls_per_opsys` + if [ ${opsys_extent} -gt ${cyls_per_disk} ]; then + echo + echo "${OPSYSTEM} Size + Offset cannot exceed ${cyls_per_disk} cylinders." + elif [ ${cyls_per_opsys} -lt ${opsys_cyls_min} ]; then + echo + echo "${OPSYSTEM} requires at least ${opsys_cyls_min} cylinders to install." + else break + fi +done +badspacesec=0 +if [ "$sect_fwd" = "sf:" ]; then + badspacecyl=`expr $sects_per_track + 126` + badspacecyl=`expr $badspacecyl + $cylindersize - 1` + badspacecyl=`expr $badspacecyl / $cylindersize` + badspacesec=`expr $badspacecyl \* $cylindersize` + echo + echo -n "Using $badspacesec sectors ($badspacecyl cylinders) for the " + echo "bad144 bad block table" +fi +whats_left=`expr $partition - $badspacesec` +cyl_left=`expr $whats_left / $cylindersize` +mb_left=`expr $whats_left / $mb_sect` +swap_cyls_min=`expr $SWAPMIN \* $mb_sect / $cylindersize` +root_cyls_max=`expr ${cyl_left} - ${swap_cyls_min}` +root_cyls_min=`expr $ROOTMIN \* $mb_sect / $cylindersize` +echo +echo "There are $mb_left Mb ($cyl_left cylinders) to allocate." +echo +echo "The $OPSYSTEM portion of the disk must itself be divided into at least" +echo "two partitions: one for the root filesystem and one for swap. It is a" +echo "good idea to have at least a third (large) $OPSYSTEM partition for the /usr" +echo "filesystem." +echo +echo "The root partition cannot exceed ${root_cyls_max} cylinders. It is usually" +echo "no larger than about 15 Mb ($(expr 15 \* $mb_sect / $cylindersize) cylinders), and sometimes" +echo "as small as $ROOTMIN Mb ($root_cyls_min cylinders)." +if [ ! "$cyls_per_root" ]; then + # set default root partition to 15MB + cyls_per_root=`expr \( 15 \* $mb_sect \) / $cylindersize` + usr_cyls_max=`expr ${root_cyls_max} - ${cyls_per_root}` + mb_usr=`expr ${usr_cyls_max} \* $cylindersize / $mb_sect` + [ $cyls_per_root -gt $root_cyls_max -o $mb_usr -lt $USRMIN ] && + cyls_per_root=$root_cyls_max +fi +while :; do + echo -n "Root partition size (in cylinders)? [${cyls_per_root}] " + read resp junk + cyls_per_root=${resp:-${cyls_per_root}} + root=`expr $cyls_per_root \* $cylindersize` + if [ ${cyls_per_root} -gt ${root_cyls_max} ]; then + echo + echo "The root partition size cannot exceed $root_cyls_max cylinders." + elif [ ${cyls_per_root} -lt ${root_cyls_min} ]; then + echo + echo "The root partition size must be at least $root_cyls_min cylinders." + else + part_used=`expr $root + $badspacesec` + break + fi +done +root_offset=$part_offset +whats_left=`expr $partition - $part_used` +cyl_left=`expr $whats_left / $cylindersize` +mb_left=`expr $whats_left / $mb_sect` +blocking_factor=2 +fragsize=`expr $bytes_per_sect \* $blocking_factor` +blocksize=`expr $bytes_per_sect \* $blocking_factor \* 8` +memsize=`dmesg | grep "^real mem" | awk '{ print $4 }'` +mb_ram=`expr \( $memsize / 1024 / 1024 \) + 1` +swap_mb=`expr \( 21 \* $mb_ram \) / 10` +echo +echo "$mb_left Mb ($cyl_left cylinders) remaining in ${OPSYSTEM} portion of disk." +echo +echo "Minimum swap space is $SWAPMIN Mb (${swap_cyls_min} cylinders.)" +echo "For running X, with your RAM size of $mb_ram Mb," +echo "$swap_mb Mb (`expr \( \( 21 \* $mb_ram \* $mb_sect \) / 10 / ${cylindersize} \)` cylinders) of swap is recommended." +if [ ! "$swap_cyl" ]; then + swap_cyl=`expr \( 21 \* $mb_ram \* $mb_sect \) / 10` + swap_cyl=`expr $swap_cyl / ${cylindersize}` + + # but not swap size more than 10% of disk size... + swap_quot=`expr $mb_left / $mb_ram` + if [ $swap_quot -lt 10 ]; then + swap_cyl=$swap_cyls_min + fi +fi +while :; do + echo -n "Swap partition size (in cylinders)? [${swap_cyl}] " + read resp junk + swap_cyl=${resp:-${swap_cyl}} + swap=`expr $swap_cyl \* $cylindersize` + if [ ${swap_cyl} -gt ${cyl_left} ]; then + echo + echo "Swap size cannot exceed $cyl_left cylinders." + elif [ ${swap_cyl} -lt ${swap_cyls_min} ]; then + echo + echo "Swap size must be at least ${swap_cyls_min} cylinders." + else + break + fi +done +swap_offset=`expr $root_offset + $root` +part_used=`expr $part_used + $swap` +echo "" >/etc/disktab +echo "$name|${OPSYSTEM} installation generated:\\" >>/etc/disktab +echo " :dt=${type}:ty=winchester:\\" >>/etc/disktab +echo -n " :nc#${cyls_per_disk}:ns#${sects_per_track}" >>/etc/disktab +echo ":nt#${tracks_per_cyl}:\\" >>/etc/disktab +echo " :se#${bytes_per_sect}:${sect_fwd}\\" >>/etc/disktab +echo -n " :pa#${root}:oa#${root_offset}" >>/etc/disktab +echo ":ta=4.2BSD:ba#${blocksize}:fa#${fragsize}:\\" >>/etc/disktab +echo " :pb#${swap}:ob#${swap_offset}:tb=swap:\\" >>/etc/disktab +echo " :pc#${partition}:oc#${part_offset}:\\" >>/etc/disktab +ename="";fname="";gname="";hname="" +if [ $part_used -lt $partition ]; then + echo + echo "Now we enter information about any other partitions and filesystems" + echo "to be created in the ${OPSYSTEM} portion of the disk. This process" + echo "is complete when we've filled up all remaining space in the ${OPSYSTEM}" + echo "portion of the disk." +fi +while [ $part_used -lt $partition ]; do + part_size=0 + whats_left=`expr $partition - $part_used` + cyl_left=`expr $whats_left / $cylindersize` + mb_left=`expr $whats_left / $mb_sect` + echo + echo "$mb_left Mb ($cyl_left cylinders) remaining in ${OPSYSTEM} portion of disk." + echo + while :; do + echo -n "Next partition size (in cylinders)? [${cyl_left}] " + read resp junk + part_size=${resp:-${cyl_left}} + part_size=`expr $part_size \* $cylindersize` + total=`expr $part_used + $part_size` + if [ $total -gt $partition ]; then + echo + echo "Partition size cannot exceed ${cyl_left} cylinders." + else + part_used=$total + part_name="" + while [ "$part_name" = "" ]; do + echo + echo -n "On which directory should this filesystem be mounted? [usr] " + read resp junk + part_name=${resp:-usr} + part_name=`expr X"$part_name" : 'X/*\(.*\)'` + done + break + fi + done + if [ ! "$ename" ]; then + ename=$part_name + offset=`expr $part_offset + $root + $swap` + echo -n " :pe#${part_size}:oe#${offset}" >>/etc/disktab + echo ":te=4.2BSD:be#${blocksize}:fe#${fragsize}:\\" >>/etc/disktab + offset=`expr $offset + $part_size` + elif [ ! "$fname" ]; then + fname=$part_name + echo -n " :pf#${part_size}:of#${offset}" >>/etc/disktab + echo ":tf=4.2BSD:bf#${blocksize}:ff#${fragsize}:\\" >>/etc/disktab + offset=`expr $offset + $part_size` + elif [ ! "$gname" ]; then + gname=$part_name + echo -n " :pg#${part_size}:og#${offset}" >>/etc/disktab + echo ":tg=4.2BSD:bg#${blocksize}:fg#${fragsize}:\\" >>/etc/disktab + offset=`expr $offset + $part_size` + elif [ ! "$hname" ]; then + hname=$part_name + echo -n " :ph#${part_size}:oh#${offset}" >>/etc/disktab + echo ":th=4.2BSD:bh#${blocksize}:fh#${fragsize}:\\" >>/etc/disktab + part_used=partition + fi +done +if [ "$have_dos_part" -a "$have_dos_part" != "$opsys_part" -a \ + "$RUN_FDISK" != "overwrite" -a ! "$hname" ]; then + echo + echo "There appears to be a MS-DOS filesystem on the hard disk." + echo -n "Make this be accessible from ${OPSYSTEM}? [y] " + read resp junk + case "${resp:-y}" in + y*|Y*) + part_name="" + while [ "$part_name" = "" ]; do + echo + echo -n "On which directory should this filesystem be mounted? [dos] " + read resp junk + part_name=${resp:-dos} + part_name=`expr X"$part_name" : 'X/*\(.*\)'` + done + hname=$part_name + eval offset=\$start${have_dos_part} + eval part_size=\$size${have_dos_part} + echo -n " :ph#${part_size}:oh#${offset}" >>/etc/disktab + echo ":th=MSDOS:\\" >>/etc/disktab + part_used=partition + ;; + *) + have_dos_part="" + ;; + esac +else + have_dos_part="" +fi +echo " :pd#${disksize}:od#0:" >>/etc/disktab +sync + +# cat /etc/disktab +OIFS=$IFS +IFS=' +' +while read data; do + echo $data +done < /etc/disktab +IFS=$OIFS + +echo +echo -n "Verbose installation? [n] " +read resp + +case $resp in +y*) + cpioverbose=-v + ;; +*) + cpioverbose= + ;; +esac + + +echo +echo "OK! THIS IS THE LAST CHANCE!!! Data on the hard disk wil be lost." +echo -n "Are you sure you want to install on the hard drive? (yes/no) " +resp="" +while [ ! "$resp" ]; do + read resp junk + case "$resp" in + Yes|yes|YES) + verified_install=1 + echo + echo "OK! Here we go..." + ;; + No|no|NO) + echo + echo -n "Would you like to change the configuration? [y] " + read resp junk + resp=${resp:-y} + case "$resp" in + y*|Y*) + ;; + *) + echo + echo "OK, then. Enter 'halt' to halt the machine." + echo "Once the machine has halted, remove the floppy," + echo "and press any key to reboot." + exit + ;; + esac + ;; + *) + echo "Please spell out either of \`yes' or \`no'..." + echo -n "Install on the hard disk? (yes/no) " + resp= + ;; + esac +done +done # End of Big Loop + +put_fdisk_data + +echo +echo -n "Labelling disk..." +echo y | +disklabel -w -r ${drivename} $name \ + ${CDROM_FILESYSTEM}/usr/mdec/${drivetype}boot \ + ${CDROM_FILESYSTEM}/usr/mdec/boot${drivetype} +# XXX >/dev/null 2>&1 +echo " done." + +if [ "$sect_fwd" = "sf:" ]; then + echo -n "Initializing bad144 badblock table..." + bad144 $drivename 0 + echo " done." + echo "Updating badblock table..." + # `2>&1 >/dev/null' filters stdout and leaves only stderr... + badlist=$(bad144 -s $drivename 2>&1 >/dev/null | + while read data; do + bad_seek=$(expr "$data" : '[^(]*(seek)[^0-9]*\([0-9]*\)') + bad_read=$(expr "$data" : '[^(]*(read)[^0-9]*\([0-9]*\)') + [ "$bad_seek" -o "$bad_read" ] && echo -n "$bad_seek $bad_read " + done) + [ "$badlist" ] && bad144 -a -c $drivename "$badlist" + echo " done." +fi + +echo "Initializing root filesystem, and mounting..." +newfs ${rotdelay} /dev/r${drivename}a $name +mount -v /dev/${drivename}a /mnt +if [ "$ename" != "" ]; then + echo + echo "Initializing $ename filesystem, and mounting..." + newfs ${rotdelay} /dev/r${drivename}e $name + mkdir -p /mnt/$ename + mount -v /dev/${drivename}e /mnt/$ename +fi +if [ "$fname" != "" ]; then + echo + echo "Initializing $fname filesystem, and mounting..." + newfs ${rotdelay} /dev/r${drivename}f $name + mkdir -p /mnt/$fname + mount -v /dev/${drivename}f /mnt/$fname +fi +if [ "$gname" != "" ]; then + echo + echo "Initializing $gname filesystem, and mounting..." + newfs ${rotdelay} /dev/r${drivename}g $name + mkdir -p /mnt/$gname + mount -v /dev/${drivename}g /mnt/$gname +fi +if [ "$hname" != "" ]; then + echo + if [ ! "$have_dos_part" ]; then + echo "Initializing $hname filesystem, and mounting..." + newfs ${rotdelay} /dev/r${drivename}h $name + else + echo "Initializing $hname filesystem..." + fi + mkdir -p /mnt/$hname + [ ! "$have_dos_part" ] && + mount -v /dev/${drivename}h /mnt/$hname +fi + +echo +echo "Please wait. Copying to disk..." +cd /mnt +cat $CDROM_BINDIST | \ + gunzip | tar --extract --file - --preserve-permissions ${cpioverbose} + +echo "/dev/${drivename}a / ufs rw 1 1" >etc/fstab +if [ "$ename" != "" ]; then + echo "/dev/${drivename}e /$ename ufs rw 1 2" >>etc/fstab +fi +if [ "$fname" != "" ]; then + echo "/dev/${drivename}f /$fname ufs rw 1 3" >>etc/fstab +fi +if [ "$gname" != "" ]; then + echo "/dev/${drivename}g /$gname ufs rw 1 4" >>etc/fstab +fi +if [ "$hname" != "" ]; then + if [ ! "$have_dos_part" ]; then + echo "/dev/${drivename}h /$hname ufs rw 1 5" >>etc/fstab + else + echo "/dev/${drivename}h /$hname pcfs rw 0 0" >>etc/fstab + fi +fi + +cat /etc/disktab >etc/disktab.install +cp -p /386bsd /mnt/386bsd + +echo +echo "Building /dev files..." +chroot /mnt sh <<! +cd /dev +sh MAKEDEV all +cd / +! +echo " done." + +echo "You will now be prompted for information about this" +echo "machine. If you hit return, the default answer (in" +echo "brackets) will be used." + +echo +echo -n "What is this machine's hostname? [unknown.host.domain] " +read hname + +if [ "$hname" = "" ]; then + hname=unknown.host.domain +fi +echo $hname > /mnt/etc/myname +proto_domain=`echo $hname | sed -e 's/[^.]*\.//'` + +echo +echo "What domain is this machine in (this is NOT its YP" +echo -n "domain name)? [$proto_domain] " +read dname + +if [ "$dname" = "" ]; then + dname=$proto_domain +fi + +echo +echo -n "Does this machine have an ethernet interface? [y] " +read resp +case "$resp" in +n*) + ;; +*) + echo -n "What is the hostname for this machine? [$hname] " + read ifname + if [ "$ifname" = "" ]; then + ifname=$hname + fi + ifaddr= + while [ "$ifaddr" = "" ]; do + echo -n "What is the IP address associated for this machine? " + read ifaddr + done + echo "$ifaddr $ifname `echo $ifname | sed -e s/\.$dname//`" \ + >> /mnt/etc/hosts + + echo -n "Does this network have a special netmask? [n] " + read resp + case "$resp" in + y*) + echo -n "What is the netmask? [0xffffff00] " + read ifnetmask + if [ "$ifnetmask" = "" ]; then + ifnetmask=0xffffff00 + fi + ;; + *) + ifnetmask= + ;; + esac + + echo -n "Does this network need additional flags? [n] " + read resp + case "$resp" in + y*) + echo -n "What flags? [llc0] " + read ifflags + if [ "$ifflags" = "" ]; then + ifflags=llc0 + fi + ;; + *) + ifflags= + ;; + esac + + echo "" + echo "WARNING: you will need to finish the configuration of your" + echo "network by editing /etc/netstart, read the comments in that" + echo "file for more instructions." + ;; +esac + +echo +echo "Your system should be set up now for operation." + +sync + +echo +echo "The next step: reboot from the hard disk and enjoy the system!" +echo +echo "To do this, enter \`halt' now to halt the machine. After it" +echo "announces that it has halted, remove the floppy from the drive" +echo "and press any key to boot." +echo +echo "Okay, that's all for now. I'm waiting for you to enter \`halt'..." diff --git a/etc/etc.i386/cdinst1.profile b/etc/etc.i386/cdinst1.profile new file mode 100644 index 0000000..2de4c91 --- /dev/null +++ b/etc/etc.i386/cdinst1.profile @@ -0,0 +1,65 @@ +#!bin/sh +# cdinst1.profile floppy disk /.profile script +PATH=/sbin:/bin:/usr/bin:/usr/sbin:. +export PATH +HOME=/root +export HOME +TERM=pc3 +export TERM +TERMCAP="\ +pc3|ibmpc3:li#25:co#80:am:bs:bw:eo:cd=\E[J:ce=\E[K:cl=\Ec:cm=\E[%i%2;%2H:\ +do=\E[B:ho=\E[;H:nd=\E[C:up=\E[A:so=\E[7m:se=\E[0m:us=\E[4m:ue=\E[0m:\ +:ac=l\332q\304k\277x\263j\331m\300w\302u\264v\301t\303n\305:\ +:kb=^h:kh=\E[Y:ku=\E[A:kd=\E[B:kl=\E[D:kr=\E[C:" +export TERMCAP + +# To bad uname is not availiable here! +# +OPSYSTEM=FreeBSD +export OPSYSTEM +CDROM_TYPE=0 +export CDROM_TYPE +CDROM_MOUNT=/cdrom +export CDROM_MOUNT +CDROM_FILESYSTEM=${CDROM_MOUNT}/filesys +export CDROM_FILESYSTEM +CDROM_BINDIST=${CDROM_MOUNT}/tarballs/bindist/bin_tgz.* +export CDROM_BINDIST + +echo +echo "Welcome to ${OPSYSTEM}." +echo + +# Lets find the cd rom drive and get it mounted so we have access to +# all of the binaries, this is really ugly, but it uses the minimum +# amount of support code and should always find us a cdrom drive if +# there is one ready to use! + +while [ $CDROM_TYPE -eq 0 ]; do # Begin of cd drive loop + + mount -t isofs /dev/cd0a ${CDROM_MOUNT} >/dev/null 2>&1 + if [ $? -eq 0 ]; then + CDROM_TYPE=1 + echo "Found and mounted SCSI CD ROM drive /dev/cd0a" + else + mount -t isofs /dev/mcd0a ${CDROM_MOUNT} >/dev/null 2>&1 + if [ $? -eq 0 ]; then + CDROM_TYPE=2 + echo "Found and mounted Mitsumi CD ROM drive /dev/mcd0a" + else + CDROM_TYPE=0 + echo "No cdrom drive found, are you sure the cd is in the" + echo "drive and the drive is ready? Press return to make" + echo -n "another attempt at finding the cdrom drive." + read resp + fi + fi +done # End of cd drive loop + +# Okay, we now have a cdrom drive and know what device to call it by, and +# it should be mounted, so lets reset our path so we can use all the binaries +# from the cd rom drive and export the set up variables for the install script +# +PATH=/sbin:/bin:/usr/bin:/usr/sbin:${CDROM_FILESYSTEM}/sbin:${CDROM_FILESYSTEM}/bin:${CDROM_FILESYSTEM}/usr/bin:${CDROM_FILESYSTEM}/usr/sbin:. + +/install |