#!/bin/sh

# Created by master@kanotix.com

if [ "$(id -u)" != "0" ]; then
 echo Error: You must be root to run this script!
 exit 1
fi

if ! [ -f "$1" ]; then
 echo Error: Needs ISO image as first option!
 exit 2
fi

if [ ! -f "$2" -a -n "$2" ]; then
 echo Error: Expects squashfs sortfile as second option!
 exit 3
fi

ISO="$1"
SORTFILE=""
[ -f "$2" ] && SORTFILE="-sort $2"
SUFFIX=".FIXED.iso"
COMP_DIR="SIDUX"
COMP_NAME="SIDUX"
ISO_VOL="SIDUX_FIXED"
BOOT_SEC="boot/grub/iso9660_stage1_5"
BOOT_CAT="boot/grub/boot.cat"
EXCLUDE="--exclude $COMP_DIR/$COMP_NAME --exclude $BOOT_CAT"
ISO_SORT=$(mktemp -t iso-sort.XXXXXXX)
ISO_DIR=$(mktemp -d -t iso-dir.XXXXXXX)
ISO_COMP=$(mktemp -d -t iso-comp.XXXXXXX)
ISO_EXTRACT=$(mktemp -d -t iso-extract.XXXXXXX)
FIXED_ISO_DIR=$(mktemp -d -t fixed-iso-dir.XXXXXXX)

mount -t iso9660 -o loop "$ISO" $ISO_DIR
rsync -a $EXCLUDE $ISO_DIR/ $FIXED_ISO_DIR

if [ -f $ISO_DIR/$COMP_DIR/$COMP_NAME ]; then
 mount -t squashfs -o loop $ISO_DIR/$COMP_DIR/$COMP_NAME $ISO_COMP
 rsync -a $ISO_COMP/etc/init.d/live-autoconfig $ISO_EXTRACT
 [ -f $ISO_COMP/etc/powersave/events ] && sed 's/^\(EVENT_BUTTON_POWER=\).*/\1"wm_shutdown"/' $ISO_COMP/etc/powersave/events > $ISO_EXTRACT/events
fi

cd $ISO_EXTRACT
wget -N http://kanotix.com/files/fix/sidux/live-autoconfig
wget -N http://kanotix.com/files/fix/sidux/45xsession
cd -

mount --bind $ISO_EXTRACT/live-autoconfig $ISO_COMP/etc/init.d/live-autoconfig
mount --bind $ISO_EXTRACT/45xsession $ISO_COMP/etc/X11/Xsession.d/45xsession
[ -f $ISO_EXTRACT/events ] && mount --bind $ISO_EXTRACT/events $ISO_COMP/etc/powersave/events
mksquashfs $ISO_COMP $FIXED_ISO_DIR/$COMP_DIR/$COMP_NAME $SORTFILE
umount $ISO_EXTRACT/live-autoconfig $ISO_EXTRACT/45xsession
[ -f $ISO_EXTRACT/events ] && umount $ISO_EXTRACT/events
umount $ISO_COMP $ISO_DIR

echo "$FIXED_ISO_DIR/boot/grub/* 111111" > $ISO_SORT
echo "$FIXED_ISO_DIR/boot/* 111110" >> $ISO_SORT
echo "$FIXED_ISO_DIR/$COMP_DIR/$COMP_NAME 100001" >> $ISO_SORT
echo "$FIXED_ISO_DIR/ISO/* 100000" >> $ISO_SORT
echo -n "Checksumming..."
( cd "$FIXED_ISO_DIR/" ; rm -f $COMP_DIR/md5sums; find . -type f -not \( -name \*md5sums\* -o -name \*.cat -o -name boot-\*.img -o -name iso9660_stage1_5 \) | sed 's|^\./||' | sort | while read name; do md5sum -b "$name"; done > $COMP_DIR/md5sums )
echo "Done."

mkisofs -pad -l -r -J \
        -sort $ISO_SORT \
        -V "$ISO_VOL" \
	-no-emul-boot -boot-load-size 4 -boot-info-table \
	-b "$BOOT_SEC" -c $BOOT_CAT \
	-hide-rr-moved \
	-o "$ISO$SUFFIX" $FIXED_ISO_DIR 

rm -rf $ISO_DIR $ISO_EXTRACT $FIXED_ISO_DIR $ISO_SORT

echo Fixed ISO: "$ISO$SUFFIX"
echo Included fixes:
echo 1. SIDUX/sidux.sh and myconf work now as expected
echo 2. ifconfig lo up when using nodhcp
echo 3. pump -i eth0 fallback in case of no link found
echo 4. reverted stupid changes from 45xsession
echo 5. power button for wm_shutdown
echo KANOTIX does not need any of those fixes!
