slitaz-tools rev 274

bootfloppybox: add grub4dos & floppy image
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Nov 21 14:58:15 2008 +0000 (2008-11-21)
parents c417a449e34c
children e1be96425578
files tinyutils/bootfloppybox
line diff
     1.1 --- a/tinyutils/bootfloppybox	Fri Nov 21 07:32:37 2008 +0000
     1.2 +++ b/tinyutils/bootfloppybox	Fri Nov 21 14:58:15 2008 +0000
     1.3 @@ -2,7 +2,7 @@
     1.4  # 
     1.5  # Gtkdialog box for the mount command. Part of SliTaz tools.
     1.6  #
     1.7 -VERSION=20080818
     1.8 +VERSION=20081121
     1.9  PLOP_URL=http://download.plop.at/plop/bootmngr/plpbt50rc12flp.zip
    1.10  
    1.11  # Check if user is root.
    1.12 @@ -40,7 +40,8 @@
    1.13  		DEVICE="$DEVICE /dev/${i#*block:} 'Floppy in ${i#*block:}' $on"
    1.14  		on=off
    1.15  	done
    1.16 -	DEVICE="$DEVICE cdrom \"cdrom image file boot.iso\" $on 2>&1 1>&3"
    1.17 +	DEVICE="$DEVICE floppy \"cdrom image file boot.iso\" $on"
    1.18 +	DEVICE="$DEVICE cdrom \"floppy image file boot.fd\" off 2>&1 1>&3"
    1.19  	exec 3>&1
    1.20  	DEVICE=`eval $DEVICE`
    1.21  	retval=$?
    1.22 @@ -53,31 +54,168 @@
    1.23      	fi
    1.24  }
    1.25  
    1.26 +mkmenu()
    1.27 +{
    1.28 +if [ "$1" = "grub4dos" ]; then
    1.29 +	SAVEDEFAULT="save default"
    1.30 +	cat > /tmp/floppybox.grub.menu <<EOT
    1.31 +# grub4dos menu
    1.32 +default /default
    1.33 +EOT
    1.34 +else
    1.35 +	SAVEDEFAULT="savedefault"
    1.36 +	cat > /tmp/floppybox.grub.menu <<EOT
    1.37 +# grub menu
    1.38 +default saved
    1.39 +EOT
    1.40 +fi
    1.41 +cat >> /tmp/floppybox.grub.menu <<EOT
    1.42 +timeout 8
    1.43 +color yellow/brown light-green/black
    1.44 +
    1.45 +EOT
    1.46 +entry=0
    1.47 +[ -f /boot/gpxe ] && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
    1.48 +title gPXE (Boot from the Web, PXE/iSCSI/AoE support)
    1.49 +	kernel /boot/gpxe $(dd if=/boot/gpxe bs=1 skip=519 count=255 2>/dev/null | strings)
    1.50 +
    1.51 +EOT
    1.52 +[ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ] \
    1.53 +	&& entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
    1.54 +title Smart Boot Manager (text - boot floppy, hard disk or CD/DVD)
    1.55 +	kernel /boot/memdisk floppy c=80 h=2 s=18
    1.56 +	initrd /boot/btmgr.gz
    1.57 +
    1.58 +EOT
    1.59 +[ -f /usr/share/boot/plop.gz -a -f /usr/share/boot/memdisk.lzma ] \
    1.60 +	&& entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
    1.61 +title Plop Boot Manager (graphic - boot floppy, hard disk, CD/DVD or USB)
    1.62 +	kernel /boot/memdisk floppy c=80 h=2 s=18
    1.63 +	initrd /boot/plop.gz
    1.64 +
    1.65 +EOT
    1.66 +[ -f /usr/share/boot/etherboot ] && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
    1.67 +title Etherboot (LAN boot, PXE or NBI)
    1.68 +	kernel /boot/etherboot
    1.69 +
    1.70 +EOT
    1.71 +[ -f /usr/share/boot/memtest.lzma -a -f /usr/share/boot/memdisk.lzma ] \
    1.72 +&& entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
    1.73 +title Memtest86+ (Test system memory)
    1.74 +	kernel /boot/memdisk floppy c=80 h=2 s=18
    1.75 +	initrd /boot/memtest.gz
    1.76 +
    1.77 +EOT
    1.78 +[ "$1" = "grub4dos" ] && entry=$(($entry + 3)) && cat >> /tmp/floppybox.grub.menu <<EOT
    1.79 +title Windows (scan ntldr)
    1.80 +	fallback $(($entry -3 + 1))
    1.81 +        find --set-root /ntldr
    1.82 +	chainloader /ntldr
    1.83 +	$SAVEDEFAULT --wait=2
    1.84 +
    1.85 +title Windows (scan cmldr)
    1.86 +	fallback $(($entry -3 + 2))
    1.87 +        find --set-root /cmldr
    1.88 +        chainloader /cmldr
    1.89 +	$SAVEDEFAULT --wait=2
    1.90 +
    1.91 +title Windows (scan io.sys)
    1.92 +	fallback $(($entry -3 + 3))
    1.93 +        find --set-root /io.sys
    1.94 +        chainloader /io.sys
    1.95 +	$SAVEDEFAULT --wait=2
    1.96 +
    1.97 +EOT
    1.98 +entry=$(($entry + 3)) && cat >> /tmp/floppybox.grub.menu <<EOT
    1.99 +title Windows (example on /dev/hda1)
   1.100 +	rootnoverify (hd0,0)
   1.101 +	chainloader +1
   1.102 +	$SAVEDEFAULT
   1.103 +
   1.104 +title Slitaz Frugal (example on /dev/hda1)
   1.105 +	root (hd0,0)
   1.106 +	kernel /boot/bzImage rw root=/dev/null vga=normal
   1.107 +	initrd /boot/rootfs.gz
   1.108 +	$SAVEDEFAULT
   1.109 +
   1.110 +title Slitaz Installed (example on /dev/hda2)
   1.111 +	root (hd0,1)
   1.112 +	kernel /boot/bzImage ro root=/dev/hda2 vga=normal
   1.113 +	$SAVEDEFAULT
   1.114 +
   1.115 +EOT
   1.116 +[ "$1" = "grub4dos" ] && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
   1.117 +title Slitaz cdrom image (example on /dev/hda1, DEFRAGMENTED)
   1.118 +        map (hd0,0)/boot/slitaz-cooking.iso (hd1)
   1.119 +        map --hook
   1.120 +        kernel (hd1)/boot/bzImage rw root=/dev/null vga=normal
   1.121 +        initrd (hd1)/boot/rootfs.gz
   1.122 +	$SAVEDEFAULT
   1.123 +
   1.124 +EOT
   1.125 +false && [ -f /usr/share/boot/grub.exe.lzma ] && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
   1.126 +title Grub4Dos
   1.127 +	kernel /boot/grub/grub.exe --config-file="configfile (fd0)/boot/grub/menu4dos.lst"
   1.128 +
   1.129 +EOT
   1.130 +}
   1.131 +
   1.132  install_grub()
   1.133  {
   1.134 +	LOOP=""
   1.135 +	GRUB_DEV=${DEVICE#/dev/}
   1.136 +	GRUB_DEV=${GRUB_DEV%% *}
   1.137  	case "$DEVICE" in
   1.138 -	/dev/*)
   1.139 -		mke2fs $DEVICE
   1.140 +	floppy*)
   1.141 +		LOOP="-o loop"
   1.142 +		GRUB_DEV=fd0
   1.143 +		DEVICE=boot.fd
   1.144 +		dd if=/dev/zero of=$DEVICE bs=18k count=80;;
   1.145 +	esac
   1.146 +	grep -qs "^# $2 menu" /tmp/floppybox.grub.menu || mkmenu $2
   1.147 +	case "$DEVICE" in
   1.148 +	/dev/*|boot.fd)
   1.149 +		yes y | mke2fs $DEVICE
   1.150  		mkdir /media/floppy
   1.151 -		mount $DEVICE /media/floppy
   1.152 -		mkdir -p /media/floppy/boot/grub
   1.153 -		cp /usr/lib/grub/i386-pc/stage? /media/floppy/boot/grub
   1.154 -		cp -a $1 /media/floppy
   1.155 -		grub-set-default --root-directory=/media/floppy 0
   1.156 -		umount $DEVICE
   1.157 -		grub --batch <<EOT
   1.158 -root (${DEVICE#/dev/})
   1.159 -setup (${DEVICE#/dev/})
   1.160 +		mount $LOOP $DEVICE /media/floppy
   1.161 +		if [ "$2" = "grub4dos" ]; then
   1.162 +			mkdir -p /media/floppy/boot
   1.163 +			unlzma -c /usr/share/boot/grldr.lzma > /media/floppy/grldr
   1.164 +			cp $1/boot/* /media/floppy/boot 2> /dev/null
   1.165 +			cp /tmp/floppybox.grub.menu /media/floppy/menu.lst
   1.166 +			umount -d /media/floppy
   1.167 +			bootlace --floppy --sectors-per-track=18 --heads=2 \
   1.168 +				 --chs --ext2 $DEVICE
   1.169 +		else
   1.170 +			mkdir -p /media/floppy/boot/grub
   1.171 +			cp /usr/lib/grub/i386-pc/stage? /media/floppy/boot/grub
   1.172 +			cp -a $1/boot /media/floppy
   1.173 +			cp /tmp/floppybox.grub.menu /media/floppy/boot/grub/menu.lst
   1.174 +			grub-set-default --root-directory=/media/floppy 0
   1.175 +			echo "($GRUB_DEV) $(losetup | grep $DEVICE | cut -d: -f1)" > $1/device.map
   1.176 +			[ -n "$LOOP" ] && LOOP="--device-map=$1/device.map"
   1.177 +			grub $LOOP --batch <<EOT
   1.178 +root ($GRUB_DEV)
   1.179 +setup ($GRUB_DEV)
   1.180  quit
   1.181  EOT
   1.182 -		;;
   1.183 +			umount -d /media/floppy
   1.184 +		fi ;;
   1.185  	cdrom*)
   1.186  		mkdir -p $1/boot/grub 2> /dev/null
   1.187 -		cp /usr/lib/grub/i386-pc/stage2_eltorito $1/boot/grub
   1.188 -		genisoimage -R -o boot.iso -b boot/grub/stage2_eltorito \
   1.189 -			-c boot/boot.cat -no-emul-boot -boot-load-size 4 \
   1.190 -			-input-charset iso8859-1 -boot-info-table $1
   1.191 -		;;
   1.192 +		cp /tmp/floppybox.grub.menu $1/boot/grub/menu.lst
   1.193 +		if [ "$2" = "grub4dos" ]; then
   1.194 +			unlzma -c /usr/share/boot/grldr.lzma > $1/boot/grub/grldr
   1.195 +			genisoimage -R -o boot.iso -b boot/grub/grldr \
   1.196 +				-c boot/boot.cat -no-emul-boot -boot-load-seg 0x1000 \
   1.197 +				-hide boot/boot.cat -input-charset iso8859-1 $1
   1.198 +		else
   1.199 +			cp /usr/lib/grub/i386-pc/stage2_eltorito $1/boot/grub
   1.200 +			genisoimage -R -o boot.iso -b boot/grub/stage2_eltorito \
   1.201 +				-c boot/boot.cat -no-emul-boot -boot-load-size 4 \
   1.202 +				-hide boot/boot.cat -input-charset iso8859-1 \
   1.203 +				-boot-info-table $1
   1.204 +		fi ;;
   1.205  	esac
   1.206  }
   1.207  
   1.208 @@ -85,39 +223,40 @@
   1.209  
   1.210  if [ "$1" == "call" ]; then
   1.211  	case "$2" in
   1.212 +	mkmenu) mkmenu $3;;
   1.213  	install)
   1.214  		DIR=/tmp/mkbootfloppy$$
   1.215  		mkdir -p $DIR
   1.216  		DEVICE=$4
   1.217  		file=$5
   1.218  		case "$3" in
   1.219 -		grub)
   1.220 +		grub*)
   1.221  			mkdir -p $DIR/boot/grub
   1.222 -			cp /tmp/floppybox.grub.menu $DIR/boot/grub/menu.lst
   1.223 -			[ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ]\
   1.224 +			[ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ] \
   1.225  				&& cat /usr/share/boot/btmgr /dev/zero | \
   1.226  				   dd bs=18k count=80 | gzip -9 > \
   1.227  				   $DIR/boot/btmgr.gz \
   1.228  				&& unlzma -c /usr/share/boot/memdisk.lzma > \
   1.229  					$DIR/boot/memdisk
   1.230  			[ -f /usr/share/boot/plop.gz -a \
   1.231 -			  -f /usr/share/boot/memdisk.lzma ]\
   1.232 -				&& zcat /usr/share/boot/plop.gz | cat - /dev/zero | \
   1.233 -				   dd bs=18k count=80 | gzip -9 > \
   1.234 -				   $DIR/boot/plop.gz \
   1.235 +			  -f /usr/share/boot/memdisk.lzma ] \
   1.236 +				&& zcat /usr/share/boot/plop.gz | \
   1.237 +				   cat - /dev/zero | dd bs=18k count=80 | \
   1.238 +				   gzip -9 > $DIR/boot/plop.gz \
   1.239  				&& unlzma -c /usr/share/boot/memdisk.lzma > \
   1.240  					$DIR/boot/memdisk
   1.241 -			[ -f /usr/share/boot/etherboot ]\
   1.242 +			[ -f /usr/share/boot/etherboot ] \
   1.243  				&& cp /usr/share/boot/etherboot $DIR/boot
   1.244  			[ -f /boot/gpxe ]\
   1.245  				&& cp /boot/gpxe $DIR/boot
   1.246 -			[ -f /usr/share/boot/memtest.lzma ]\
   1.247 -				&& unlzma -c /usr/share/boot/memtest.lzma > \
   1.248 -				$DIR/boot/memtest
   1.249 -			[ -f /usr/share/boot/grub.exe.lzma ]\
   1.250 -				&& unlzma -c /usr/share/boot/grub.exe.lzma > \
   1.251 -					$DIR/boot/grub.exe
   1.252 -			install_grub $DIR
   1.253 +			[ -f /usr/share/boot/memtest.lzma -a \
   1.254 +			  -f /usr/share/boot/memdisk.lzma ] \
   1.255 +				&& unlzma -c /usr/share/boot/memtest.lzma | \
   1.256 +				   cat - /dev/zero | dd bs=18k count=80 | \
   1.257 +				   gzip -9 > $DIR/boot/memtest.gz \
   1.258 +				&& unlzma -c /usr/share/boot/memdisk.lzma > \
   1.259 +					$DIR/boot/memdisk
   1.260 +			install_grub $DIR $3
   1.261  			;;
   1.262  		*)
   1.263      			case "$file" in
   1.264 @@ -127,16 +266,19 @@
   1.265      			esac
   1.266  			case "$DEVICE" in
   1.267  			/dev/*) $action $file > $DEVICE;;
   1.268 +			flopp*) $action $file | cat - /dev/zero | \
   1.269 +						dd bs=18k count=80 > boot.fd;;
   1.270  			cdrom*)
   1.271  				mkdir -p $DIR/boot/grub
   1.272  				case "$3" in
   1.273 -				btmgr|plop)
   1.274 +				btmgr|plop|memtest)
   1.275  					$action $file | cat - /dev/zero | \
   1.276  						dd bs=18k count=80 | \
   1.277  						gzip -9 > $DIR/boot/$3.gz
   1.278  					unlzma -c /usr/share/boot/memdisk.lzma \
   1.279  						> $DIR/boot/memdisk
   1.280 -					cat > $DIR/boot/grub/menu.lst << EOT
   1.281 +					cat > /tmp/floppybox.grub.menu << EOT
   1.282 +# grub menu
   1.283  timeout 0
   1.284  title $3
   1.285  kernel /boot/memdisk floppy c=80 h=2 s=18
   1.286 @@ -144,14 +286,15 @@
   1.287  EOT
   1.288  					;;
   1.289  				*)	$action $file > $DIR/boot/$3
   1.290 -					cat > $DIR/boot/grub/menu.lst << EOT
   1.291 +					cat > /tmp/floppybox.grub.menu << EOT
   1.292 +# grub menu
   1.293  timeout 0
   1.294  title $3
   1.295  kernel /boot/$3
   1.296  EOT
   1.297  					;;
   1.298  				esac
   1.299 -				install_grub $DIR
   1.300 +				install_grub $DIR grub
   1.301  				;;
   1.302  			esac
   1.303  			;;
   1.304 @@ -181,65 +324,6 @@
   1.305  	exit 0
   1.306  fi
   1.307  
   1.308 -cat > /tmp/floppybox.grub.menu <<EOT
   1.309 -default saved
   1.310 -timeout 8
   1.311 -color yellow/brown light-green/black
   1.312 -
   1.313 -EOT
   1.314 -[ -f /boot/gpxe ] && cat >> /tmp/floppybox.grub.menu <<EOT
   1.315 -title gPXE (Boot from the Web, PXE/iSCSI/AoE support)
   1.316 -	kernel /boot/gpxe $(dd if=/boot/gpxe bs=1 skip=519 count=255 2>/dev/null | strings)
   1.317 -
   1.318 -EOT
   1.319 -[ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ]\
   1.320 -	&& cat >> /tmp/floppybox.grub.menu <<EOT
   1.321 -title Smart Boot Manager (text - boot floppy, hard disk or CD/DVD)
   1.322 -	kernel /boot/memdisk floppy c=80 h=2 s=18
   1.323 -	initrd /boot/btmgr.gz
   1.324 -
   1.325 -EOT
   1.326 -[ -f /usr/share/boot/plop.gz -a -f /usr/share/boot/memdisk.lzma ]\
   1.327 -	&& cat >> /tmp/floppybox.grub.menu <<EOT
   1.328 -title Plop Boot Manager (graphic - boot floppy, hard disk, CD/DVD or USB)
   1.329 -	kernel /boot/memdisk floppy c=80 h=2 s=18
   1.330 -	initrd /boot/plop.gz
   1.331 -
   1.332 -EOT
   1.333 -cat >> /tmp/floppybox.grub.menu <<EOT
   1.334 -title Windows (example on /dev/hda1)
   1.335 -	rootnoverify (hd0,0)
   1.336 -	chainloader +1
   1.337 -	save default
   1.338 -
   1.339 -title Slitaz Live (example on /dev/hda1)
   1.340 -	root (hd0,0)
   1.341 -	kernel /boot/bzImage rw root=/dev/null vga=normal
   1.342 -	initrd /boot/rootfs.gz
   1.343 -	save default
   1.344 -
   1.345 -title Slitaz Installed (example on /dev/hda2)
   1.346 -	root (hd0,1)
   1.347 -	kernel /boot/bzImage ro root=/dev/hda2 vga=normal
   1.348 -	save default
   1.349 -
   1.350 -EOT
   1.351 -[ -f /usr/share/boot/etherboot ] && cat >> /tmp/floppybox.grub.menu <<EOT
   1.352 -title Etherboot (LAN boot, PXE or NBI)
   1.353 -	kernel /boot/etherboot
   1.354 -
   1.355 -EOT
   1.356 -[ -f /usr/share/boot/memtest.lzma ] && cat >> /tmp/floppybox.grub.menu <<EOT
   1.357 -title Memtest86+ (Test system memory)
   1.358 -	kernel /boot/memtest
   1.359 -
   1.360 -EOT
   1.361 -[ -f /usr/share/boot/grub.exe.lzma ] && cat >> /tmp/floppybox.grub.menu <<EOT
   1.362 -title Grub4Dos
   1.363 -	kernel /boot/grub/grub.exe --config-file="configfile (fd0)/boot/grub/menu4dos.lst"
   1.364 -
   1.365 -EOT
   1.366 -
   1.367  if [ -z "$XAUTHORITY" ]; then
   1.368  
   1.369      : ${DIALOG=dialog}
   1.370 @@ -261,6 +345,7 @@
   1.371  		Etherboot	"Replacement for proprietary PXE ROMs." off \
   1.372  		gPXE		"Boot from http://boot.slitaz.org/" off \
   1.373  		Memtest86+	"Memory failures detection tool." off \
   1.374 +		Grub4DOS	"Enhanced grub version supporting NTFS" off \
   1.375  		Grub		"Boot loader with command shell." off  2>&1 1>&3`
   1.376  	retval=$?
   1.377  	exec 3>&-
   1.378 @@ -292,6 +377,7 @@
   1.379  Etherboot /usr/share/boot/etherboot etherboot
   1.380  gPXE /boot/gpxe gpxe
   1.381  Memtest86+ /usr/share/boot/memtest.lzma memtest
   1.382 +Grub4DOS /usr/share/boot/grldr.lzma grub4dos
   1.383  Grub /usr/sbin/grub grub
   1.384  EOT
   1.385      done
   1.386 @@ -358,9 +444,9 @@
   1.387  	[ -d $i ] || continue
   1.388  	BOOT_DIALOG="$BOOT_DIALOG 
   1.389  	  <item>/dev/${i#*block:}</item>"
   1.390 -	on=off
   1.391  done
   1.392  tmp='	  <item>cdrom image (boot.iso)</item>
   1.393 +	  <item>floppy image (boot.fd)</item>
   1.394  	</combobox>
   1.395          <button>
   1.396            <label>Format floppy</label>
   1.397 @@ -369,7 +455,7 @@
   1.398          </button>
   1.399        </hbox>
   1.400      </frame>
   1.401 -    <notebook labels="LiveCD|USB|PXE Network|WEB Network|Memory Test|Expert">
   1.402 +    <notebook labels="LiveCD|USB|PXE Network|WEB Network|Memory Test|Windows|Expert">
   1.403  '  
   1.404  BOOT_DIALOG="$BOOT_DIALOG$tmp"
   1.405  while read name file pkg desc; do
   1.406 @@ -386,11 +472,12 @@
   1.407        <hbox>
   1.408  "
   1.409    if [ -f $file ]; then
   1.410 -    if [ "$pkg" = "grub" ]; then
   1.411 +    if [ "$pkg" = "grub" -o "$pkg" = "grub4dos" ]; then
   1.412        tmp="$tmp
   1.413        <button>
   1.414          <label>Grub menu</label>
   1.415          <input file icon=\"accessories-text-editor\"></input>
   1.416 +	<action>bootfloppybox call mkmenu $pkg</action>
   1.417          <action type=\"lauch\">leafpad /tmp/floppybox.grub.menu</action>
   1.418        </button>
   1.419  "
   1.420 @@ -475,6 +562,7 @@
   1.421  Etherboot /usr/share/boot/etherboot etherboot This network bootloader provides a replacement for proprietary PXE or NBI ROMs.
   1.422  gPXE /boot/gpxe gpxe PXE / iSCSI / AoE network bootloader.
   1.423  Memtest86+ /usr/share/boot/memtest.lzma memtest Memory failures detection tool.
   1.424 +Grub4DOS /usr/share/boot/grldr.lzma grub4dos Enhanced grub version supporting NTFS
   1.425  Grub /usr/sbin/grub grub General purpose boot loader with command shell
   1.426  EOT
   1.427  tmp='