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='