1 | #!/bin/sh
|
---|
2 |
|
---|
3 | usage() {
|
---|
4 | echo "Usage: makebootfloppy [-cd] [-base <directory>] [-preserve] [-image <target>]"
|
---|
5 | echo "-cd : Creates a boot floppy capable of booting to a CD."
|
---|
6 | echo " If not specified, the boot floppy will only be able to boot"
|
---|
7 | echo " systems from hard drives."
|
---|
8 | echo "-base : Specifies the base directory of the system you wish to make"
|
---|
9 | echo " a boot floppy from. Defaults to /boot"
|
---|
10 | echo "-preserve : Leaves a copy of the floppy image in /tmp (only valid when"
|
---|
11 | echo " used with the -cd option)."
|
---|
12 | echo "-image : writes the floppy image to the specified file - this implies"
|
---|
13 | echo " the -cd option."
|
---|
14 | exit $1
|
---|
15 | }
|
---|
16 |
|
---|
17 | BASE=/boot
|
---|
18 | CD=0
|
---|
19 | PRESERVE=0
|
---|
20 | IMAGE=/dev/disk/floppy/raw
|
---|
21 |
|
---|
22 | while [ "x$1" != "x" ] ; do
|
---|
23 | if [ "$1" = "-help" ] || [ "$1" = "--help" ] ; then
|
---|
24 | usage 0
|
---|
25 | elif [ "$1" = "-cd" ] ; then
|
---|
26 | CD=1
|
---|
27 | elif [ "$1" = "-preserve" ] ; then
|
---|
28 | PRESERVE=1
|
---|
29 | elif [ "$1" = "-image" ] ; then
|
---|
30 | shift
|
---|
31 | IMAGE=$1
|
---|
32 | CD=1
|
---|
33 | if [ "x$1" = "x" ] ; then
|
---|
34 | echo "-image requires an argument."
|
---|
35 | usage 1
|
---|
36 | fi
|
---|
37 | elif [ "$1" = "-base" ] ; then
|
---|
38 | shift
|
---|
39 | BASE=$1
|
---|
40 | if [ "x$1" = "x" ] || [ ! -d $BASE ] ; then
|
---|
41 | echo "-base requires a directory argument."
|
---|
42 | usage 1
|
---|
43 | fi
|
---|
44 | else
|
---|
45 | echo "Invalid option: $1"
|
---|
46 | usage 1
|
---|
47 | fi
|
---|
48 | shift
|
---|
49 | done
|
---|
50 |
|
---|
51 | if [ $CD = 1 ] ; then
|
---|
52 | rm -f /tmp/boot.tgz /tmp/boot.img
|
---|
53 |
|
---|
54 | echo "Creating boot image..."
|
---|
55 |
|
---|
56 | mkdir -p /tmp/system
|
---|
57 | cp $BASE/system/kernel_x86 /tmp/system/
|
---|
58 | oldCWD=$(pwd)
|
---|
59 |
|
---|
60 | cd /tmp
|
---|
61 | tar chf /tmp/boot.tar system/kernel_x86
|
---|
62 | rm -r /tmp/system
|
---|
63 |
|
---|
64 | cd $oldCWD
|
---|
65 | cd $BASE
|
---|
66 | pwd
|
---|
67 | tar rvhf /tmp/boot.tar \
|
---|
68 | system/add-ons/kernel/busses/ide \
|
---|
69 | system/add-ons/kernel/bus_managers \
|
---|
70 | system/add-ons/kernel/file_systems/bfs \
|
---|
71 | system/add-ons/kernel/generic \
|
---|
72 | system/add-ons/kernel/partitioning_systems \
|
---|
73 | system/add-ons/kernel/drivers/disk/scsi/scsi* \
|
---|
74 | system/add-ons/kernel/file_systems/bfs \
|
---|
75 | > /dev/null
|
---|
76 | # system/add-ons/kernel/boot \
|
---|
77 | gzip -c /tmp/boot.tar > /tmp/boot.tgz
|
---|
78 | rm /tmp/boot.tar
|
---|
79 | cd $oldCWD
|
---|
80 | if [ $? != 0 ] ; then
|
---|
81 | echo "Error creating boot floppy"
|
---|
82 | exit 1
|
---|
83 | fi
|
---|
84 |
|
---|
85 | dd if=/dev/zero of=/tmp/boot.img bs=1k count=1440
|
---|
86 | if [ $? != 0 ] ; then
|
---|
87 | echo "Error creating temporary boot image"
|
---|
88 | exit 1
|
---|
89 | fi
|
---|
90 | dd if=$BASE/system/haiku_loader of=/tmp/boot.img conv=notrunc
|
---|
91 | dd if=/tmp/boot.tgz of=/tmp/boot.img bs=192k seek=1 conv=notrunc
|
---|
92 |
|
---|
93 | echo "Writing boot image to "$IMAGE
|
---|
94 | dd if=/tmp/boot.img of=$IMAGE bs=72k
|
---|
95 | _retval=$?
|
---|
96 |
|
---|
97 | if [ $PRESERVE = 0 ] ; then
|
---|
98 | rm -f /tmp/boot.tgz /tmp/boot.img
|
---|
99 | fi
|
---|
100 |
|
---|
101 | if [ $_retval != 0 ] ; then
|
---|
102 | echo "Error creating boot floppy"
|
---|
103 | exit 1
|
---|
104 | fi
|
---|
105 | else
|
---|
106 | # non-CD mode (only writes the bare boot loader)
|
---|
107 |
|
---|
108 | echo "Writing boot loader..."
|
---|
109 | dd if=$BASE/system/haiku_loader of=$IMAGE bs=18k
|
---|
110 | if [ $? != 0 ] ; then
|
---|
111 | echo "Error creating boot floppy"
|
---|
112 | exit 1
|
---|
113 | fi
|
---|
114 |
|
---|
115 | echo "Erasing old boot drivers from the floppy..."
|
---|
116 | dd if=/dev/zero of=$IMAGE bs=512 conv=notrunc seek=384 count=1
|
---|
117 | if [ $? != 0 ] ; then
|
---|
118 | echo "Error creating boot floppy"
|
---|
119 | exit 1
|
---|
120 | fi
|
---|
121 | fi
|
---|
122 |
|
---|
123 | echo "Done!"
|
---|
124 | exit 0
|
---|