mirror of
https://review.haiku-os.org/haiku
synced 2024-11-23 15:28:58 +01:00
108987eae1
if this still works even. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30180 a95241bf-73f2-0310-859d-f6bbb57e9c96
125 lines
2.9 KiB
Bash
125 lines
2.9 KiB
Bash
#!/bin/sh
|
|
|
|
usage() {
|
|
echo "Usage: makebootfloppy [-cd] [-base <directory>] [-preserve] [-image <target>]"
|
|
echo "-cd : Creates a boot floppy capable of booting to a CD."
|
|
echo " If not specified, the boot floppy will only be able to boot"
|
|
echo " systems from hard drives."
|
|
echo "-base : Specifies the base directory of the system you wish to make"
|
|
echo " a boot floppy from. Defaults to /boot"
|
|
echo "-preserve : Leaves a copy of the floppy image in /tmp (only valid when"
|
|
echo " used with the -cd option)."
|
|
echo "-image : writes the floppy image to the specified file - this implies"
|
|
echo " the -cd option."
|
|
exit $1
|
|
}
|
|
|
|
BASE=/boot
|
|
CD=0
|
|
PRESERVE=0
|
|
IMAGE=/dev/disk/floppy/raw
|
|
|
|
while [ "x$1" != "x" ] ; do
|
|
if [ "$1" = "-help" ] || [ "$1" = "--help" ] ; then
|
|
usage 0
|
|
elif [ "$1" = "-cd" ] ; then
|
|
CD=1
|
|
elif [ "$1" = "-preserve" ] ; then
|
|
PRESERVE=1
|
|
elif [ "$1" = "-image" ] ; then
|
|
shift
|
|
IMAGE=$1
|
|
CD=1
|
|
if [ "x$1" = "x" ] ; then
|
|
echo "-image requires an argument."
|
|
usage 1
|
|
fi
|
|
elif [ "$1" = "-base" ] ; then
|
|
shift
|
|
BASE=$1
|
|
if [ "x$1" = "x" ] || [ ! -d $BASE ] ; then
|
|
echo "-base requires a directory argument."
|
|
usage 1
|
|
fi
|
|
else
|
|
echo "Invalid option: $1"
|
|
usage 1
|
|
fi
|
|
shift
|
|
done
|
|
|
|
if [ $CD = 1 ] ; then
|
|
rm -f /tmp/boot.tgz /tmp/boot.img
|
|
|
|
echo "Creating boot image..."
|
|
|
|
mkdir -p /tmp/system
|
|
cp $BASE/system/kernel_x86 /tmp/system/
|
|
oldCWD=$(pwd)
|
|
|
|
cd /tmp
|
|
tar chf /tmp/boot.tar system/kernel_x86
|
|
rm -r /tmp/system
|
|
|
|
cd $oldCWD
|
|
cd $BASE
|
|
pwd
|
|
tar rvhf /tmp/boot.tar \
|
|
system/add-ons/kernel/busses/ide \
|
|
system/add-ons/kernel/bus_managers \
|
|
system/add-ons/kernel/file_systems/bfs \
|
|
system/add-ons/kernel/generic \
|
|
system/add-ons/kernel/partitioning_systems \
|
|
system/add-ons/kernel/drivers/disk/scsi/scsi* \
|
|
system/add-ons/kernel/file_systems/bfs \
|
|
> /dev/null
|
|
# system/add-ons/kernel/boot \
|
|
gzip -c /tmp/boot.tar > /tmp/boot.tgz
|
|
rm /tmp/boot.tar
|
|
cd $oldCWD
|
|
if [ $? != 0 ] ; then
|
|
echo "Error creating boot floppy"
|
|
exit 1
|
|
fi
|
|
|
|
dd if=/dev/zero of=/tmp/boot.img bs=1k count=1440
|
|
if [ $? != 0 ] ; then
|
|
echo "Error creating temporary boot image"
|
|
exit 1
|
|
fi
|
|
dd if=$BASE/system/haiku_loader of=/tmp/boot.img conv=notrunc
|
|
dd if=/tmp/boot.tgz of=/tmp/boot.img bs=192k seek=1 conv=notrunc
|
|
|
|
echo "Writing boot image to "$IMAGE
|
|
dd if=/tmp/boot.img of=$IMAGE bs=72k
|
|
_retval=$?
|
|
|
|
if [ $PRESERVE = 0 ] ; then
|
|
rm -f /tmp/boot.tgz /tmp/boot.img
|
|
fi
|
|
|
|
if [ $_retval != 0 ] ; then
|
|
echo "Error creating boot floppy"
|
|
exit 1
|
|
fi
|
|
else
|
|
# non-CD mode (only writes the bare boot loader)
|
|
|
|
echo "Writing boot loader..."
|
|
dd if=$BASE/system/haiku_loader of=$IMAGE bs=18k
|
|
if [ $? != 0 ] ; then
|
|
echo "Error creating boot floppy"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Erasing old boot drivers from the floppy..."
|
|
dd if=/dev/zero of=$IMAGE bs=512 conv=notrunc seek=384 count=1
|
|
if [ $? != 0 ] ; then
|
|
echo "Error creating boot floppy"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "Done!"
|
|
exit 0
|