#!bin/sh # $Id: cpio.magic,v 1.12 1994/06/28 07:20:30 jkh Exp $ # set_tmp_dir() { def_tmp_dir=`pwd` [ "$def_tmp_dir" = "/" ] && def_tmp_dir=/usr/distrib echo -n "Where do we ${1:-put} the distrbution files? [${def_tmp_dir}] " read tmp_dir [ ! "$tmp_dir" ] && tmp_dir=$def_tmp_dir if [ ! -d "$tmp_dir" ]; then /bin/rm -rf $tmp_dir mkdir -p $tmp_dir fi echo } tmp_dir() { if [ "$tmp_dir" = "" ]; then set_tmp_dir $1 fi cd $tmp_dir } load_fd() { tmp_dir drive= altdrive= subdir= while [ -z "$drive" ]; do echo -n "Read from which drive (or ? for help)? [c] " read answer junk case "${answer:-c}" in a*b|A*B) drive=A; altdrive=B ;; b*a|B*A) drive=B; altdrive=A ;; a*|A*) drive=A; altdrive=A ;; b*|B*) drive=B; altdrive=B ;; c*|C*) while read data; do msdos_device=`expr X"$data" : 'X[ ]*\([^ ]*\)[^M]*pcfs'` msdos_dir=`expr X"$data" : 'X[ ]*[^ ]*[ ]*\([^ ]*\)'` [ "${msdos_device}" ] && break done /dev/null 2>&1 [ -f $dir ] && rm -f $dir mkdir -p $dir fi while [ "$drive" != "q" ] do device=/dev/fd0 [ "$drive" = "B" ] && device=/dev/fd1 [ "$drive" = "C" ] && device=${msdos_device} echo; if [ "$drive" != "C" ]; then echo "Insert floppy in drive $drive:, then press RETURN to copy files," echo -n "or enter option (? for help): " else echo -n "Press RETURN to copy files, or enter option (? for help): " fi read answer junk case "${answer:-g}" in c*|C*) if [ "$drive" != "C" ]; then echo "Cannot change directory: not reading from MS-DOS drive C:" else echo echo -n "Read from which MS-DOS drive C: directory? [/${subdir}] " read resp junk [ ! "$resp" ] && resp="/$subdir" absolute=`expr X"$resp" : 'X[Cc]*:*\([/\]\)'` subsub=$(echo "${resp}" | \ awk '{ sub(/^[Cc]*:*/, ""); gsub(/\\/, "/"); gsub(/^\/*/, ""); gsub(/\/*$/, ""); print $0 }') if [ "$absolute" -o ! "$subdir" ]; then newsub=$subsub else newsub=$subdir/$subsub fi if [ -d ${dir}/${newsub} ]; then subdir=$newsub else echo "C:/${newsub}: No such directory" fi fi ;; g*|G*) sync if [ "$drive" = "C" ]; then [ "$verbose" ] && { echo; echo "Copying files from MS-DOS C:/${subdir}"; } cp ${msdos_dir}/${subdir}/* . sync elif mount -t pcfs $verbose $device $dir; then [ "$verbose" ] && { echo; echo "Copying files to disk..."; } cp $interactive $dir/* . sync umount $dir tmp=$drive; drive=$altdrive; altdrive=$tmp fi ;; i*|I*) tmp=$interactive; interactive=; [ -z "$tmp" ] && interactive=-i tmp=on; [ -z "$interactive" ] && tmp=off echo "interactive mode is $tmp" ;; l*|L*) sync [ "$verbose" ] && echo "Directory of ${drive}:/${subdir}" if [ "$drive" = "C" ]; then ls -l $dir/${subdir} else umount $dir >/dev/null 2>&1 if mount -t pcfs $device $dir; then ls -l $dir/${subdir} umount $dir fi fi ;; o*|O*) tmp=$drive; drive=$altdrive; altdrive=$tmp ;; q*|Q*) drive=q ;; s*|S*) echo; echo -n "tmp_dir is set to $tmp_dir" [ "$tmp_dir" != "`pwd`" ] && echo -n " (physically `pwd`)" echo; echo "Free space in tmp_dir:" df -k . echo -n "Reading from drive $drive:" [ "$drive" != "$altdrive" ] && echo -n " and drive $altdrive:" echo tmp=on; [ -z "$verbose" ] && tmp=off echo "Verbose mode is $tmp" tmp=on; [ -z "$interactive" ] && tmp=off echo "Interactive mode is $tmp" ;; v*|V*) tmp=$verbose; verbose=; [ -z "$tmp" ] && verbose=-v tmp=on; [ -z "$verbose" ] && tmp=off echo "verbose mode is $tmp" ;; \?) echo echo "Enter: To:" echo "----- ---" echo "(just RETURN) Copy files from ${drive}:/${subdir} to $tmp_dir" echo " c Change directory of MS-DOS drive C:" echo " i Toggle interactive mode (cp -i)" echo " l List directory of current drive" echo " o Read from alternate floppy drive" echo " q Quit" echo " s Show status" echo " v Toggle verbose mode" echo ;; esac done echo "Working directory: `pwd`" unset verbose answer drive altdrive device dir subdir tmp interactive } load_dos() { load_fd } load_qic_tape() { tmp_dir echo -n "Insert tape into QIC tape drive and hit return to continue: " read foo tar --unlink -xvf /dev/rwt0 } load_scsi_tape() { tmp_dir echo -n "Insert tape into SCSI tape drive and hit return to continue: " read foo tar --unlink -xvf /dev/nrst0 } extract() { [ X"$1" = X"" ] && { echo "usage: extract dist-prefix"; return; } tmp_dir find echo -n "Would you like to be verbose about this? [n] " read verbose case $verbose in y*|Y*) tarverbose=--verbose ;; *) tarverbose= ;; esac #XXX ugly hacks to get around busy text files/symlink problems. if [ X"$1" = X"bin" ]; then rm -f /bin/sh.$$ /sbin/init.$$ /etc/termcap.$$ mv /bin/sh /bin/sh.$$ mv /sbin/init /sbin/init.$$ mv /etc/termcap /etc/termcap.$$ fi if [ X"$1" = X"des" ]; then rm -f /sbin/init.$$ mv /sbin/init /sbin/init.$$ fi for i in $*; do cat "$i"* | gunzip | (cd / ; tar --unlink --extract --file - --preserve-permissions ${tarverbose} ) done sync [ X"$1" = X"bin" ] && echo "Run \`configure' to complete installation." echo "(wd is now: `pwd`)" } configure() { 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 > /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*) ;; *) intf= while [ "$intf" = "" ]; do echo -n "What is the primary interface name (i.e. ed0, etc.)? " read intf done echo -n "What is the hostname for this interface? [$hname] " read ifname if [ "$ifname" = "" ]; then ifname=$hname fi ifaddr= while [ "$ifaddr" = "" ]; do echo -n "What is the IP address associated with this interface? " read ifaddr done echo "$ifaddr $ifname `echo $ifname | sed -e s/\.$dname//`" \ >> /etc/hosts echo -n "Does this interface have a special netmask? [n] " read resp case "$resp" in y*) echo -n "What is the netmask? [0xffffff00] " read resp if [ "$resp" = "" ]; then ifnetmask="netmask 0xffffff00" else ifnetmask="netmask $resp" fi ;; *) ifnetmask= ;; esac echo -n "Does this interface 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 "inet $ifname $ifnetmask $ifflags" > /etc/hostname.$intf echo "" echo "WARNING: if you have any more ethernet interfaces, you" echo "will have to configure them by hand. Read the comments" echo "in /etc/netstart to learn how to do this" ;; esac echo echo "Setting up access to a nameserver:" echo -n "Do you want to configure /etc/resolv.conf? [n]: " read resp case "$resp" in y*) echo "OK: Configuring your /etc/resolv.conf" echo "If you need more information about resolv.conf" echo "type \"man 5 resolver\" once you have COMPLETED" echo "installation of the binary distribution." echo "" nameserver= while [ "$nameserver" = "" ]; do echo -n "Enter the IP number of your nameserver: " read nameserver done echo "nameserver $nameserver" > /etc/resolv.conf echo " " ;; *) ;; esac sync echo echo "OK. You should be completely set up now." echo "You should now reboot your machine by issuing the 'reboot' command" echo "after removing anything that happens to be in your floppy drive." }