#!/bin/bash
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin"
export PATH

TMP="/tmp/flash-knoppix.$$.tmp"
TMPMOUNT="/tmp/flash-knoppix.$$.tmpmount"
mkdir -p "$TMPMOUNT"
TITLE="flash-knoppix"
ERROR=""

 FLASH="$1"

if grep -q "^${FLASH}" /proc/mounts && ! umount "${FLASH}1" ; then
 ERROR="$FLASH MOUNTED  - unmount"
 echo $ERROR
 exit 1
fi
#############################
 SRC=/mnt-system
 cd "$SRC"
######################### Use ionice, be friendly to our multitasking
IONICE=""
type -p ionice >/dev/null 2>&1 && IONICE="ionice -c 3"

echo "Partition1  2GB" 
# delete MBR
  dd if=/dev/zero of="$FLASH" bs=512 count=1
  blockdev --flushbufs "$FLASH"
  sfdisk -u M "$FLASH" 2>"$TMP.err" <<EOT
,2000,c,*
,,83,
EOT
  if [ "$?" != 0 ]; then
   ERROR="$(<$TMP.err)"
   echo $ERROR
  fi
  
 
  rm -f "$TMP.err"
  blockdev --flushbufs "$FLASH"
  sleep 10
  # udev may need some additional time to settle down after repartitioning
  udevadm settle --timeout=20
  $IONICE mkdosfs -F32 -n "KNOPPIX" "${FLASH}1" 2>"$TMP.err"
  $IONICE blockdev --flushbufs "${FLASH}1"
  ERROR="$(<$TMP.err)"
  echo $ERROR
  
echo "(Re-)create boot loader, first remove the old one" 
rm -f "$TMP.err"
mount -t vfat -o shortname=winnt "${FLASH}1" "$TMPMOUNT" 2>"$TMP.err" 
[ -f "$TMPMOUNT"/ldlinux.sys ] && rm -f "$TMPMOUNT"/ldlinux.sys
blockdev --flushbufs "${FLASH}1"
sleep 2
umount "$TMPMOUNT"
rm -f "$TMP.err"
syslinux "${FLASH}1" 2>"$TMP.err" 
ERROR="$(<$TMP.err)"
   echo $ERROR
blockdev --flushbufs "${FLASH}1"
sleep 2

echo "Now copy all the files (except for overlays)" >&2
 mount -t vfat -o shortname=winnt "${FLASH}1" "$TMPMOUNT" 2>"$TMP.err" 
 $IONICE cp -Lrf boot "$TMPMOUNT"/ 2>"$TMP.err" 
 mkdir "$TMPMOUNT"/KNOPPIX 2>/dev/null
 for i in KNOPPIX/*; do
   $IONICE cp -Lrf "$i" "$TMPMOUNT"/KNOPPIX/ 2>"$TMP.err"
 done
 if [ ! -r boot/syslinux/syslinux.cfg -a -r boot/isolinux/isolinux.cfg ]; then
  [  -d "$TMPMOUNT"/boot/syslinux ] && rm -rf "$TMPMOUNT"/boot/syslinux
  mv -f "$TMPMOUNT"/boot/isolinux "$TMPMOUNT"/boot/syslinux
  mv -f "$TMPMOUNT"/boot/syslinux/isolinux.cfg "$TMPMOUNT"/boot/syslinux/syslinux.cfg
  rm -f "$TMPMOUNT"/boot/syslinux/isolinux.* "$TMPMOUNT"/boot/syslinux/*.cat "$TMPMOUNT"/boot/isolinux.* "$TMPMOUNT"/boot/*.cat
fi
 

  echo "part2"
   $IONICE mkreiserfs -s 513 -f -f -l "KNOPPIX-DATA" "${FLASH}2" 2>>"$TMP.err" 
   ERROR="$(<$TMP.err)"
   echo $ERROR
   $IONICE blockdev --flushbufs "${FLASH}2"
   echo "2 /KNOPPIX-DATA reiserfs" >> "$TMPMOUNT"/KNOPPIX/knoppix-data.inf

# Flush and umount file system
blockdev --flushbufs "${FLASH}1"
sleep 2
umount "$TMPMOUNT"



# Create MBR
ms-sys -s "${FLASH}" 2>"$TMP.err" 
blockdev --flushbufs "${FLASH}"
sleep 2

# Finally mark partition 1 as bootable, if not already done.
# this may cause another udev run, which we can ignore here
if [ -n "$MAKE_BOOTABLE" ]; then
 sfdisk -A1 "${FLASH}" 2>"$TMP.err" 
 blockdev --flushbufs "${FLASH}"
fi

exit 0
