Initial revision
This commit is contained in:
159
tools/mkboot
Executable file
159
tools/mkboot
Executable file
@@ -0,0 +1,159 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# mkboot 2.0 - make boot floppy, make root device bootable, etc.
|
||||
# Author: Kees J. Bot
|
||||
|
||||
trap 'e=$?; rm -f /tmp/mkb.$$; exit $e' 0 2
|
||||
|
||||
mdec=/usr/mdec # bootstraps
|
||||
|
||||
# Check arguments.
|
||||
case "$#:$1" in
|
||||
1:bootable | 1:hdboot | [12]:fdboot | 1:cdfdboot )
|
||||
action=$1 dev=$2
|
||||
;;
|
||||
*) echo "Usage: $0 [bootable | hdboot | cdfdboot | fdboot [device]]" >&2
|
||||
exit 1
|
||||
esac
|
||||
|
||||
# Get the device table.
|
||||
. /etc/fstab
|
||||
|
||||
# The real root device may be the RAM disk.
|
||||
realroot=`printroot -r`
|
||||
|
||||
case $action in
|
||||
bootable | hdboot)
|
||||
# We need the root device.
|
||||
if [ $realroot = $root ]
|
||||
then
|
||||
rootdir=
|
||||
else
|
||||
umount $root 2>/dev/null
|
||||
mount $root /mnt || exit
|
||||
rootdir=/mnt
|
||||
fi
|
||||
esac
|
||||
|
||||
case $action in
|
||||
bootable)
|
||||
# Install the boot monitor on the root device and make it bootable.
|
||||
install -cs -m 644 $mdec/boot $rootdir/boot/boot || exit
|
||||
sync
|
||||
installboot -device $root $mdec/bootblock /boot/boot || exit
|
||||
test $realroot != $root && umount $root
|
||||
;;
|
||||
hdboot)
|
||||
# Install a new image on the root device.
|
||||
if [ ! -d $rootdir/boot/image ]
|
||||
then
|
||||
# /boot/image is not yet a directory! Fix it.
|
||||
su root -c \
|
||||
"exec mv $rootdir/boot/image /M"
|
||||
install -d $rootdir/boot/image
|
||||
su root -c \
|
||||
"exec mv $rootdir/M $rootdir/boot/image/`uname -r`.`uname -v`"
|
||||
fi
|
||||
|
||||
./tell_config OS_RELEASE . OS_VERSION >/tmp/mkb.$$
|
||||
version=`sed 's/[" ]//g;/^$/d' </tmp/mkb.$$`
|
||||
|
||||
revision=`cat revision 2>/dev/null`
|
||||
oldrev=$revision
|
||||
target="${version}r${revision}"
|
||||
|
||||
if [ -z "$revision" ]
|
||||
then
|
||||
revision=0
|
||||
elif [ -f $rootdir/boot/image/$target ]
|
||||
then
|
||||
if [ $rootdir/boot/image/$target -newer image ]
|
||||
then
|
||||
echo "$root:/boot/image/$target is up to date"
|
||||
test $realroot != $root && umount $root
|
||||
exit 0
|
||||
fi
|
||||
revision=`expr $revision + 1`
|
||||
fi
|
||||
target="${version}r${revision}"
|
||||
|
||||
set -- `ls -t $rootdir/boot/image`
|
||||
|
||||
case $# in
|
||||
0|1)
|
||||
# Not much there, do not remove a thing.
|
||||
;;
|
||||
*)
|
||||
# Remove the newest image in /boot/image. This seems strange,
|
||||
# but the old image is normally the "stable" image.
|
||||
|
||||
echo "rm $root:/boot/image/$1"
|
||||
rm -f "$rootdir/boot/image/$1"
|
||||
esac
|
||||
|
||||
# Install the new image.
|
||||
echo "cp image $root:/boot/image/$target"
|
||||
cp -p image $rootdir/boot/image/$target || exit
|
||||
|
||||
# Save the revision number.
|
||||
test "$revision" != "$oldrev" && echo $revision >revision
|
||||
|
||||
test $realroot != $root && umount $root
|
||||
echo "Done."
|
||||
;;
|
||||
fdboot)
|
||||
# fdboot: Make a boot floppy.
|
||||
|
||||
if [ -z "$dev" ]
|
||||
then
|
||||
echo -n \
|
||||
"Finish the name of the floppy device to write (by default 'fd0'): /dev/";
|
||||
read dev
|
||||
case "$dev" in
|
||||
'') dev=/dev/fd0
|
||||
;;
|
||||
/dev/*)
|
||||
;;
|
||||
*) dev=/dev/$dev
|
||||
esac
|
||||
fi
|
||||
|
||||
# Make a file system.
|
||||
umount $dev 2>/dev/null
|
||||
mkfs -B 1024 -i 512 $dev || exit
|
||||
|
||||
# Install /dev, /boot/boot and /boot/image.
|
||||
mount $dev /mnt || exit
|
||||
mkdir /mnt/boot || exit
|
||||
mkdir /mnt/image || exit
|
||||
cpdir /dev /mnt/dev || exit
|
||||
cp -p $mdec/boot /mnt/boot/boot || exit
|
||||
cp -p image /mnt/boot/image/ || exit
|
||||
umount $dev || exit
|
||||
|
||||
# Make bootable and copy the boot parameters.
|
||||
installboot -d $dev $mdec/bootblock /boot/boot || exit
|
||||
dd if=$root of=$dev skip=1 seek=1 count=1 conv=silent || exit
|
||||
edparams $dev 'main(){delay 2000;boot}; save' || exit
|
||||
echo "Test kernel installed on $dev with boot parameters from $root"
|
||||
;;
|
||||
|
||||
cdfdboot)
|
||||
# cdfdboot: Make a boot floppy image to go on a CD for booting from.
|
||||
dev=/dev/ram
|
||||
umount $dev 2>/dev/null
|
||||
mkfs -B 1024 -b 1440 -i 512 $dev || exit 1
|
||||
|
||||
# Install /dev, /boot
|
||||
mount $dev /mnt || exit 1
|
||||
mkdir /mnt/dev
|
||||
( cd /mnt/dev && /usr/src/commands/scripts/MAKEDEV.sh std )
|
||||
cp -p image /mnt/minix || exit 1
|
||||
cp -p ../boot/boot /mnt/boot || exit 1
|
||||
umount $dev || exit 1
|
||||
installboot -d $dev ../boot/bootblock boot || exit 1
|
||||
|
||||
# copy image
|
||||
dd if=$dev of=cdfdimage bs=8192 count=180
|
||||
esac
|
||||
exit 0
|
||||
Reference in New Issue
Block a user