eeee6ddd2b
have a bogus trailing `netmask' with no argument. Fixed. Rod: Please take this into 1.1 Release.
369 lines
8.6 KiB
Bash
369 lines
8.6 KiB
Bash
#!bin/sh
|
||
# $Id: cpio.magic,v 1.5 1994/04/17 19:57:35 rgrimes 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 </etc/fstab
|
||
if [ ! "$msdos_device" ]; then
|
||
echo
|
||
echo "Cannot find MS-DOS in filesystem table"
|
||
continue
|
||
fi
|
||
drive=C; altdrive=C
|
||
while :; do
|
||
echo
|
||
echo -n "Read from which MS-DOS drive C: directory? [/] "
|
||
read resp junk
|
||
newdir=$(echo "${resp:-/}" | \
|
||
awk '{ sub(/^[Cc]*:*/, ""); gsub(/\\/, "/"); gsub(/^\/*/, ""); gsub(/\/*$/, ""); print $0 }')
|
||
if [ -d ${msdos_dir}/${newdir} ]; then
|
||
subdir=$newdir
|
||
break
|
||
else
|
||
echo "C:/${newdir}: No such directory"
|
||
fi
|
||
done
|
||
;;
|
||
q*|Q*)
|
||
drive=q
|
||
;;
|
||
\?*)
|
||
echo
|
||
echo "Enter: To:"
|
||
echo "------ ---"
|
||
echo " a Read from floppy drive A:"
|
||
echo " b Read from floppy drive B:"
|
||
echo " c Read from MS-DOS hard drive C:"
|
||
echo " ab Alternate between A: and B:, starting with A:"
|
||
echo " ba Alternate between A: and B:, starting with B:"
|
||
echo " q Quit"
|
||
echo
|
||
;;
|
||
esac
|
||
done
|
||
verbose=-v
|
||
interactive=-i
|
||
if [ "$drive" = "C" ]; then
|
||
dir=${msdos_dir}
|
||
elif [ "$drive" != "q" ]; then
|
||
dir=/tmp/floppy
|
||
[ -d $dir ] && umount $dir >/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 xvf /dev/rwt0
|
||
}
|
||
load_scsi_tape()
|
||
{
|
||
tmp_dir
|
||
echo -n "Insert tape into SCSI tape drive and hit return to continue: "
|
||
read foo
|
||
tar 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 hack to eliminate busy files, copy them to /tmp and use them
|
||
#from there... even uglier.. we CAN NOT LOAD libc.so.1.0 from the tar
|
||
#balls or it spams tar!!
|
||
cp -p /bin/cat /usr/bin/gunzip /usr/bin/tar /tmp
|
||
|
||
#XXX more 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
|
||
/tmp/cat "$i"* |
|
||
/tmp/gunzip |
|
||
(cd / ; /tmp/tar --extract --file - --preserve-permissions --exclude libc.so.1.0 ${tarverbose} )
|
||
done
|
||
rm -f /tmp/cat /tmp/gunzip /tmp/tar
|
||
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
|
||
|
||
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."
|
||
}
|