176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#!/bin/bash
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# Generate a legacy floppy emulation ISO boot image
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# genliso foo.liso foo.lkrn bar.lkrn ...
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# The .liso image filename is the first argument followed by
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#   a list of .lkrn images  include in .liso image
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmancase $# in
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman0|1)
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	echo Usage: $0 foo.liso foo.lkrn ...
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	exit 1
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	;;
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanesac
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmancase "`mtools -V`" in
1876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanMtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|[mM]tools\ *\ [4-9].*)
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	;;
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman*)
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	echo Mtools version 3.9.9 or later is required
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	exit 1
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	;;
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanesac
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanout=$1
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanshift
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmandir=`mktemp -d bin/liso.dir.XXXXXX`
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanimg=$dir/boot.img
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanmformat -f 1440 -C -i $img ::
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmancfg=$dir/syslinux.cfg
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmancat > $cfg <<EOF
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# These default options can be changed in the genliso script
3776d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanSAY gPXE ISO boot image generated by genliso
3876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanTIMEOUT 30
3976d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEOF
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanfirst=
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanfor f
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmando
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	if [ ! -r $f ]
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	then
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		echo $f does not exist, skipping 1>&2
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		continue
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	fi
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	# shorten name for 8.3 filesystem
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	b=$(basename $f)
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	g=${b%.lkrn}
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	g=${g//[^a-z0-9]}
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	g=${g:0:8}.krn
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	case "$first" in
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"")
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		echo DEFAULT $g
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		;;
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	esac
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	first=$g
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	echo LABEL $b
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	echo "" KERNEL $g
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	mcopy -m -i $img $f ::$g
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmandone >> $cfg
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanmcopy -i $img $cfg ::syslinux.cfg
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanif ! syslinux $img
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanthen
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	exit 1
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanfi
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanmkisofs -q -o $out -c boot.cat -b boot.img $dir
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanrm -fr $dir
75