#!/bin/sh
#
# $Id: INSTALL,v 4.2 1993/03/23 16:44:06 mike Exp $


# Grab the init.d library functions.
. ./init.d/LIB

function get_return()
{
	echo
	echo $use_escapes "Press return to continue: (type 'shell' for shell) \c"
	read i
	if [ "$i" = "shell" ]; then
		echo
		echo "Type 'exit' or control-D to resume installation"
		/bin/sh < /dev/tty > /dev/tty 2>&1
		echo
		echo "(continuing...)"
		echo
	fi
	echo
}

cat << !!MSG1!!


This script installs a complete system boot management package comprising
a System V like version of init, a number of scripts and a set of run
level definitions. These give you complete control over the configuration
of your system. e.g. what ports are enabled, whether or not TCP/IP is
running, whether or not NFS is running, whether or not you go straight
into xdm on boot up etc.

*BEFORE* you continue you should have carefully checked the inittab
in this directory to make sure it does what you want. In particular
you should make sure the getty entries have the correct arguments
for your system. Some gettys use different arguments. You can find
out what yours wants by looking at your existing /etc/inittab file.
Edit the inittab here if necessary.

!!MSG1!!

echo $use_escapes "Are you sure you want to do this? (y/n or shell) \c"
read i
while [ "$i" = "shell" ]
do
	echo
	echo "Type 'exit' or control-D to resume installation"
	/bin/sh < /dev/tty > /dev/tty 2>&1
	echo
	echo "(continuing...)"
	echo
	echo $use_escapes "Are you sure you want to do this? (y/n or shell) \c"
	read i
done
if [ "$i" != "y" -a "$i" != "Y" ]; then
	exit
fi

echo
echo $use_escapes "Have you got some way of booting from floppy? (y/n or shell) \c"
read i
while [ "$i" = "shell" ]
do
	echo
	echo "Type 'exit' or control-D to resume installation"
	/bin/sh < /dev/tty > /dev/tty 2>&1
	echo
	echo "(continuing...)"
	echo
	echo $use_escapes "Have you got some way of booting from floppy? (y/n or shell) \c"
	read i
done
if [ "$i" != "y" -a "$i" != "Y" ]; then
	echo
	echo "Get a bootable disk. If there are any problems with this installation"
	echo "you are going to need it!"
	exit
fi

cat << !!MSG2!!

Ok, I'm trusting you...

First I'll install a few scripts and configure the basics...

!!MSG2!!

echo
echo "Setting up boot scripts /etc/bcheckrc and /etc/brc"
if [ -f /etc/bcheckrc ]; then
	echo "	Backing up /etc/bcheckrc to /etc/bcheckrc.old"
	cp /etc/bcheckrc /etc/bcheckrc.old
fi
if [ -f /etc/brc ]; then
	echo "	Backing up /etc/brc to /etc/brc.old"
	cp /etc/brc /etc/brc.old
fi
cp bcheckrc brc /etc/.
chmod 744 /etc/bcheckrc /etc/brc

get_return

echo
echo "Installing the init scripts in /etc/init.d"
mkdir /etc/init.d > /dev/null 2>&1
chmod 755 /etc/init.d
for i in LIB cron filesys news nfs nfs-fs rpc swap tcp
do
	if [ -f /etc/init.d/$i ]; then
		echo "	Backing up /etc/init.d/$i to /etc/init.d/$i.old"
		mv /etc/init.d/$i /etc/init.d/$i.old
	fi
	cp init.d/$i /etc/init.d/$i
	chmod 755 /etc/init.d/$i
done


get_return

echo
echo "Setting scripts for each run level."
echo "I'll do this by wiping out anything in the /etc/rc?.d directories and"
echo "then installing things as I see fit. If you already had a SYSV style"
echo "init running and had created local scripts which you linked in to the"
echo "rc?.d directories you will need to remake the links later. If you"
echo "put scripts in an rc?.d directory without linking them to init.d they"
echo "will be *lost*! In this case you had better shell out now and do"
echo "something about them."

get_return

mkdir /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d > /dev/null 2>&1
chmod 755 /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d

rm -f /etc/rc0.d/* /etc/rc1.d/* /etc/rc2.d/* /etc/rc3.d/* /etc/rc4.d/* /etc/rc5.d/*

ln -fs /etc/init.d/news /etc/rc0.d/K20news
ln -fs /etc/init.d/cron /etc/rc0.d/K30cron
ln -fs /etc/init.d/nfs /etc/rc0.d/K50nfs
ln -fs /etc/init.d/rpc /etc/rc0.d/K55rpc
ln -fs /etc/init.d/nfs-fs /etc/rc0.d/K58nfs-fs
ln -fs /etc/init.d/tcp /etc/rc0.d/K60tcp
ln -fs /etc/init.d/swap /etc/rc0.d/K69swap
ln -fs /etc/init.d/filesys /etc/rc0.d/K70filesys

ln -fs /etc/init.d/news /etc/rc1.d/K20news
ln -fs /etc/init.d/cron /etc/rc1.d/K30cron
ln -fs /etc/init.d/nfs /etc/rc1.d/K50nfs
ln -fs /etc/init.d/rpc /etc/rc1.d/K55rpc
ln -fs /etc/init.d/nfs-fs /etc/rc1.d/K58nfs-fs
ln -fs /etc/init.d/tcp /etc/rc1.d/K60tcp
ln -fs /etc/init.d/swap /etc/rc1.d/K69swap
ln -fs /etc/init.d/filesys /etc/rc1.d/K70filesys

ln -fs /etc/init.d/nfs /etc/rc2.d/K50nfs
ln -fs /etc/init.d/rpc /etc/rc2.d/K55rpc
ln -fs /etc/init.d/nfs-fs /etc/rc2.d/K58nfs-fs
ln -fs /etc/init.d/tcp /etc/rc2.d/K60tcp
ln -fs /etc/init.d/filesys /etc/rc2.d/S20filesys
ln -fs /etc/init.d/swap /etc/rc2.d/S21swap
ln -fs /etc/init.d/cron /etc/rc2.d/S50cron
ln -fs /etc/init.d/news /etc/rc2.d/S60news

ln -fs /etc/init.d/nfs /etc/rc3.d/K50nfs
ln -fs /etc/init.d/rpc /etc/rc3.d/K55rpc
ln -fs /etc/init.d/filesys /etc/rc3.d/S20filesys
ln -fs /etc/init.d/swap /etc/rc3.d/S21swap
ln -fs /etc/init.d/tcp /etc/rc3.d/S30tcp
ln -fs /etc/init.d/nfs-fs /etc/rc3.d/S35nfs-fs
ln -fs /etc/init.d/cron /etc/rc3.d/S50cron
ln -fs /etc/init.d/news /etc/rc3.d/S60news

ln -fs /etc/init.d/filesys /etc/rc4.d/S20filesys
ln -fs /etc/init.d/swap /etc/rc4.d/S21swap
ln -fs /etc/init.d/tcp /etc/rc4.d/S30tcp
ln -fs /etc/init.d/nfs-fs /etc/rc4.d/S35nfs-fs
ln -fs /etc/init.d/rpc /etc/rc4.d/S35rpc
ln -fs /etc/init.d/nfs /etc/rc4.d/S40nfs
ln -fs /etc/init.d/cron /etc/rc4.d/S50cron
ln -fs /etc/init.d/news /etc/rc4.d/S60news

ln -fs /etc/init.d/filesys /etc/rc5.d/S20filesys
ln -fs /etc/init.d/swap /etc/rc5.d/S21swap
ln -fs /etc/init.d/tcp /etc/rc5.d/S30tcp
ln -fs /etc/init.d/nfs-fs /etc/rc5.d/S35nfs-fs
ln -fs /etc/init.d/rpc /etc/rc5.d/S35rpc
ln -fs /etc/init.d/nfs /etc/rc5.d/S40nfs
ln -fs /etc/init.d/cron /etc/rc5.d/S50cron
ln -fs /etc/init.d/news /etc/rc5.d/S60news

get_return

echo
echo "Creating system default files."
mkdir /etc/default > /dev/null 2>&1
chmod 755 /etc/default

echo
echo "	Your system appears to be called `hostname`. If this is incorrect you"
echo "	must edit the file /etc/default/hostname and reboot for the change to"
echo "	take effect."
hostname > /etc/default/hostname
chmod 644 /etc/default/hostname

get_return

echo
echo "	I will install a dummy /etc/default/swap file. This file lists"
echo "	swap partitions/files and block sizes. Swap partitions (or files"
echo "	or files in /dev) are mkswapped and attached at boot time. Swap"
echo "	files other than those in /dev are mkswapped and attached after"
echo "	the filesystems have been mounted. If you *need* swap it must"
echo "	be in /dev regardless of whether it is a file or partition."
echo "	Note: you still need the swap partition(s) listed in /etc/fstab"
echo "	in order for swapon -a to work."
if [ -f /etc/default/swap ]; then
	echo
	echo "	Oh. You seem to have an /etc/default/swap file. I'll leave"
	echo "	it alone and put mine in as /etc/default/swap.new just in"
	echo "	case you want to check that what you have makes sense with"
	echo "	this file's structure."
	cp default/swap /etc/default/swap.new
	chmod 644 /etc/default/swap
else
	cp default/swap /etc/default/swap
	chmod 644 /etc/default/swap
fi

get_return

echo
echo "	I will install a dummy /etc/default/tcp. If you are running tcp"
echo "	you *will* need to edit this file. Note that the IPADDR line is"
echo "	commented out. An IPADDR defined here overrides the address given"
echo "	in your hosts file. With IPADDR defined here you probably don't"
echo "	need a hosts file if you use named?"
if [ -f /etc/default/tcp ]; then
	echo
	echo "	Oh. You seem to have an /etc/default/tcp file. I'll back"
	echo "	it up to tcp.old and install the new one. You *will* need"
	echo "	to edit this again to set your address and net addresses"
	mv /etc/default/tcp /etc/default/tcp.old
fi
cp default/tcp /etc/default/tcp
chmod 644 /etc/default/tcp

get_return

echo
echo
echo "THE FOLLOWING CHANGES COULD MAKE SYSTEM UNBOOTABLE!"
echo
echo "Have you checked inittab and edited the getty entries as appropriate"
echo $use_escapes "to your system? (y/n or shell) \c"
read i
while [ "$i" = "shell" ]
do
	echo
	echo "Type 'exit' or control-D to resume installation"
	/bin/sh < /dev/tty > /dev/tty 2>&1
	echo
	echo "(continuing...)"
	echo
	echo "Have you checked inittab and edited the getty entries as appropriate"
	echo $use_escapes "to your system? (y/n or shell) \c"
	read i
done
if [ "$i" != "y" -a "$i" != "Y" ]; then
	echo
	echo "DO IT NOW!!!!"
	echo
	echo "When you have done type exit (or control-D) to return to this script"
	/bin/sh
fi

echo
echo $use_escapes "Are you sure you could boot from floppy if necessary? (y/n or shell) \c"
read i
while [ "$i" = "shell" ]
do
	echo
	echo "Type 'exit' or control-D to resume installation"
	/bin/sh < /dev/tty > /dev/tty 2>&1
	echo
	echo "(continuing...)"
	echo
	echo $use_escapes "Are you sure you could boot from floppy if necessary? (y/n or shell) \c"
	read i
done
if [ "$i" != "y" -a "$i" != "Y" ]; then
	echo
	echo "If anything goes wrong you could be well stuffed..."
fi

echo
echo $use_escapes "Are you absolutely sure you want to do this? (y/n or shell) \c"
read i
while [ "$i" = "shell" ]
do
	echo
	echo "Type 'exit' or control-D to resume installation"
	/bin/sh < /dev/tty > /dev/tty 2>&1
	echo
	echo "(continuing...)"
	echo
	echo $use_escapes "Are you absolutely sure you want to do this? (y/n or shell) \c"
	read i
done
if [ "$i" != "y" -a "$i" != "Y" ]; then
	echo
	echo "Installation aborted. Coward :-)"
	exit
fi

echo
echo "Installing new version of init"
if [ ! -f /lib/libc.so.4.3.2 ]; then
	echo "	WHOA!!!! This init needs /lib/libc.so.4.3.2 which you don't appear"
	echo "	to have. You need to get it before I do the final install!"
	echo
	echo "Installation stopped. Missing shared library."
	exit
fi
if [ -f /bin/init ]; then
	echo "	Backing up /bin/init to /bin/init.old"
	rm -f /bin/init.old
	mv /bin/init /bin/init.old
fi
if [ -f /etc/init ]; then
	echo "	Backing up /etc/init to /etc/init.old"
	rm -f /etc/init.old
	mv /etc/init /etc/init.old
fi
cp init/init /etc/init
chmod 700 /etc/init


echo
echo "Setting up the master run level control script"
if [ -f /etc/rc ]; then
	echo "	Backing up /etc/rc to /etc/rc.old"
	cp /etc/rc /etc/rc.old
else
	echo "	Huh?!? You don't seem to have an /etc/rc script."
	echo "	How did this system ever work???"
	echo "	Oh, never mind..."
fi
cp rc /etc/rc
chmod 744 /etc/rc

get_return

if [ -d /sbin ]; then
	echo
	echo "Ah! You have an /sbin! I'll assume you keep your super user only"
	echo "programs there (or intend to) and put mine there."
	spath=/sbin
else
	echo
	echo "Hmmm... You don't have an /sbin directory for super user only programs."
	echo "I'll put mine in /bin..."
	spath=/bin
fi

get_return

echo
echo "You should be using a shutdown from poe's admutils. This attempts to"
echo "do a umount -a before shutting the system down. This is a Good Idea"
echo "especially if you have NFS filesystems mounted."
echo "To be on the safe side I have one here that I'll install for you."
if [ -x /sbin/shutdown ]; then
	echo
	echo "	You have a shutdown in /sbin. I'll back it up to"
	echo "	/sbin/shutdown.old."
	rm -f /sbin/shutdown.old
	mv /sbin/shutdown /sbin/shutdown.old
	rm -f /sbin/reboot /sbin/halt /sbin/fastboot /sbin/fasthalt
fi
if [ -x /bin/shutdown ]; then
	echo
	echo "	You have a shutdown in /bin. I'll back it up to"
	echo "	/bin/shutdown.old."
	rm -f /bin/shutdown.old
	mv /bin/shutdown /bin/shutdown.old
	rm -f /bin/reboot /bin/halt /bin/fastboot /bin/fasthalt
fi
if [ -x /usr/bin/shutdown ]; then
	echo
	echo "	You have a shutdown in /usr/bin. I'll back it up to"
	echo "	/usr/bin/shutdown.old."
	rm -f /usr/bin/shutdown.old
	mv /usr/bin/shutdown /usr/bin/shutdown.old
	rm -f /usr/bin/reboot /usr/bin/halt /usr/bin/fastboot /usr/bin/fasthalt
fi
cp extra/shutdown $spath/shutdown
chmod 755 $spath/shutdown

ln -fs $spath/shutdown $spath/reboot
ln -fs $spath/shutdown $spath/halt
ln -fs $spath/shutdown $spath/fastboot
ln -fs $spath/shutdown $spath/fasthalt

get_return

echo
echo "You also want an up to date mount/umount on your system. I have one"
echo "here which consists of hlu's 98.5 release of mount with the NFS patches"
echo "folded in. I'll install it in /etc and rename any other mounts or"
echo "umounts I can find to mount.old and umount.old respectively."
echo
for i in /etc /sbin /bin /usr/bin
do
	if [ -x $i/mount ]; then
		echo "	Renamed $i/mount to $i/mount.old"
		rm -f $i/mount.old
		mv $i/mount $i/mount.old
	fi
	if [ -x $i/umount ]; then
		echo "	Renamed $i/umount to $i/umount.old"
		rm -f $i/umount.old
		mv $i/umount $i/umount.old
	fi
done
cp extra/mount extra/umount /etc
chmod 755 /etc/mount /etc/umount

get_return

if [ -x /etc/telinit ]; then
	rm -f /etc/telinit
fi
if [ -x /bin/telinit ]; then
	rm -f /bin/telinit
fi
if [ -x /sbin/telinit ]; then
	rm -f /sbin/telinit
fi
if [ "$spath" = "/sbin" ]; then
	echo "I'll put telinit in your /sbin directory..."
	ln -s /etc/init /sbin/telinit
else
	echo "I'll put telinit in your /etc directory..."
	ln -s /etc/init /etc/telinit
fi

get_return

if [ -z "`pathof ctrlaltdel`" ]; then
	echo "If you want init to catch ctrl-alt-del and do a graceful shutdown"
	echo "and reboot you need the ctrlaltdel program from poe's admutils so"
	echo "the kernel can be told what we want to do when the system is booted."
	echo "I have one here :-). I'll install it for you in $spath."
	cp extra/ctrlaltdel $spath/ctrlaltdel
	chmod 700 extra/ctrlaltdel
fi

get_return

echo
echo "Installing the System V-a-like inittab from this directory"
echo "- which you have modified to match your system!"
echo "(If you haven't, shell out now and edit /etc/inittab!)"
if [ -f /etc/inittab ]; then
	cp /etc/inittab /etc/inittab.old
	cp inittab /etc/inittab
	chmod 644 /etc/inittab
fi

get_return

cat << !!MSG3!!


Run level 2 is multiuser but without TCP/IP running.
Run level 3 is mutiluser with TCP/IP running.
Run level 4 is multiuser with TCP/IP and NFS running.
Run level 5 is multiuser with TCP/IP and NFS running and xdm on the console.

No further documentation exists for this. If you are reasonably familiar
with the System V approach to init and run levels then you shouldn't
have any trouble. If you aren't at all familiar then you have three
choices - ask someone local to you who is, email someone who is (or may
be), or post to the comp.os.linux newsgroup. These are listed in order
of preference!

Note that the filesystem checks may be bypassed by using shutdown -f,
fastboot or fasthalt. These create a file called /fastboot before
shutting the system down. If this exists on booting the system comes
up as quickly as possible.

Note also that the default behaviour is to clean /usr/tmp and /tmp and
to delete existing lock files when the system first goes multiuser.

!!MSG3!!

get_return

cat <<!!MSG4!!

SHUTDOWN AND REBOOT YOUR SYSTEM NOW!

It should come up at run level 3 which is a full multiuser system
with all filesystems checked and mounted and TCP/IP up and running.

!!MSG4!!
