From f3ac09ee9a8675459d6d0c6fb58058a10a3d3e90 Mon Sep 17 00:00:00 2001 From: "Jordan K. Hubbard" Date: Wed, 16 Nov 1994 07:51:45 +0000 Subject: 1. Split these scripts into smaller distinct functional units that will be callable _after_ installation in 2.1's system admin tools. This is almost totally revamped now. 2. Support installation from DOS partition or floppy. 3. Many stray bogons eliminated. Perhaps a few introduced. One more rev should fix this up, once I've spammed my test machine a couple of times. 4. Installation from CD now *really* possible. 5. Allow user to specify arbitary subdirectories for NFS mountpoints - UFS, NFS and CD distributions now share many common elements. --- release/instdist.sh | 401 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 401 insertions(+) create mode 100644 release/instdist.sh (limited to 'release/instdist.sh') diff --git a/release/instdist.sh b/release/instdist.sh new file mode 100644 index 000000000000..c4bbfe9759df --- /dev/null +++ b/release/instdist.sh @@ -0,0 +1,401 @@ +#!/stand/sh +# +# instdist - Install a distribution from some sort of media. +# +# Written: November 11th, 1994 +# Copyright (C) 1994 by Jordan K. Hubbard +# +# Permission to copy or use this software for any purpose is granted +# provided that this message stay intact, and at this location (e.g. no +# putting your name on top after doing something trivial like reindenting +# it, just to make it look like you wrote it!). +# +# $Id$ + +if [ "$_INSTINST_SH_LOADED_" = "yes" ]; then + return 0 +else + _INSTINST_SH_LOADED_=yes +fi + +# Grab the miscellaneous functions. +. miscfuncs.sh + +# Set some reasonable defaults. +TAR=tar +TAR_FLAGS="--unlink -xvf" +MNT=/mnt + +# Set the initial state for media installation. +media_set_defaults() { + media_type="" + media_device="" + media_distribution="" + clear="--clear" + ipaddr="" + hostname="" + ether_intr="" + domain="" + netmask="0xffffff00" + ifconfig_flags="" + remote_hostip="" + tmp_dir="/usr/tmp" + ftp_path="ftp://ftp.freebsd.org/pub/FreeBSD/2.0-ALPHA" + nfs_path="" + serial_interface="/dev/tty00" + serial_speed="38400" +} + +# Set the installation media to undefined. +media_reset() +{ + media_device="" + media_type="" + media_distribution="" +} + +# Set the location of our temporary unpacking directory. +media_set_tmpdir() +{ + title="Chose temporary directory" + default_value="/usr/tmp" + if ! input \ +"Please specify the name of a directory containing enough free +space to hold the temporary files for this distribution. At +minimum, a binary distribution will require around 21MB of +temporary space. At maximum, a srcdist may take 30MB or more. +If the directory you specify does not exist, it will be created +for you. If you do not have enough free space to hold both the +packed and unpacked distribution files, consider using the NFS +or CDROM installation methods as they require no temporary +storage.\n\n"; then return 1; fi + tmp_dir=$answer + mkdir -p $tmp_dir + return 0 +} + +media_cd_tmpdir() +{ + if ! cd $tmp_dir; then + error "No such file or directory for ${tmp_dir}, sorry! Please fix this and try again." + return 1 + fi +} + +media_rm_tmpdir() +{ + cd / + if dialog --title "Delete contents?" $clear \ + --yesno "Do you wish to delete the contents of ${tmp_dir}?" 5 72; then + rm -rf $tmp_dir/* + fi +} + +media_extract_dist() +{ + if [ -f extract.sh ]; then + message "Extracting distribution.. Please wait!" + sh ./extract.sh < /dev/ttyv1 > /dev/ttyv1 2>&1 + else + error "Improper distribution. No installation script found!" + fi +} + +media_install_set() +{ + case $media_type in + cdrom|nfs|ufs|doshd) + message "Extracting ${media_distribution} using ${media_type}." + cd ${media_device}/${media_distribution} + media_extract_dist + cd / + return + ;; + + tape) + if ! media_set_tmpdir; then return; fi + if ! media_cd_tmpdir; then return; fi + confirm "Please mount tape for ${media_device}." + if [ "$media_device" = "ftape" ]; then + dialog --title "Results of tape extract" $clear \ + --prgbox "ft | $TAR $TAR_FLAGS -" 10 72 + else + dialog --title "Results of tape extract" $clear \ + --prgbox "$TAR $TAR_FLAGS $media_device" 10 72 + fi + media_extract_dist + media_rm_tmpdir + ;; + + dosfd) + if ! media_set_tmpdir; then return; fi + if ! media_cd_tmpdir; then return; fi + copying="yes" + while [ "$copying" = "yes" ]; do + if dialog --title "Insert distribution diskette" \ + $clear --yesno "Please enter the next diskette and press OK to continue or Cancel if finished" 5 72; then + if ! mount_msdos ${media_device} ${MNT}; then + error "Unable to mount floppy! Please correct." + else + ( tar -cf - -C ${MNT} . | tar -xvf - ) >/dev/ttyv1 2>&1 + umount ${MNT} + fi + else + copying="no" + fi + done + media_extract_dist + media_rm_tmpdir + return + ;; + + ftp) + if ! media_set_tmpdir; then return; fi + if ! media_cd_tmpdir; then return; fi + if ! echo $media_device | grep -v 'ftp://'; then + message "Fetching distribution using ncftp. Use ALT-F2 to see output, ALT-F1 to return." + if ! ncftp $media_device/${media_distribution}/* < /dev/null > /dev/ttyv1 2>&1; then + error "Couldn't fetch ${media_distribution} distribution from ${media_device}!" + else + media_extract_dist + fi + else + dialog --clear + ftp $media_device + dialog --clear + media_extract_dist + fi + media_rm_tmpdir + return + ;; + esac +} + +media_select_distribution() +{ + media_distribution="" + while [ "$media_distribution" = "" ]; do + + dialog $clear --title "Please specify a distribution to load" \ + --menu \ +"FreeBSD is separated into a number of distributions for ease \n\ +of installation. Depending on how much hard disk space you have \n\ +available, you may chose to load one or all of them. Optional \n\ +and mandatory distributions are so noted. Please also note that \n\ +the secrdist is NOT FOR EXPORT from the U.S.! Please don't \n\ +endanger U.S. ftp sites by getting it illegally. Thank you!\n\n" \ +"Please select one (we'll come back to this menu later):" 20 76 6 \ + "?diskfree" "Uh, first, how much disk space do I have free?" + "bindist" "The ${DISTNAME} base distribution (mandatory - 80MB)" \ + "srcdist" "The ${DISTNAME} source distribution (optional - 120MB)" \ + "secrdist" "The ${DISTNAME} DES distribution (optional - 5MB)" \ + "compat1xdist" "The FreeBSD 1.x binary compatability dist (optional - 2MB)"\ + "packages" "The ${DISTNAME} optional software distribution (user choice)" \ + 2> ${TMP}/menu.tmp.$$ + retval=$? + media_distribution=`cat ${TMP}/menu.tmp.$$` + rm -f ${TMP}/menu.tmp.$$ + if ! handle_rval $retval; then return 1; fi + if [ $media_distribution = "?diskfree" ]; then + if df -k > ${TMP}/df.out; then + dialog $clear \ + --title "How much free space do I have?" \ + --textbox ${TMP}/df.out 15 76 + else + error "Couldn't get disk usage information! :-(" + fi + media_distribution="" + fi + done +} + +media_get_possible_subdir() +{ + default_value="" + title="Distribution Subdirectory" + if input \ +"If the distributions are in a subdirectory of the mount point, +please enter it here (no leading slash - it should be relative +to the mount point).\n\n"; then + if [ "$answer" != "" ]; then + media_device=${media_device}/$answer + fi + fi +} + +# Get values into $media_type and $media_device. Call network initialization +# if necessary. +media_chose() { + while [ "$media_device" = "" ]; do + + dialog $clear --title "Installation From" \ +--menu "Before installing a distribution, you need to chose \n\ +and/or configure your method of installation. Please pick from \n\ +one of the following options. If none of the listed options works \n\ +for you then your best bet may be to simply hit ESC twice to get \n\ +a subshell and proceed manually on your own. If you are already \n\ +finished with installation, select cancel to go on.\n\n\ + Please choose one of the following:" 20 72 7 \ + "?Kern" "Please show me the kernel boot messages again!" \ + "Tape" "Load distribution from SCSI, QIC or floppy tape" \ + "CDROM" "Load distribution from SCSI or Mitsumi CDROM" \ + "DOS" "Load from DOS floppies or a DOS hard disk partition" \ + "FTP" "Load distribution using FTP" \ + "UFS" "Load the distribution from existing UFS partition" \ + "NFS" "Load the distribution over NFS" 2> ${TMP}/menu.tmp.$$ + retval=$? + choice=`cat ${TMP}/menu.tmp.$$` + rm -f ${TMP}/menu.tmp.$$ + if ! handle_rval $retval; then return 1; fi + + case $choice in + ?Kern) + if dmesg > ${TMP}/dmesg.out; then + dialog $clear \ + --title "What do I have in this machine again?" \ + --textbox ${TMP}/dmesg.out 22 76 + else + error "Couldn't get dmesg information! :-(" + fi + ;; + + Tape) + dialog $clear --title "Chose Tape Type" \ +--menu "Which type of tape drive do you have attached to your \n\ +system? FreeBSD supports the following types:\n\n\ + Choose one of the following:" 20 72 3 \ + "SCSI" "SCSI tape drive attached to supported SCSI controller" \ + "QIC" "QIC tape drive (Colorado Jumbo, etc)" \ + "floppy" "Floppy tape drive" \ + 2> ${TMP}/menu.tmp.$$ + retval=$? + choice=`cat ${TMP}/menu.tmp.$$` + rm -f ${TMP}/menu.tmp.$$ + if ! handle_rval $retval; then continue; fi + media_type=tape; + case $choice in + SCSI) + media_device=/dev/rst0 + ;; + QIC) + media_device=/dev/rwt0 + ;; + floppy) + media_device=ftape + ;; + esac + ;; + + CDROM) + dialog $clear --title "Chose CDROM Type" \ +--menu "Which type of CDROM drive do you have attached to your \n\ +system? FreeBSD supports the following types:\n\n\ + Choose one of the following:" 15 72 2 \ + "SCSI" "SCSI CDROM drive attached to supported SCSI controller" \ + "Mitsumi" "Mitsumi CDROM drive" \ + 2> ${TMP}/menu.tmp.$$ + retval=$? + choice=`cat ${TMP}/menu.tmp.$$` + rm -f ${TMP}/menu.tmp.$$ + if ! handle_rval $retval; then continue; fi + media_type=cdrom; + case $choice in + SCSI) + media_device=/dev/cd0a + ;; + Mitsumi) + media_device=/dev/mcd0a + ;; + esac + if ! mount_cd9660 $media_device ${MNT} > /dev/ttyv1 2>&1; then + error "Unable to mount $media_device on ${MNT}" + media_device="" + else + media_device=${MNT} + media_get_possible_subdir + fi + ;; + + DOS) + default_value="/dev/fd0" + if input \ +"Please specify the device pointing at your DOS partition or +floppy media. For a hard disk, this might be something like +/dev/wd0h or /dev/sd0h (as identified in the disklabel editor). +For the "A" floppy drive, it's /dev/fd0, for the "B" floppy +drive it's /dev/fd1\n\n"; then + media_device=$answer + if echo $media_device | grep -v 'fd://'; then + if ! mount_msdos $media_device ${MNT} > /dev/ttyv1 2>&1; then + error "Unable to mount $media_device" + media_device="" + else + message "$media_device mounted successfully" + media_type=doshd + media_device=${MNT} + media_get_possible_subdir + fi + else + media_type=dosfd + fi + fi + ;; + + FTP) + if ! setup_network; then continue; fi + title="FTP Installation Information" + default_value="$ftp_path" + if ! input \ +"Please specify the machine and directory location of the +distribution you wish to load. This should be either a \"URL style\" +specification (e.g. ftp://ftp.freeBSD.org/pub/FreeBSD/...) or simply +the name of a host to connect to. If only a host name is specified, +the installation assumes that you will properly connect and \"mget\" +the files yourself.\n\n"; then continue; fi + media_type=ftp + media_device=$answer + ftp_path=$media_device + ;; + + NFS) + if ! setup_network; then continue; fi + title="NFS Installation Information" + default_value="$nfs_path" + if ! input \ +"Please specify a machine and directory mount point for the +distribution you wish to load. This must be in machine:dir +format (e.g. zooey:/a/FreeBSD/${DISTNAME}). The remote +directory *must* be be exported to your machine (or globally) +for this to work!\n\n"; then continue; fi + media_type=nfs + nfs_path=$answer + if ! mount_nfs $nfs_path ${MNT} > /dev/ttyv1 2>&1; then + error "Unable to mount $nfs_path" + else + message "$nfs_path mounted successfully" + media_device=${MNT} + media_get_possible_subdir + fi + ;; + + UFS) + dialog $clear --title "User Intervention Requested" --msgbox " +Please mount the filesystem you wish to use somewhere convenient and +exit the shell when you're through. I'll ask you for the location +of the distribution when we come back." 12 72 + dialog --clear + /stand/sh + title="Please enter directory" + default_value="${MNT}/bindist" + if input "Ok, now give me the full pathname of the directory where you've got the distribution."; then + if [ ! -f $answer/extract.sh ]; then + error "That's not a valid distribution" + else + media_type=ufs + media_device=$answer + fi + fi + ;; + esac + done +} -- cgit v1.2.3