#!/bin/sh
if [ $# != 2 ]; then
 echo "Usage: $0 image.iso /dev/usb-drive" >&2
 exit 1
fi

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

SOURCE="$1"
TARGET="$2"

LABEL=$(file "$SOURCE"|cut -d\' -f2|sed 's/ß/ss/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/?//g;s/#/-/g;s/ *$//g'|tr ' :' '_-')

if [ $? != 0 ]; then
 echo "Error: $SOURCE is no iso file" >&2
 exit 3
fi

[ -z "$LABEL" ] && LABEL="USB_BOOT"

REM=$(cat /sys/block/${TARGET#/dev/}/removable 2>/dev/null)

if [ "$REM" != "1" ]; then
 echo "Error: No removeable drive $TARGET" >&2
 exit 4
fi

TMP_SYSLINUX=$(mktemp -td create-syslinux-usb-drive.XXXXXX)
TMP_SOURCE=$(mktemp -td create-syslinux-usb-drive-source.XXXXXX)
TMP_TARGET=$(mktemp -td create-syslinux-usb-drive-target.XXXXXX)

mount -o loop "$SOURCE" "$TMP_SOURCE"

#if [ -f "$TMP_SOURCE"/bootmgr ]; then
 VER=3.86
 FILE=syslinux-$VER.tar.gz
 URL=http://www.kernel.org/pub/linux/utils/boot/syslinux/$FILE
#else
# VER=3.73
# FILE=syslinux-$VER.tar.gz
# URL=http://www.kernel.org/pub/linux/utils/boot/syslinux/Old/$FILE
#fi

SYSLINUX="$TMP_SYSLINUX"/syslinux-$VER/linux/syslinux
CHAIN_C32="$TMP_SYSLINUX"/syslinux-$VER/com32/modules/chain.c32
MENU_C32="$TMP_SYSLINUX"/syslinux-$VER/com32/menu/menu.c32
VESAMENU_C32="$TMP_SYSLINUX"/syslinux-$VER/com32/menu/vesamenu.c32
MBR_BIN="$TMP_SYSLINUX"/syslinux-$VER/mbr/mbr.bin

OPTIONS="umask=000,shortname=mixed,quiet,utf8"

SFDISK=/sbin/sfdisk
MKDOSFS=/sbin/mkdosfs

[ -x /usr/bin/curl ] && LOAD="/usr/bin/curl -s"
[ -x /usr/bin/wget ] && LOAD="/usr/bin/wget -qO-"

$LOAD $URL|tar -C "$TMP_SYSLINUX" -zxv

umount -l $TARGET* 2>/dev/null

dd if=/dev/zero of=$TARGET count=1
$SFDISK -D -uM $TARGET <<EOT
,$(ls -l "$SOURCE"|awk '{print int($5/2^20+0.5)+10}'),b,*
,,83,
EOT

dd if=$MBR_BIN of=$TARGET
$MKDOSFS -F32 -n$LABEL ${TARGET}1
$SYSLINUX ${TARGET}1
mkfs -t ext4 -m 0 -L live-rw ${TARGET}2

mount -o $OPTIONS ${TARGET}1 "$TMP_TARGET"

cp -av "$TMP_SOURCE"/* "$TMP_TARGET"
[ -d "$TMP_SOURCE"/.disk ] && cp -av "$TMP_SOURCE"/.disk "$TMP_TARGET"

if [ -f "$TMP_TARGET"/isolinux/isolinux.cfg ]; then
 if [ -f "$TMP_TARGET"/isolinux/menu.c32 ]; then
  rm -f "$TMP_TARGET"/isolinux/menu.c32
  cp -v $MENU_C32 "$TMP_TARGET"/isolinux
 fi
 if [ -f "$TMP_TARGET"/isolinux/vesamenu.c32 ]; then
  rm -f "$TMP_TARGET"/isolinux/vesamenu.c32
  cp -v $VESAMENU_C32 "$TMP_TARGET"/isolinux
 fi
 if [ -f "$TMP_TARGET"/isolinux/data/vesamenu.c32 ]; then
  rm -f "$TMP_TARGET"/isolinux/data/vesamenu.c32
  cp -v $VESAMENU_C32 "$TMP_TARGET"/isolinux/data
 fi
 if ! grep -q isolinux "$TMP_TARGET"/isolinux/isolinux.cfg; then
  mv -v "$TMP_TARGET"/isolinux "$TMP_TARGET"/syslinux
  cp -v "$TMP_TARGET"/syslinux/isolinux.cfg "$TMP_TARGET"/syslinux/syslinux.cfg
 else
  cp -v "$TMP_TARGET"/isolinux/isolinux.cfg "$TMP_TARGET"/syslinux.cfg
 fi
fi

if [ -f "$TMP_TARGET"/bootmgr ]; then
 cp -v $CHAIN_C32 "$TMP_TARGET"
 cat > "$TMP_TARGET"/syslinux.cfg <<EOT
default chain.c32 ntldr=/bootmgr
EOT
fi

sed -i '/Kanotix/s/$/ - Persistent/;/boot=live/s/$/ persistent/' "$TMP_TARGET"/isolinux/menu.cfg

umount "$TMP_SOURCE" "$TMP_TARGET"
sync

rm -rf "$TMP_SOURCE" "$TMP_TARGET" "$TMP_SYSLINUX"
