cecf451da1
New port containing an ITS RP06 filesystem image for KLH10 PDP-10 emulator. Now's your chance to see firsthand what was happening at MIT in the 60s through the early 90s. Run the original versions of Emacs on TECO and Maclisp, etc. PR: ports/39912 Submitted by: Ken Stailey <kstailey@speakeasy.net>
217 lines
4.8 KiB
Bash
217 lines
4.8 KiB
Bash
#! /bin/sh
|
|
|
|
# $FreeBSD$
|
|
|
|
# 1) zcat the PI fs image into a user's directory (the compressed
|
|
# image location is also configurable via "make install")
|
|
#
|
|
# 2) copy or lndir the /usr/local/share/klh10-ks-its/* (this location
|
|
# is immutable) bits into a user's directory
|
|
#
|
|
# 3) generate the klh-kn-its-freebsd .ini file for the user
|
|
#
|
|
# 4) generate ~/.itsrc file for its(1) command so that multple users
|
|
# can use its(1) with different filesystem images.
|
|
|
|
umask 022
|
|
|
|
# remove symlinks in cleanup()?
|
|
|
|
cleanup() {
|
|
rm -f $KLH10_HOME/@PI-IMG@
|
|
echo its-install-user: Terminating.
|
|
exit 1
|
|
}
|
|
|
|
trap cleanup 1 2 3 15
|
|
|
|
validate_ip() {
|
|
echo $1 | grep -q -s '[^0-9\.]'
|
|
if [ $? != 1 ]; then
|
|
echo its-install-user: IP address must be digits and periods only.
|
|
return 1
|
|
fi
|
|
echo $1 | grep -q -s '\..*\..*\.'
|
|
if [ $? != 0 ]; then
|
|
echo its-install-user: IP address must have at least three periods.
|
|
return 1
|
|
fi
|
|
echo $1 | grep -q -s '\..*\..*\..*\.'
|
|
if [ $? = 0 ]; then
|
|
echo its-install-user: IP address must not exceed three periods.
|
|
return 1
|
|
fi
|
|
echo $1 | grep -q -s '\.\.'
|
|
if [ $? = 0 ]; then
|
|
echo its-install-user: IP address must not have consecutive periods.
|
|
return 1
|
|
fi
|
|
OLDIFS="$IFS"
|
|
IFS=.
|
|
set $1
|
|
for i in $* ; do
|
|
if [ $i -gt 255 ]; then
|
|
echo its-install-user: Octets of IP address must not exceed 255.
|
|
IFS="$OLDIFS"
|
|
return 1
|
|
fi
|
|
done
|
|
IFS="$OLDIFS"
|
|
return 0
|
|
}
|
|
|
|
in_network=false
|
|
for i in `groups`; do
|
|
if [ $i = network ]; then
|
|
in_network=true
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ `whoami` = root ]; then
|
|
in_network=true
|
|
fi
|
|
|
|
if [ $in_network = false ]; then
|
|
echo WARNING: You must be in group network in order to run a networked ITS.
|
|
echo WARNING: You may still run a non-networked ITS.
|
|
fi
|
|
|
|
if [ ! -d @KLH-SHARE@ ]; then
|
|
echo its-install-user: Can\'t find the emulator directory.
|
|
cleanup
|
|
fi
|
|
|
|
cd @KLH-SHARE@
|
|
|
|
if [ ! -r @PI-IMG@.bz2 ]; then
|
|
echo its-install-user: The compressed PI disk image is missing.
|
|
cleanup
|
|
fi
|
|
|
|
valid_input=false
|
|
while [ $valid_input = false ]; do
|
|
KLH10_HOME=~/klh10-its-home
|
|
echo Where do you want to install the 170MB filesystem image\?
|
|
echo -n "[default: $KLH10_HOME]: "
|
|
read ans
|
|
if [ "$ans" != "" ]; then
|
|
KLH10_HOME=$ans
|
|
fi
|
|
|
|
if [ -e $KLH10_HOME -a ! -d $KLH10_HOME ]; then
|
|
echo There already is a non-directory $KLH10_HOME in the filesystem.
|
|
continue
|
|
fi
|
|
if [ ! -d $KLH10_HOME ]; then
|
|
echo -n "$KLH10_HOME is not an existing directory. Create it? (y/n) "
|
|
read yorn
|
|
case "$yorn" in
|
|
y|Y)
|
|
if ! mkdir -p $KLH10_HOME ; then
|
|
echo its-install-user: Can\'t make the target directory.
|
|
cleanup
|
|
else
|
|
valid_input=true
|
|
fi
|
|
;;
|
|
n|N)
|
|
echo Type the interupt key to quit or try again.
|
|
;;
|
|
*)
|
|
echo "I do not recognize your answer. ($yorn)"
|
|
;;
|
|
esac
|
|
elif [ ! -w $KLH10_HOME ]; then
|
|
if ! chmod u+w $KLH10_HOME || chmod g+w $KLH10_HOME; then
|
|
echo its-install-user: Can\'t write in $KLH10_HOME
|
|
elif [ ! -w $KLH10_HOME ]; then
|
|
echo its-install-user: Can\'t write in $KLH10_HOME
|
|
else
|
|
valid_input=true
|
|
fi
|
|
else
|
|
valid_input=true
|
|
fi
|
|
done
|
|
|
|
echo Extracting @PI-IMG@.bz2 into $KLH10_HOME
|
|
bzcat @PI-IMG@.bz2 > $KLH10_HOME/@PI-IMG@
|
|
|
|
if [ $? != 0 ]; then
|
|
echo its-install-user: What a mess--the extract failed.
|
|
cleanup
|
|
fi
|
|
|
|
echo Linking up the emulator support files.
|
|
for i in *; do
|
|
case $i in
|
|
@PI-IMG@.bz2) # exclusions
|
|
;;
|
|
*)
|
|
rm -f $KLH10_HOME/$i && ln -s @KLH-SHARE@/$i $KLH10_HOME
|
|
if [ $? != 0 ]; then
|
|
echo its-install-user: Failed to make symlinks.
|
|
cleanup
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
cd @KLH-LIBEX@
|
|
for i in *; do
|
|
rm -f $KLH10_HOME/$i && ln -s @KLH-LIBEX@/$i $KLH10_HOME
|
|
if [ $? != 0 ]; then
|
|
echo its-install-user: Failed to make symlinks.
|
|
cleanup
|
|
fi
|
|
done
|
|
cd $KLH10_HOME
|
|
|
|
EM_IP=10.134.198.236
|
|
valid_input=false
|
|
while [ $valid_input = false ]; do
|
|
echo -n "What is the IP address for the emulated PDP-10? [$EM_IP]: "
|
|
read ans
|
|
if [ "$ans" != "" ]; then
|
|
if validate_ip $ans ; then
|
|
valid_input=true
|
|
EM_IP=$ans
|
|
fi
|
|
else
|
|
valid_input=true
|
|
fi
|
|
done
|
|
|
|
GW_IP=10.0.0.1
|
|
valid_input=false
|
|
while [ $valid_input = false ]; do
|
|
echo -n "What is the IP address for the gateway' [$GW_IP]: "
|
|
read ans
|
|
if [ "$ans" != "" ]; then
|
|
if validate_ip $ans ; then
|
|
valid_input=true
|
|
GW_IP=$ans
|
|
fi
|
|
else
|
|
valid_input=true
|
|
fi
|
|
done
|
|
|
|
sed -e "s;@IPADDR@;$EM_IP;g" \
|
|
-e "s;@GWADDR@;$GW_IP;g" \
|
|
-e "s;@KLH-HOME@;$KLH10_HOME;g" \
|
|
< klh10-kn-freebsd.ini.in > klh10-kn-freebsd.ini
|
|
if [ $? != 0 ]; then
|
|
echo its-install-user: Failed to generate ini file.
|
|
cleanup
|
|
fi
|
|
rm -f klh10-kn-freebsd.ini.in
|
|
|
|
rm -f ~/itsrc
|
|
echo KLH10_HOME=$KLH10_HOME > ~/.itsrc
|
|
echo PI_IMAGE=$KLH10_HOME/@PI-IMG@ >> ~/.itsrc
|
|
if [ $? != 0 ]; then
|
|
echo its-install-user: Failed to generate rc file.
|
|
cleanup
|
|
fi
|