#!/bin/bash
#
# PMT, 27 December 2009, mail@p-mt.net
# Version 0.5
#
# this script generate a Multiboot flash drive
# documentation: http://blog.p-mt.net/archives/644
#

# Hint:
# test usb flash drive: sudo qemu -m 512 -hda /dev/sdb
#

# preparing usb flash drive
#
# create filesystem on flash drive:
# DEVICE=/dev/sdb
# USB_LABEL="MultiBootUSB"
# sudo mkfs.vfat -n $USB_LABEL ${DEVICE}1
#
# install grub2 on flash drive:
# sudo apt-get install grub2
# [ ! -d /media/$USB_LABEL ] && sudo mkdir /media/$USB_LABEL
# sudo mount ${DEVICE}1 /media/$USB_LABEL 
# sudo grub-install --no-floppy --root-directory=/media/$USB_LABEL ${DEVICE}


# ###### Configuration ################################################
# flash drive label
USB_LABEL="PMTstick"
# flash drive mount path
MOUNTDIR=/media/$USB_LABEL
# path on flash drive where the iso images shall reside
ISOPATH=/boot/iso
# Path to grub directory on pendrive
GRUBPATH=/boot/grub
# uncomment the following line if iso's shall be downloaded
# DOWNLOAD=1 
# Background image for the boot menu
SPLASH_IMAGE=/boot/grub/pmt.tga
# #####################################################################

# create mount point, mount flash drive, create directories, 
# download splash image, etc.
[ ! -d $MOUNTDIR ] && sudo mkdir $MOUNTDIR
sudo mount /dev/disk/by-label/$USB_LABEL $MOUNTDIR
DOWNLOADPATH=$MOUNTDIR/$ISOPATH
[ ! -d $DOWNLOADPATH ] &&  mkdir $DOWNLOADPATH
[ $DOWNLOAD ] && sudo wget http://blog.p-mt.net/wp-content/uploads/2009/12/pmt.tga -P $MOUNTDIR/$GRUBPATH
[ $DOWNLOAD ] && sudo wget http://blog.p-mt.net/wp-content/uploads/2009/12/jolie.tga -P $MOUNTDIR/$GRUBPATH
[ $DOWNLOAD ] && sudo wget http://blog.p-mt.net/wp-content/uploads/2009/12/pitt.tga -P $MOUNTDIR/$GRUBPATH
[ $DOWNLOAD ] && sudo wget http://blog.p-mt.net/wp-content/uploads/2009/12/monroe.tga -P $MOUNTDIR/$GRUBPATH
[ $DOWNLOAD ] && sudo wget http://blog.p-mt.net/wp-content/uploads/2009/12/monroe2.tga -P $MOUNTDIR/$GRUBPATH
[ $DOWNLOAD ] && sudo wget http://blog.p-mt.net/wp-content/uploads/2009/12/unicode.pf2 -P $MOUNTDIR/$GRUBPATH

# ###### ISO Configuration ############################################
# Ubuntu 
UBUNTU_TITLE="Ubuntu Desktop 9.10 Karmic Koala 32bit"
UBUNTU_URL="http://ftp.uni-kl.de/pub/linux/ubuntu.iso/9.10/ubuntu-9.10-desktop-i386.iso"
[ $DOWNLOAD ] && sudo wget $UBUNTU_URL -P $DOWNLOADPATH
UBUNTU_ISO=`basename $UBUNTU_URL` 

# Ubuntu LTS
UBUNTU_LTS_TITLE="Ubuntu Desktop 8.04.3 LTS Hardy Heron 32bit"
UBUNTU_LTS_URL="http://ftp.uni-kl.de/pub/linux/ubuntu.iso/8.04/ubuntu-8.04.3-desktop-i386.iso"
[ $DOWNLOAD ] && sudo wget $UBUNTU_LTS_URL -P $DOWNLOADPATH
UBUNTU_LTS_ISO=`basename $UBUNTU_LTS_URL`

# Debian Netinstall 
DEBIAN_TITLE="Debian Netinstall 5.03 Lenny 32bit"
DEBIAN_URL="http://ftp.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/mini.iso"
DEBIAN_ISO="debian-5.03-netinstall-i386.iso"
[ $DOWNLOAD ] && sudo wget $DEBIAN_URL -O $DOWNLOADPATH/$DEBIAN_ISO

# Sidux
SIDUX_TITLE="Sidux 2009-03"
SIDUX_URL="http://ftp.spline.de/pub/sidux/release/sidux-2009-03-momos-xfce-i386-200911110039.iso"
SIDUX_KERNEL="2.6.31-6.slh.1-sidux-686"
[ $DOWNLOAD ] && sudo wget $SIDUX_URL -P $DOWNLOADPATH
SIDUX_ISO=`basename $SIDUX_URL`

# moonOS - DOESN'T WORK!
MOONOS_TITLE="moonOS 3.0 Makara - BROKEN!"
MOONOS_URL="http://moonos.tropicalicecube.net/repos/moonos-3-makara-desktop-i386.iso"
[ $DOWNLOAD ] && sudo wget $MOONOS_URL -P $DOWNLOADPATH
MOONOS_ISO=`basename $MOONOS_URL` 

# GRML
GRML_TITLE="GRML 2009.10 Hello-Wien"
GRML_URL="http://debian.netcologne.de/www.grml.org/grml_2009.10.iso"
[ $DOWNLOAD ] && sudo wget $GRML_URL -P $DOWNLOADPATH
GRML_ISO=`basename $GRML_URL`

# Parted Magic
PMAGIC_TITLE="Parted Magic & Clonezilla 4.7"
PMAGIC_URL="http://downloads.sourceforge.net/project/partedmagic/partedmagic/Parted%20Magic%204.7/pmagic_clonezilla-4.7.iso.zip?use_mirror=dfn"
[ $DOWNLOAD ] && sudo wget $PMAGIC_URL -P $DOWNLOADPATH
[ $DOWNLOAD ] && sudo unzip $DOWNLOADPATH/pmagic*zip
[ $DOWNLOAD ] && sudo rm pmagic*zip
PMAGIC_ISO=`basename $DOWNLOADPATH/pmagic*iso`

# SLAX
SLAX_TITLE="SLAX 6.1.2"
SLAX_URL="http://www.slax.org/get_slax.php?download=iso"
[ $DOWNLOAD ] && sudo wget $SLAX_URL -P $DOWNLOADPATH
[ $DOWNLOAD ] && sudo tar xvf $DOWNLOADPATH/slax*.tar
[ $DOWNLOAD ] && sudo rm slax*.tar
SLAX_ISO=`basename $DOWNLOADPATH/slax*iso`

# Linux Mint
MINT_TITLE="Linux Mint 8.0"
MINT_URL="http://ftp5.gwdg.de/pub/linux/debian/mint/stable/8/LinuxMint-8.iso"
[ $DOWNLOAD ] && sudo wget $MINT_URL -P $DOWNLOADPATH
MINT_ISO=`basename $MINT_URL`

# Tiny Core Linux
TINYCORE_TITLE="Tiny Core Linux 2.7"
TINYCORE_URL="http://distro.ibiblio.org/pub/linux/distributions/tinycorelinux/2.x/release/tinycore_2.7.iso"
[ $DOWNLOAD ] && sudo wget $TINYCORE_URL -P $DOWNLOADPATH
TINYCORE_ISO=`basename $TINYCORE_URL`

# xPUD
XPUD_TITLE="xPUD 0.9.2"
XPUD_URL="http://mesrss.free.fr/xpud/xpud-0.9.2.iso"
[ $DOWNLOAD ] && sudo wget $XPUD_URL -P $DOWNLOADPATH
XPUD_ISO=`basename $XPUD_URL`

# SystemRescueCd
SRCD_TITLE="SystemRescueCd 1.3.3"
SRCD_URL="https://sourceforge.net/projects/systemrescuecd/files/sysresccd-x86/1.3.3/systemrescuecd-x86-1.3.3.iso/download"
[ $DOWNLOAD ] && sudo wget $SRCD_URL -P $DOWNLOADPATH
TMP_VAR=`dirname $SRCD_URL`
SRCD_ISO=`basename $TMP_VAR`

# netboot.me
NETBOOT_TITLE="netboot.me 0.1.1"
NETBOOT_URL="http://static.netboot.me/gpxe/netbootme.iso"
[ $DOWNLOAD ] && sudo wget $NETBOOT_URL -P $DOWNLOADPATH
NETBOOT_ISO=`basename $NETBOOT_URL`

# Memtest86+
MEMTEST_TITLE="Memory test (memtest86+ 4.00)"
MEMTEST_URL="http://www.memtest.org/download/4.00/memtest86+-4.00.bin.gz"
[ $DOWNLOAD ] && sudo wget $MEMTEST_URL -P $DOWNLOADPATH
[ $DOWNLOAD ] && sudo gunzip $DOWNLOADPATH/memtest*.gz
MEMTEST_ISO=`basename $DOWNLOADPATH/memtest*bin`

# #####################################################################

# ###### grub2 boot configuration #####################################

cat <<EOF> $MOUNTDIR/$GRUBPATH/grub.cfg

if loadfont /boot/grub/unicode.pf2 ; then
  set gfxmode="640x480"
  insmod gfxterm
  insmod vbe
  terminal_output gfxterm
  if terminal_output gfxterm; then true ; else
     terminal gfxterm
  fi
fi
insmod tga
background_image $SPLASH_IMAGE

menuentry "$UBUNTU_TITLE" {
 loopback loop $ISOPATH/$UBUNTU_ISO
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$ISOPATH/$UBUNTU_ISO noeject noprompt --
 initrd (loop)/casper/initrd.lz
}
 
menuentry "$UBUNTU_LTS_TITLE" {
 loopback loop $ISOPATH/$UBUNTU_LTS_ISO
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$ISOPATH/$UBUNTU_LTS_ISO quiet splash noprompt --
 initrd (loop)/casper/initrd.gz
}
 
menuentry "$DEBIAN_TITLE" {
  loopback loop $ISOPATH/$DEBIAN_ISO
  linux (loop)/linux vga=normal --
  initrd (loop)/initrd.gz
}

menuentry "$SIDUX_TITLE" {
 loopback loop $ISOPATH/$SIDUX_ISO
 linux (loop)/boot/vmlinuz-$SIDUX_KERNEL fromiso=$ISOPATH/$SIDUX_ISO boot=fll noeject  
 initrd (loop)/boot/initrd.img-$SIDUX_KERNEL
}

menuentry "$MOONOS_TITLE" {
 loopback loop $ISOPATH/$MOONOS_ISO
 linux (loop)/casper/vmlinuz boot=casper fromiso=$ISOPATH/$MOONOS_ISO file=(loop)/preseed/moon.seed --
 initrd (loop)/casper/initrd.gz
}

menuentry "$GRML_TITLE" {
  loopback loop $ISOPATH/$GRML_ISO
  linux (loop)/boot/grml/linux26 findiso=$ISOPATH/$GRML_ISO apm=power-off lang=us vga=791 boot=live nomce noeject noprompt --
  initrd (loop)/boot/grml/initrd.gz
}

menuentry "$PMAGIC_TITLE" {
    loopback loop $ISOPATH/$PMAGIC_ISO 
    linux (loop)/pmagic/bzImage iso_filename=$ISOPATH/$PMAGIC_ISO edd=off noapic load_ramdisk=1 prompt_ramdisk=0 rwnomce sleep=10 loglevel=0
    initrd (loop)/pmagic/initramfs
}

menuentry "$SLAX_TITLE" {
    loopback loop $ISOPATH/$SLAX_ISO 
    linux (loop)/boot/vmlinuz from=$ISOPATH/$SLAX_ISO ramdisk_size=6666 root=/dev/ram0 rw
    initrd (loop)/boot/initrd.gz
}

menuentry "$MINT_TITLE" {
 loopback loop $ISOPATH/$MINT_ISO
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$ISOPATH/$MINT_ISO noeject noprompt --
 initrd (loop)/casper/initrd.lz
}

menuentry "$TINYCORE_TITLE" {
 loopback loop $ISOPATH/$TINYCORE_ISO
 linux (loop)/boot/bzImage
 initrd (loop)/boot/tinycore.gz
}

menuentry "$XPUD_TITLE" {
 loopback loop $ISOPATH/$XPUD_ISO
 linux (loop)/boot/xpud filename=$ISOPATH/$XPUD_ISO noisapnp quiet lang=de kmap=de
 initrd (loop)/opt/media
}

menuentry "$SRCD_TITLE" {
 loopback loop $ISOPATH/$SRCD_ISO
 linux (loop)/isolinux/rescuecd isoloop=$ISOPATH/SRCD_ISO rdinit=/linuxrc2 
 initrd (loop)/isolinux/initram.igz
}

menuentry "$NETBOOT_TITLE" {
 loopback loop $ISOPATH/$NETBOOT_ISO
  linux16 (loop)/GPXE.KRN	
}
 
menuentry "$MEMTEST_TITLE" {
 linux16 $ISOPATH/$MEMTEST_ISO
}

# 
#menuentry "BackTrack 4 DOESN'T WORK!" {
# linux /boot/bt4/boot/vmlinuz BOOT=casper boot=casper nopersistent rw vga=0x317 --
# initrd /boot/bt4/boot/initrd.gz
#}
#
 
# 
#menuentry "BackTrack DOESN'T WORK!" {
# loopback loop /boot/iso/bt4-pre-final.iso
# linux (loop)/boot/vmlinuz find_iso/filename=/boot/iso/bt4-pre-final.iso BOOT=casper boot=casper nopersistent rw vga=0x317--
# initrd (loop)/boot/initrd.gz
#}          
# 

EOF

