#!/bin/bash cleanup() { [ -d "$DISKMOUNT" ] && { umount $DISKMOUNT; rmdir $DISKMOUNT; } [ -d "$SQUASHMNT" ] && { umount $SQUASHMNT; rmdir $SQUASHMNT; } [ -d "$ISOMNT" ] && { umount $ISOMNT; rmdir $ISOMNT; } [ -d "$ROOT" ] && { umount $ROOT; rmdir $ROOT; } } exitclean() { echo "Cleaning up to exit..." cleanup exit 1 } trap exitclean SIGINT SIGTERM ISO=$(readlink -f "$1") IMG=$(readlink -f "$2") ISOMNT=$(mktemp -d /media/isotmp.XXXXXX) mount -o loop,ro "$ISO" $ISOMNT || exitclean SQUASHMNT=$(mktemp -d /media/squashtmp.XXXXXX) mount -o loop,ro $ISOMNT/LiveOS/squashfs.img $SQUASHMNT || exitclean DISKMOUNT=$(mktemp -d /media/disktmp.XXXXXX) mount -o loop,ro $SQUASHMNT/LiveOS/ext3fs.img $DISKMOUNT || exitclean echo "Create root filesystem..." ROOT=$(mktemp -d /tmp/root.XXXXXX) dd if=/dev/zero of=$IMG bs=1 count=1 seek=4G || exitclean mke2fs -O dir_index -F $IMG || exitclean mount -o loop $IMG $ROOT || exitclean cp -a $DISKMOUNT/* $ROOT cp $ISOMNT/isolinux/initrd0.img $ROOT/boot cp $ISOMNT/isolinux/vmlinuz0 $ROOT/boot if [ ! -e $ROOT/boot/olpc.fth ] ; then echo "no $ROOT/boot/olpc.fth - should have been added by whatever installed $ROOT/boot/vmlinuz*" exit 1; fi sed -i -e 's/rootfstype=jffs2/rootfstype=ext4/' $ROOT/boot/olpc.fth echo "Done." cleanup