#!/bin/bash

PATH=/sbin:/usr/sbin:/bin:/usr/bin:.

LIBRARY_MAJOR=4
LIBRARY_MINOR=5
LIBRARY_SUBMINOR=26
LIBRARY_VERSION="${LIBRARY_MAJOR}.${LIBRARY_MINOR}.${LIBRARY_SUBMINOR}"
PROGRAM=$0

MNT=/tmp/mkboot.$$

function Usage() {
	echo "Usage: $PROGRAM [ -v ] [ -1 | -2 ] [ -b mkbootdir ] [ -k kernal ] [ device ]"
	exit 1
}

MKBOOT_DIR=/usr/lib/mkboot
FLOPPY=0
DISK=0
KERNEL=0
while [ $# != 0 ]
do
	case $1 in
		-v)
			set -x
			shift
			;;
		-d)
			if [ $# -gt 1 ]
			then
				shift
				if [ -r $1 ]
				then
					MKBOOT_DIR=$1
				else
					Usage
				fi
			else
				Usage
			fi
			shift
			;;
		-1)
			if [ ${DISK} = 0 ]
			then
				DISK=1
			else
				Usage
			fi
			shift
			;;
		-2)
			if [ ${DISK} = 0 ]
			then
				DISK=2
			else
				Usage
			fi
			shift
			;;
		-k)
			if [ ${KERNEL} = 0 ]
			then
				if [ $# -gt 1 ]
				then
					shift
					if [ -r $1 ]
					then
						KERNEL=$1
					else
						Usage
					fi
				else
					Usage
				fi
			else
				Usage
			fi
			shift
			;;
		-*)
			Usage
			;;
		*)
			if [ ${FLOPPY} = 0 ]
			then
				FLOPPY=$1
			else
				Usage
			fi
			shift
			;;
	esac
done

if [ ${FLOPPY} = 0 ]
then
	FLOPPY=/dev/fd0
fi

if [ ${DISK} = 0 ]
then
	DISK=1
fi

if [ ${KERNEL} = 0 ]
then
	if [ -e /usr/src/linux/zImage ]
	then
		KERNEL=/usr/src/linux/zImage
	elif [ -e /vmlinuz ]
	then
		KERNEL=/vmlinuz
	else
		echo "Error: No kernel image found."
		exit 1
	fi
fi

if [ ! -b ${FLOPPY} ]
then
	echo "Error: ${FLOPPY} is not a block device."
	exit 1
elif [ ! -e ${FLOPPY} -o ! -r ${FLOPPY} -o ! -w ${FLOPPY} ]
then
	echo "Error: Cannot access ${FLOPPY}."
	exit 1
fi

if [ ${DISK} = 1 ]
then
echo "Creating boot floppy disk #${DISK} on ${FLOPPY} using ${KERNEL}"
elif [ ${DISK} = 2 ]
then
echo "Creating boot floppy disk #${DISK} on ${FLOPPY}"
fi

echo -n "Insert a formatted disk in ${FLOPPY} and then press Enter to continue: "
read BOGUS

echo "Making file system..."
mkfs -t minix -c ${FLOPPY} 1440 > /dev/null

echo "Mounting floppy..."
mkdir ${MNT}
mount -t minix ${FLOPPY} ${MNT}

echo "Making directories..."
mkdir ${MNT}/bin
mkdir ${MNT}/bin2
mkdir ${MNT}/boot
mkdir ${MNT}/dev
mkdir ${MNT}/etc
mkdir ${MNT}/home
mkdir ${MNT}/lib
mkdir ${MNT}/proc
mkdir ${MNT}/root
mkdir ${MNT}/sbin
mkdir ${MNT}/tmp
mkdir ${MNT}/usr
mkdir ${MNT}/usr/bin
mkdir ${MNT}/usr/sbin
mkdir ${MNT}/usr/src
mkdir ${MNT}/usr/src/scripts
mkdir ${MNT}/var
mkdir ${MNT}/var/adm
mkdir ${MNT}/var/lock
mkdir ${MNT}/var/spool
mkdir ${MNT}/var/spool/uucp
mkdir ${MNT}/var/tmp

if [ ${DISK} = 1 ]
then
	mkdir ${MNT}/mnt
fi

echo "Copying files to floppy..."

if [ ${DISK} = 1 ]
then
	${MKBOOT_DIR}/inst -s ${MNT}/bin \
		/bin/bash \
		/bin/chmod \
		/bin/echo \
		/bin/gzip \
		/bin/ln \
		/bin/mount \
		/bin/mkdir \
		/bin/rm
	${MKBOOT_DIR}/inst -s -gz ${MNT}/bin \
		/bin/cp \
		/bin/date \
		/bin/hostname \
		/bin/login \
		/bin/umount
elif [ ${DISK} = 2 ]
then
	${MKBOOT_DIR}/inst -gz ${MNT}/bin \
		/bin/false \
		/bin/true
	${MKBOOT_DIR}/inst -s -gz ${MNT}/bin \
		/bin/arch \
		/bin/cat \
		/bin/chgrp \
		/bin/chown \
		/bin/dd \
		/bin/df \
		/bin/dmesg \
		/bin/ed \
		/bin/kill \
		/bin/ls \
		/bin/mknod \
		/bin/more \
		/bin/mv \
		/bin/pms \
		/bin/ps \
		/bin/pwd \
		/bin/rmdir \
		/bin/sed \
		/bin/setserial \
		/bin/stty \
		/bin/su \
		/bin/sync \
		/bin/tar \
		/bin/tcsh \
		/bin/uname
fi

if [ ${DISK} = 1 ]
then
	${MKBOOT_DIR}/inst ${MNT}/boot \
		/boot/any_b.b \
		/boot/any_d.b \
		/boot/boot.b \
		/boot/chain.b \
		/boot/os2_d.b
fi

if [ ${DISK} = 1 ]
then
	${MKBOOT_DIR}/inst ${MNT}/dev /dev/MAKEDEV
fi

if [ ${DISK} = 1 ]
then
	${MKBOOT_DIR}/inst ${MNT}/lib /lib/ld.so \
		/lib/libc.so.${LIBRARY_VERSION}
elif [ ${DISK} = 2 ]
then
	${MKBOOT_DIR}/inst ${MNT}/lib /lib/ld.so \
		/lib/libm.so.${LIBRARY_VERSION}
fi

if [ ${DISK} = 1 ]
then
	${MKBOOT_DIR}/inst -s ${MNT}/sbin \
		/sbin/agetty \
		/sbin/fsck \
		/sbin/fsck.minix \
		/sbin/simpleinit \
		/sbin/swapon \
		/sbin/update
elif [ ${DISK} = 2 ]
then
	${MKBOOT_DIR}/inst -s ${MNT}/sbin \
		/sbin/mklost+found
	${MKBOOT_DIR}/inst -s -gz ${MNT}/sbin \
		/sbin/badblocks \
		/sbin/cfdisk \
		/sbin/clock \
		/sbin/dumpe2fs \
		/sbin/e2fsck \
		/sbin/fdisk \
		/sbin/flushb \
		/sbin/kbdrate \
		/sbin/ldconfig \
		/sbin/lilo \
		/sbin/mke2fs \
		/sbin/mkfs.minix \
		/sbin/mkswap \
		/sbin/shutdown \
		/sbin/sln \
		/sbin/tune2fs
fi

if [ ${DISK} = 1 ]
then
	${MKBOOT_DIR}/inst -s ${MNT}/usr/bin \
		/usr/bin/touch
elif [ ${DISK} = 2 ]
then
	${MKBOOT_DIR}/inst -gz ${MNT}/usr/bin \
		/usr/bin/clear \
		/usr/bin/reset
	${MKBOOT_DIR}/inst -s -gz ${MNT}/usr/bin \
		/usr/bin/cksum \
		/usr/bin/comm \
		/usr/bin/cut \
		/usr/bin/du \
		/usr/bin/elvis \
		/usr/bin/elvprsv \
		/usr/bin/expand \
		/usr/bin/expr \
		/usr/bin/fdformat \
		/usr/bin/find \
		/usr/bin/fmt \
		/usr/bin/fold \
		/usr/bin/grep \
		/usr/bin/head \
		/usr/bin/hexdump \
		/usr/bin/install \
		/usr/bin/join \
		/usr/bin/ldd \
		/usr/bin/less \
		/usr/bin/mkfifo \
		/usr/bin/od \
		/usr/bin/paste \
		/usr/bin/rdev \
		/usr/bin/setfdprm \
		/usr/bin/setterm \
		/usr/bin/sort \
		/usr/bin/split \
		/usr/bin/sum \
		/usr/bin/tac \
		/usr/bin/tail \
		/usr/bin/tput \
		/usr/bin/tr \
		/usr/bin/unexpand \
		/usr/bin/uniq \
		/usr/bin/wc \
		/usr/bin/whereis \
		/usr/bin/xargs
fi

if [ ${DISK} = 2 ]
then
	${MKBOOT_DIR}/inst -gz ${MNT}/usr/sbin \
		/usr/sbin/ctrlaltdel \
		/usr/sbin/psupdate \
		/usr/sbin/syslogd
fi

if [ ${DISK} = 2 ]
then
	${MKBOOT_DIR}/inst -gz ${MNT}/usr/src/scripts \
		/usr/src/scripts/install.all
fi

if [ ${DISK} = 1 ]
then
	${MKBOOT_DIR}/inst -gz ${MNT}/root \
		${MKBOOT_DIR}/root/.profile \
		${MKBOOT_DIR}/INSTALL
elif [ ${DISK} = 2 ]
then
	${MKBOOT_DIR}/inst ${MNT}/root \
		${MKBOOT_DIR}/root/.profile.inst \
		${MKBOOT_DIR}/root/.cshrc.inst \
		${MKBOOT_DIR}/root/.cshrc
fi

if [ ${DISK} = 1 ]
then
	${MKBOOT_DIR}/inst ${MNT}/etc \
		${MKBOOT_DIR}/etc/adjtime \
		${MKBOOT_DIR}/etc/disktab \
		${MKBOOT_DIR}/etc/fstab \
		${MKBOOT_DIR}/etc/group \
		${MKBOOT_DIR}/etc/inittab \
		${MKBOOT_DIR}/etc/issue \
		${MKBOOT_DIR}/etc/ld.so.conf \
		${MKBOOT_DIR}/etc/lilo.conf \
		${MKBOOT_DIR}/etc/motd \
		${MKBOOT_DIR}/etc/passwd \
		${MKBOOT_DIR}/etc/rc \
		${MKBOOT_DIR}/etc/rc.local \
		${MKBOOT_DIR}/etc/securetty \
		${MKBOOT_DIR}/etc/shells \
		${MKBOOT_DIR}/etc/termcap
elif [ ${DISK} = 2 ]
then
	${MKBOOT_DIR}/inst ${MNT}/etc \
		${MKBOOT_DIR}/etc/fdprm \
		${MKBOOT_DIR}/etc/fstab.inst \
		${MKBOOT_DIR}/etc/lilo.conf.inst \
		${MKBOOT_DIR}/etc/magic \
		${MKBOOT_DIR}/etc/passwd.inst \
		${MKBOOT_DIR}/etc/rc.local.inst \
		${MKBOOT_DIR}/etc/syslog.conf \
		${MKBOOT_DIR}/etc/termcap.inst
fi

if [ ${DISK} = 1 ]
then
	${MKBOOT_DIR}/inst ${MNT}/bin2 \
		${MKBOOT_DIR}/bin2/get_files
elif [ ${DISK} = 2 ]
then
	${MKBOOT_DIR}/inst ${MNT}/bin2 \
		${MKBOOT_DIR}/bin2/make_system
fi

if [ ${DISK} = 1 ]
then
	cat ${KERNEL} > ${MNT}/vmlinuz
	rdev ${MNT}/vmlinuz /dev/fd0
	rdev -v ${MNT}/vmlinuz -3
	rdev -r ${MNT}/vmlinuz 4000
fi

if [ ${DISK} = 1 ]
then
	echo "Making links..."
	cd ${MNT}/bin
   	ln -sf bash sh
   	ln -sf tcsh csh
   	ln -f gzip gunzip
   	ln -f gzip zcat
   	ln -sf hostname dnsdomainname
	cd ${MNT}/lib
   	ln -sf libc.so.${LIBRARY_VERSION} libc.so.${LIBRARY_MAJOR}
   	ln -sf libm.so.${LIBRARY_VERSION} libm.so.${LIBRARY_MAJOR}
	cd ${MNT}/sbin
   	ln -sf agetty getty
   	ln -sf shutdown halt
   	ln -sf shutdown reboot
   	ln -sf shutdown fastboot
   	ln -sf shutdown fasthalt
   	ln -sf fsck mkfs
   	ln -sf simpleinit init
   	ln -sf e2fsck fsck.ext2
   	ln -sf mke2fs mkfs.ext2
   	ln -sf swapon swapoff

	cp /dev/null ${MNT}/etc/mtab
	cp /dev/null ${MNT}/var/adm/wtmp

	chmod 777 ${MNT}/var/tmp ${MNT}/tmp
	chmod -R 777 ${MNT}/var/lock ${MNT}/var/spool

	echo "Making devices..."
	cd ${MNT}/dev
	./MAKEDEV generic

	echo "Installing lilo..."
	ROOT=${MNT} lilo > /dev/null
fi

echo "Unmounting floppy..."
cd /
umount ${FLOPPY}
rmdir ${MNT}

echo
echo "All finished."
