#!/bin/bash KERNEL= RAMDISK= CMDLINE= GENEXT2FS= GRUBCONF= TMPDIR= OUTPUT= while [ $# -gt 0 ]; do case $1 in --kernel) KERNEL=$2 shift ;; --ramdisk) RAMDISK=$2 shift ;; --cmdline) CMDLINE=$2 shift ;; --genext2fs) GENEXT2FS=$2 shift ;; --tmpdir) TMPDIR=$2 shift ;; --grubconf) GRUBCONF=$2 shift ;; --output) OUTPUT=$2 shift ;; --help) echo "Usage: $0 OPTIONS" echo "Create an ext2 image that contains everything necessary" echo -e "to be the boot file system.\n" echo "The following options exist:" echo " --genext2fs The location of genext2fs binary" echo " --kernel The kernel to boot" echo " --ramdisk The ramdisk to be used" echo " --cmdline The command line to use" echo " --grubconf The path to grub conf file" echo " --tmpdir The temporary dir where files"\ "can be copied" echo " --output The filename of the output image" echo exit 0 ;; *) echo "Unknown option $1." exit 1 ;; esac shift done if [ -z "$KERNEL" -o -z "$RAMDISK" -o -z "$GENEXT2FS" -o -z "$TMPDIR" -o \ -z "$OUTPUT" ]; then echo "Missing required arguments." exit 1 fi if ! [ -x "$GENEXT2FS" -a -f "$RAMDISK" -a -f "$KERNEL" ]; then echo "Must provide path to a valid genext2fs binary." exit 1 fi rm -rf $TMPDIR mkdir -p $TMPDIR echo -n "$CMDLINE" > $TMPDIR/cmdline cp -f $KERNEL $TMPDIR/kernel cp -f $RAMDISK $TMPDIR/ramdisk if [ -f "$GRUBCONF" ]; then mkdir -p $TMPDIR/boot/grub cp -f $GRUBCONF $TMPDIR/boot/grub/menu.lst fi num_blocks=`du -sk $TMPDIR | tail -n1 | awk '{print $1;}'` # add 1% extra=`expr $num_blocks / 100` reserve=10 [ $extra -lt $reserve ] && extra=$reserve num_blocks=`expr $num_blocks + $extra` num_inodes=`find $TMPDIR | wc -l` $GENEXT2FS -d $TMPDIR -b $num_blocks -N $num_inodes -m 0 $OUTPUT exit 0