#!/bin/sh

PATH=/sbin:$PATH
export PATH

if [ "$1" = "" -o "$2" = "" -o "$3" != "" ]; then
    echo "usage: $0 <initrd-image> <kernel> (ex: $0 /boot/initrd 2.0.3)" >&2
    exit 1
fi

if [ "$1" = "--version" ]; then
    echo "mkinitrd: version 1.0"
    exit 1
fi

if [ -f $1 ]; then
    echo "$1 already exists." >&2
    exit 1
fi

if [ ! -d /lib/modules/$2/scsi ]; then
    echo "/lib/modules/$2/scsi is not a directory." >&2
    exit 1
fi

if [ ! -f /etc/conf.modules ]; then
    exit 0
fi

if ! grep -q scsi_hostadapter /etc/conf.modules >/dev/null ; then
    exit 0
fi

MODULE=`grep scsi_hostadapter /etc/conf.modules | awk '{ print $3 }'`
IMAGE=/tmp/initrd.img-$$
MNTPOINT=/tmp/initrd.mnt-$$
RCFILE=$MNTPOINT/linuxrc

if [ -f $IMAGE ]; then
    echo "$IMAGE already exists. Remove it and try again" >&2
    exit 1
fi

dd if=/dev/zero of=$IMAGE bs=1k count=1500 2> /dev/null

for devnum in 0 1 2 3 4 5 6 7 8; do
    if losetup /dev/loop$devnum $IMAGE 2>/dev/null ; then break; fi
done

if [ "$devnum" = "8" ]; then
    rm -rf $MNTPOINT $IMAGE
    echo "All of your loopback devices are in use!" >&2
    exit 1
fi

LODEV=/dev/loop$devnum

mke2fs $LODEV 1500 >/dev/null 2>/dev/null

mkdir $MNTPOINT
mount -t ext2 $LODEV $MNTPOINT

mkdir -p $MNTPOINT/lib
mkdir -p $MNTPOINT/bin
mkdir -p $MNTPOINT/etc
mkdir -p $MNTPOINT/dev

cp -a /lib/libc.so* $MNTPOINT/lib
cp -a /lib/ld-linux.so* $MNTPOINT/lib
cp -a /lib/modules/$2/scsi/$MODULE.o $MNTPOINT/lib
cp -a /etc/ld.so.cache $MNTPOINT/etc
cp -a /bin/ash $MNTPOINT/bin/sh
cp -a /sbin/insmod $MNTPOINT/bin

for n in console null ram systty tty[1234]; do
    cp -a /dev/$n $MNTPOINT/dev
done

echo "#!/bin/sh" > $RCFILE
echo "" >> $RCFILE
echo "echo \"Loading $MODULE.o SCSI module for root filesystem\"" >> $RCFILE
echo "insmod /lib/$MODULE.o" >> $RCFILE

chmod +x $RCFILE

umount $MNTPOINT
losetup -d $LODEV

gzip < $IMAGE > $1
rm -rf $MNTPOINT $IMAGE

