slitaz-tools annotate tinyutils/bootfloppybox @ rev 456

Mountbox: mv tip to help file
author Paul Issott <paul@slitaz.org>
date Sun Mar 21 18:25:28 2010 +0000 (2010-03-21)
parents 652e107d3457
children 14ecc1b226b2
rev   line source
pascal@130 1 #! /bin/sh
pascal@130 2 #
pascal@130 3 # Gtkdialog box for the mount command. Part of SliTaz tools.
pascal@130 4 #
pascal@274 5 VERSION=20081121
pascal@130 6
pascal@130 7 # Check if user is root.
pascal@130 8 check_root()
pascal@130 9 {
pascal@130 10 if test $(id -u) != 0 ; then
pascal@130 11 echo -e "
pascal@130 12 You must be root to run `basename $0`. Please type 'su' and
pascal@130 13 root password to become super-user.\n"
pascal@130 14 exit 0
pascal@130 15 fi
pascal@130 16 }
pascal@130 17
pascal@213 18 # This function is used after each screen to contine or abort install.
pascal@213 19 check_retval()
pascal@213 20 {
pascal@213 21 case $retval in
pascal@213 22 1)
pascal@214 23 rm -f /tmp/floppybox.grub.menu
pascal@213 24 echo -e "\nVoluntary exit.\n" && exit 0 ;;
pascal@213 25 255)
pascal@214 26 rm -f /tmp/floppybox.grub.menu
pascal@213 27 echo -e "ESC pressed.\n" && exit 0 ;;
pascal@213 28 esac
pascal@213 29 }
pascal@213 30
pascal@213 31 select_floppy()
pascal@213 32 {
pascal@264 33 DEVICE="$DIALOG --title \" Floppy device \" --backtitle \"Boot Floppy Creation\" --clear --extra-button --extra-label \"Format\" --colors --radiolist \"
pascal@264 34 Select boot device
pascal@264 35 \" 18 70 50"
pascal@264 36 on=on
pascal@264 37 for i in /sys/devices/platform/floppy.*/block:*; do
pascal@264 38 [ -d $i ] || continue
pascal@264 39 DEVICE="$DEVICE /dev/${i#*block:} 'Floppy in ${i#*block:}' $on"
pascal@264 40 on=off
pascal@264 41 done
pascal@274 42 DEVICE="$DEVICE floppy \"cdrom image file boot.iso\" $on"
pascal@274 43 DEVICE="$DEVICE cdrom \"floppy image file boot.fd\" off 2>&1 1>&3"
pascal@213 44 exec 3>&1
pascal@264 45 DEVICE=`eval $DEVICE`
pascal@213 46 retval=$?
pascal@213 47 exec 3>&-
pascal@213 48 check_retval
pascal@213 49 if [ "$retval" = "3" ]; then
pascal@264 50 case "$DEVICE" in
pascal@264 51 /dev/*) fdformat -n $DEVICE;;
pascal@264 52 esac
pascal@213 53 fi
pascal@213 54 }
pascal@213 55
pascal@274 56 mkmenu()
pascal@274 57 {
pascal@274 58 if [ "$1" = "grub4dos" ]; then
pascal@274 59 SAVEDEFAULT="save default"
pascal@274 60 cat > /tmp/floppybox.grub.menu <<EOT
pascal@274 61 # grub4dos menu
pascal@274 62 default /default
pascal@274 63 EOT
pascal@274 64 else
pascal@274 65 SAVEDEFAULT="savedefault"
pascal@274 66 cat > /tmp/floppybox.grub.menu <<EOT
pascal@274 67 # grub menu
pascal@274 68 default saved
pascal@274 69 EOT
pascal@274 70 fi
pascal@274 71 cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 72 timeout 8
pascal@274 73 color yellow/brown light-green/black
pascal@274 74
pascal@274 75 EOT
pascal@274 76 entry=0
pascal@274 77 [ -f /boot/gpxe ] && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 78 title gPXE (Boot from the Web, PXE/iSCSI/AoE support)
pascal@274 79 kernel /boot/gpxe $(dd if=/boot/gpxe bs=1 skip=519 count=255 2>/dev/null | strings)
pascal@274 80
pascal@274 81 EOT
pascal@274 82 [ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ] \
pascal@274 83 && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 84 title Smart Boot Manager (text - boot floppy, hard disk or CD/DVD)
pascal@274 85 kernel /boot/memdisk floppy c=80 h=2 s=18
pascal@274 86 initrd /boot/btmgr.gz
pascal@274 87
pascal@274 88 EOT
pascal@382 89 http://mirror.slitaz.org/boot/plpbt.bin
pascal@382 90 [ -f /usr/share/boot/plpbt.bin ] \
pascal@274 91 && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 92 title Plop Boot Manager (graphic - boot floppy, hard disk, CD/DVD or USB)
pascal@382 93 kernel /boot/plpbt.bin
pascal@274 94
pascal@274 95 EOT
pascal@274 96 [ -f /usr/share/boot/etherboot ] && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 97 title Etherboot (LAN boot, PXE or NBI)
pascal@274 98 kernel /boot/etherboot
pascal@274 99
pascal@274 100 EOT
pascal@274 101 [ -f /usr/share/boot/memtest.lzma -a -f /usr/share/boot/memdisk.lzma ] \
pascal@274 102 && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 103 title Memtest86+ (Test system memory)
pascal@274 104 kernel /boot/memdisk floppy c=80 h=2 s=18
pascal@274 105 initrd /boot/memtest.gz
pascal@274 106
pascal@274 107 EOT
pascal@274 108 [ "$1" = "grub4dos" ] && entry=$(($entry + 3)) && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 109 title Windows (scan ntldr)
pascal@274 110 fallback $(($entry -3 + 1))
pascal@274 111 find --set-root /ntldr
pascal@274 112 chainloader /ntldr
pascal@274 113 $SAVEDEFAULT --wait=2
pascal@274 114
pascal@274 115 title Windows (scan cmldr)
pascal@274 116 fallback $(($entry -3 + 2))
pascal@274 117 find --set-root /cmldr
pascal@274 118 chainloader /cmldr
pascal@274 119 $SAVEDEFAULT --wait=2
pascal@274 120
pascal@274 121 title Windows (scan io.sys)
pascal@274 122 fallback $(($entry -3 + 3))
pascal@274 123 find --set-root /io.sys
pascal@274 124 chainloader /io.sys
pascal@274 125 $SAVEDEFAULT --wait=2
pascal@274 126
pascal@274 127 EOT
pascal@274 128 entry=$(($entry + 3)) && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 129 title Windows (example on /dev/hda1)
pascal@274 130 rootnoverify (hd0,0)
pascal@274 131 chainloader +1
pascal@274 132 $SAVEDEFAULT
pascal@274 133
pascal@274 134 title Slitaz Frugal (example on /dev/hda1)
pascal@274 135 root (hd0,0)
pascal@274 136 kernel /boot/bzImage rw root=/dev/null vga=normal
pascal@274 137 initrd /boot/rootfs.gz
pascal@274 138 $SAVEDEFAULT
pascal@274 139
pascal@274 140 title Slitaz Installed (example on /dev/hda2)
pascal@274 141 root (hd0,1)
pascal@274 142 kernel /boot/bzImage ro root=/dev/hda2 vga=normal
pascal@274 143 $SAVEDEFAULT
pascal@274 144
pascal@274 145 EOT
pascal@274 146 [ "$1" = "grub4dos" ] && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 147 title Slitaz cdrom image (example on /dev/hda1, DEFRAGMENTED)
pascal@274 148 map (hd0,0)/boot/slitaz-cooking.iso (hd1)
pascal@274 149 map --hook
pascal@274 150 kernel (hd1)/boot/bzImage rw root=/dev/null vga=normal
pascal@274 151 initrd (hd1)/boot/rootfs.gz
pascal@274 152 $SAVEDEFAULT
pascal@274 153
pascal@274 154 EOT
pascal@274 155 false && [ -f /usr/share/boot/grub.exe.lzma ] && entry=$(($entry + 1)) && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@274 156 title Grub4Dos
pascal@274 157 kernel /boot/grub/grub.exe --config-file="configfile (fd0)/boot/grub/menu4dos.lst"
pascal@274 158
pascal@274 159 EOT
pascal@274 160 }
pascal@274 161
pascal@264 162 install_grub()
pascal@264 163 {
pascal@274 164 LOOP=""
pascal@274 165 GRUB_DEV=${DEVICE#/dev/}
pascal@274 166 GRUB_DEV=${GRUB_DEV%% *}
pascal@264 167 case "$DEVICE" in
pascal@274 168 floppy*)
pascal@274 169 LOOP="-o loop"
pascal@274 170 GRUB_DEV=fd0
pascal@274 171 DEVICE=boot.fd
pascal@274 172 dd if=/dev/zero of=$DEVICE bs=18k count=80;;
pascal@274 173 esac
pascal@274 174 grep -qs "^# $2 menu" /tmp/floppybox.grub.menu || mkmenu $2
pascal@274 175 case "$DEVICE" in
pascal@274 176 /dev/*|boot.fd)
pascal@274 177 yes y | mke2fs $DEVICE
pascal@213 178 mkdir /media/floppy
pascal@274 179 mount $LOOP $DEVICE /media/floppy
pascal@274 180 if [ "$2" = "grub4dos" ]; then
pascal@274 181 mkdir -p /media/floppy/boot
pascal@274 182 unlzma -c /usr/share/boot/grldr.lzma > /media/floppy/grldr
pascal@274 183 cp $1/boot/* /media/floppy/boot 2> /dev/null
pascal@274 184 cp /tmp/floppybox.grub.menu /media/floppy/menu.lst
pascal@274 185 umount -d /media/floppy
pascal@274 186 bootlace --floppy --sectors-per-track=18 --heads=2 \
pascal@274 187 --chs --ext2 $DEVICE
pascal@274 188 else
pascal@274 189 mkdir -p /media/floppy/boot/grub
pascal@274 190 cp /usr/lib/grub/i386-pc/stage? /media/floppy/boot/grub
pascal@274 191 cp -a $1/boot /media/floppy
pascal@274 192 cp /tmp/floppybox.grub.menu /media/floppy/boot/grub/menu.lst
pascal@274 193 grub-set-default --root-directory=/media/floppy 0
pascal@274 194 echo "($GRUB_DEV) $(losetup | grep $DEVICE | cut -d: -f1)" > $1/device.map
pascal@274 195 [ -n "$LOOP" ] && LOOP="--device-map=$1/device.map"
pascal@274 196 grub $LOOP --batch <<EOT
pascal@274 197 root ($GRUB_DEV)
pascal@274 198 setup ($GRUB_DEV)
pascal@214 199 quit
pascal@214 200 EOT
pascal@274 201 umount -d /media/floppy
pascal@274 202 fi ;;
pascal@264 203 cdrom*)
pascal@266 204 mkdir -p $1/boot/grub 2> /dev/null
pascal@274 205 cp /tmp/floppybox.grub.menu $1/boot/grub/menu.lst
pascal@274 206 if [ "$2" = "grub4dos" ]; then
pascal@274 207 unlzma -c /usr/share/boot/grldr.lzma > $1/boot/grub/grldr
pascal@274 208 genisoimage -R -o boot.iso -b boot/grub/grldr \
pascal@274 209 -c boot/boot.cat -no-emul-boot -boot-load-seg 0x1000 \
pascal@274 210 -hide boot/boot.cat -input-charset iso8859-1 $1
pascal@274 211 else
pascal@274 212 cp /usr/lib/grub/i386-pc/stage2_eltorito $1/boot/grub
pascal@274 213 genisoimage -R -o boot.iso -b boot/grub/stage2_eltorito \
pascal@274 214 -c boot/boot.cat -no-emul-boot -boot-load-size 4 \
pascal@274 215 -hide boot/boot.cat -input-charset iso8859-1 \
pascal@274 216 -boot-info-table $1
pascal@274 217 fi ;;
pascal@264 218 esac
pascal@264 219 }
pascal@264 220
pascal@405 221 # write a 32 bits data
pascal@405 222 # usage: storelong offset data32 file
pascal@405 223 storelong()
pascal@405 224 {
pascal@405 225 printf "00000 %02X %02X %02X %02X \n" \
pascal@405 226 $(( $2 & 255 )) $(( ($2>>8) & 255 )) \
pascal@405 227 $(( ($2>>16) & 255 )) $(( ($2>>24) & 255 )) | \
pascal@405 228 hexdump -R | dd bs=1 conv=notrunc of=$3 seek=$(( $1 )) 2> /dev/null
pascal@405 229 }
pascal@405 230
pascal@405 231 # read a 32 bits data
pascal@405 232 # usage: getlong offset file
pascal@405 233 getlong()
pascal@405 234 {
pascal@405 235 dd if=$2 bs=1 skip=$(( $1 )) count=4 2> /dev/null | \
pascal@405 236 hexdump -e '"" 1/4 "%d" "\n"'
pascal@405 237 }
pascal@405 238
pascal@405 239 floppyset()
pascal@405 240 {
pascal@405 241 KERNEL="$1"
pascal@405 242 INITRD="$2"
pascal@405 243 shift 2
pascal@405 244 CMDLINE="$@"
pascal@405 245
pascal@405 246 # bzImage offsets
pascal@405 247 SetupSzOfs=497
pascal@405 248 SyssizeOfs=500
pascal@405 249 CodeAdrOfs=0x214
pascal@405 250 RamfsAdrOfs=0x218
pascal@405 251 RamfsLenOfs=0x21C
pascal@405 252 ArgPtrOfs=0x228
pascal@405 253
pascal@405 254 # boot+setup address
pascal@405 255 SetupBase=0x90000
pascal@405 256
pascal@405 257 stacktop=0x9E00
pascal@405 258
pascal@405 259 bs=/tmp/bs$$
pascal@405 260
pascal@405 261 # Get and patch boot sector
pascal@405 262 dd if=$KERNEL bs=512 count=1 of=$bs 2> /dev/null
pascal@405 263 uudecode <<EOT | dd of=$bs conv=notrunc 2> /dev/null
pascal@405 264 begin-base64 644 -
pascal@408 265 v/Sd/GgAkAcxyQYXify7eACO2cU3sQbzpY7ZiSeMRwKg8X2YQAYfxkX4P/qz
pascal@408 266 GFFLdfyXmEHoPgG+AAKATBGAx0QkAJwDdA7oZAG+KAI5HHIuR4scVuhAAV+L
pascal@408 267 NehQAbAgzRCwCM0QTpjNFjwIdAOIBK07NXTy6CoBPAp14oh8/onmsA+/9AH+
pascal@408 268 TRyxBbSTiUQcsAGJRBSZiVQQiVQYZjHbQ9PjS2YDHWbT62gAEAe/gAAp+5xz
pascal@408 269 AgHfU1Yx2+jaAF65AIC0h/5EHM0VW5133KEaAki/HAKxCThEHHKwMcDNE+oA
pascal@408 270 ACCQsEYoyL65AejCAF3rKYD5E3IEOMF3boD+AnIEOOZ3b4D9UHN5YIH9AAZ0
pascal@408 271 JwZSUVOWtAJQuQYAUbEEwcUEsA8h6ASQJxRAJ+h1AOLusCDNEFnirpjNE2Ex
pascal@408 272 9q2RrZKtUCjIdwKwAZg5+HICifhQUrQCzRNalV5YcpYp9wHxweYJAfM4wXUm
pascal@408 273 iMj+xrEBOOZ1HIj0/sW2ADwTdRKA/VByDbUAYL68AegkAJjNFmGjBABSUWaP
pascal@408 274 BgAACf91nhYHsDEsA7QOuwcAzRA8DXTzw7AN6O//rAjAdfjDWDoASW5zZXJ0
pascal@408 275 IG5leHQgZmxvcHB5IGFuZCBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLgcN
pascal@408 276 AA==
pascal@405 277 ====
pascal@405 278 EOT
pascal@405 279
pascal@405 280 # Get setup
pascal@405 281 setupsz=$(getlong $SetupSzOfs $bs)
pascal@405 282 setupszb=$(( $setupsz & 255 ))
pascal@405 283 dd if=$KERNEL bs=512 skip=1 count=$setupszb 2> /dev/null >> $bs
pascal@405 284
pascal@405 285 # Store cmdline after setup
pascal@405 286 if [ -n "$CMDLINE" ]; then
pascal@405 287 echo -n "$CMDLINE" | dd bs=512 count=1 conv=sync 2> /dev/null >> $bs
pascal@405 288 storelong ArgPtrOfs $(( $SetupBase + $stacktop )) $bs
pascal@405 289 fi
pascal@405 290
pascal@405 291 # Compute initramfs size
pascal@405 292 initrdlen=0
pascal@405 293 padding=0
pascal@405 294 for i in $( echo $INITRD | sed 's/,/ /' ); do
pascal@405 295 [ -s "$i" ] || continue
pascal@405 296 initrdlen=$(( $initrdlen + $padding ))
pascal@405 297 padding=$(stat -c %s $i)
pascal@405 298 initrdlen=$(( $initrdlen + $padding ))
pascal@405 299 padding=$(( 4096 - ($padding & 4095) ))
pascal@405 300 [ $padding -eq 4096 ] && padding=0
pascal@405 301 done
pascal@405 302 Ksize=$(( $(getlong $SyssizeOfs $bs)*16 ))
pascal@405 303 Kpad=$(( (($Ksize+4095)/4096)*4096 - Ksize ))
pascal@405 304 if [ $initrdlen -ne 0 ]; then
pascal@405 305 Kbase=$(getlong $CodeAdrOfs $bs)
pascal@405 306 storelong $RamfsAdrOfs \
pascal@405 307 $(( (0x1000000 - $initrdlen) & 0xFFFF0000 )) $bs
pascal@405 308 storelong $RamfsLenOfs $initrdlen $bs
pascal@405 309 fi
pascal@405 310
pascal@405 311 # Output boot sector + setup + cmdline
pascal@405 312 dd if=$bs 2> /dev/null
pascal@405 313
pascal@405 314 # Output kernel code
pascal@405 315 dd if=$KERNEL bs=512 skip=$(( $setupszb + 1 )) 2> /dev/null
pascal@405 316
pascal@405 317 # Pad to next sector
pascal@405 318 Kpad=$(( 512 - ($(stat -c %s $KERNEL) & 511) ))
pascal@405 319 [ $Kpad -eq 512 ] || dd if=/dev/zero bs=1 count=$Kpad 2> /dev/null
pascal@405 320
pascal@405 321 # Output initramfs
pascal@405 322 padding=0
pascal@405 323 for i in $( echo $INITRD | sed 's/,/ /' ); do
pascal@405 324 [ -s "$i" ] || continue
pascal@405 325 [ $padding -ne 0 ] && dd if=/dev/zero bs=1 count=$padding
pascal@405 326 dd if=$i 2> /dev/null
pascal@405 327 padding=$(( 4096 - ($(stat -c %s $i) & 4095) ))
pascal@405 328 [ $padding -eq 4096 ] && padding=0
pascal@405 329 done
pascal@405 330
pascal@405 331 # Cleanup
pascal@405 332 rm -f $bs
pascal@405 333 }
pascal@405 334
pascal@264 335 while true; do
pascal@264 336
pascal@264 337 if [ "$1" == "call" ]; then
pascal@264 338 case "$2" in
pascal@274 339 mkmenu) mkmenu $3;;
pascal@405 340 mkfloppies)
pascal@405 341 shift 2
pascal@405 342 floppyset $@ | split -b 1440k /dev/stdin floppy$$
pascal@405 343 i=1
pascal@405 344 ls floppy$$* | while read file ; do
pascal@405 345 output=floppy.$(printf "%03d" $i)
pascal@405 346 cat $file /dev/zero | dd bs=1k count=1440 of=$output conv=sync 2> /dev/null
pascal@405 347 rm -f $file
pascal@405 348 i=$(( $i + 1 ))
pascal@405 349 done;;
pascal@264 350 install)
pascal@264 351 DIR=/tmp/mkbootfloppy$$
pascal@264 352 mkdir -p $DIR
pascal@264 353 DEVICE=$4
pascal@264 354 file=$5
pascal@264 355 case "$3" in
pascal@274 356 grub*)
pascal@264 357 mkdir -p $DIR/boot/grub
pascal@274 358 [ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ] \
pascal@264 359 && cat /usr/share/boot/btmgr /dev/zero | \
pascal@264 360 dd bs=18k count=80 | gzip -9 > \
pascal@264 361 $DIR/boot/btmgr.gz \
pascal@264 362 && unlzma -c /usr/share/boot/memdisk.lzma > \
pascal@264 363 $DIR/boot/memdisk
pascal@382 364 [ -f /usr/share/boot/plpbt.bin ] \
pascal@382 365 && cp /usr/share/boot/plpbt.bin $DIR/boot
pascal@274 366 [ -f /usr/share/boot/etherboot ] \
pascal@264 367 && cp /usr/share/boot/etherboot $DIR/boot
pascal@264 368 [ -f /boot/gpxe ]\
pascal@264 369 && cp /boot/gpxe $DIR/boot
pascal@274 370 [ -f /usr/share/boot/memtest.lzma -a \
pascal@274 371 -f /usr/share/boot/memdisk.lzma ] \
pascal@274 372 && unlzma -c /usr/share/boot/memtest.lzma | \
pascal@274 373 cat - /dev/zero | dd bs=18k count=80 | \
pascal@274 374 gzip -9 > $DIR/boot/memtest.gz \
pascal@274 375 && unlzma -c /usr/share/boot/memdisk.lzma > \
pascal@274 376 $DIR/boot/memdisk
pascal@274 377 install_grub $DIR $3
pascal@264 378 ;;
pascal@264 379 *)
pascal@264 380 case "$file" in
pascal@264 381 *.lzma) action="unlzma -c";;
pascal@264 382 *.gz) action="zcat";;
pascal@264 383 *) action="cat";;
pascal@264 384 esac
pascal@264 385 case "$DEVICE" in
pascal@264 386 /dev/*) $action $file > $DEVICE;;
pascal@274 387 flopp*) $action $file | cat - /dev/zero | \
pascal@274 388 dd bs=18k count=80 > boot.fd;;
pascal@264 389 cdrom*)
pascal@264 390 mkdir -p $DIR/boot/grub
pascal@264 391 case "$3" in
pascal@382 392 btmgr|memtest)
pascal@264 393 $action $file | cat - /dev/zero | \
pascal@264 394 dd bs=18k count=80 | \
pascal@264 395 gzip -9 > $DIR/boot/$3.gz
pascal@264 396 unlzma -c /usr/share/boot/memdisk.lzma \
pascal@264 397 > $DIR/boot/memdisk
pascal@274 398 cat > /tmp/floppybox.grub.menu << EOT
pascal@274 399 # grub menu
pascal@264 400 timeout 0
pascal@264 401 title $3
pascal@264 402 kernel /boot/memdisk floppy c=80 h=2 s=18
pascal@264 403 initrd /boot/$3.gz
pascal@264 404 EOT
pascal@264 405 ;;
pascal@264 406 *) $action $file > $DIR/boot/$3
pascal@274 407 cat > /tmp/floppybox.grub.menu << EOT
pascal@274 408 # grub menu
pascal@264 409 timeout 0
pascal@264 410 title $3
pascal@264 411 kernel /boot/$3
pascal@264 412 EOT
pascal@264 413 ;;
pascal@264 414 esac
pascal@274 415 install_grub $DIR grub
pascal@264 416 ;;
pascal@264 417 esac
pascal@264 418 ;;
pascal@264 419 esac
pascal@264 420 rm -rf $DIR
pascal@264 421 ;;
pascal@220 422 get-plop)
pascal@382 423 mkdir -p /tmp/get-plop$$
pascal@382 424 PLOP_URL=http://mirror.slitaz.org/boot/plpbt.bin
pascal@382 425 wget -O - $PLOP_URL > /tmp/get-plop$$/plpbt.bin
pascal@382 426 VERSION="$(strings /tmp/get-plop$$/plpbt.bin \
pascal@382 427 | grep 'Boot Manager v' | sed 's/.* v\([0-9\.]*\) .*/\1/')"
pascal@382 428 mkdir -p $(dirname /tmp/get-plop$$/plop-$VERSION/fs/$3)
pascal@382 429 mv /tmp/get-plop$$/plpbt.bin \
pascal@382 430 /tmp/get-plop$$/plop-$VERSION/fs/$3
pascal@285 431 if [ -s /tmp/get-plop$$/plop-$VERSION/fs/$3 ]; then
pascal@285 432 cat > /tmp/get-plop$$/plop-$VERSION/receipt <<EOT
pascal@220 433 PACKAGE="plop"
pascal@285 434 VERSION="$VERSION"
pascal@220 435 CATEGORY="non-free"
pascal@220 436 SHORT_DESC="Plop boot manager."
pascal@220 437 WEB_SITE="http://www.plop.at/en/bootmanager.html"
pascal@220 438 EOT
pascal@285 439 ( cd /tmp/get-plop$$ ; tazpkg pack plop-$VERSION )
pascal@285 440 tazpkg install /tmp/get-plop$$/plop-$VERSION.tazpkg
pascal@264 441 fi
pascal@220 442 rm -rf /tmp/get-plop$$
pascal@220 443 ;;
pascal@214 444 *) echo "Invalid command $0 $@" 1>&2
pascal@214 445 exit 1;;
pascal@214 446 esac
pascal@214 447 exit 0
pascal@214 448 fi
pascal@214 449
pascal@213 450 if [ -z "$XAUTHORITY" ]; then
pascal@213 451
pascal@213 452 : ${DIALOG=dialog}
pascal@213 453
pascal@213 454 DEVICE=/dev/fd0
pascal@213 455 while true; do
pascal@213 456 exec 3>&1
pascal@213 457 ID_SOURCE=`$DIALOG --title " Choose a boot floppy " \
pascal@213 458 --backtitle "Boot Floppy Creation on $DEVICE" --clear \
pascal@213 459 --extra-button --extra-label "Change floppy" \
pascal@213 460 --yes-label "Install" \
pascal@213 461 --no-label "Quit" \
pascal@213 462 --colors --radiolist "
paul@317 463 Create a floppy or a cdrom to boot a LiveCD in a PXE network...
pascal@264 464 May need a floppy disk in drive. Erase the whole floppy disk.
pascal@213 465 " 18 70 50\
pascal@220 466 SmartBtmgr "Boot any partition or ATAPI CD-ROM." on \
pascal@382 467 Plop "Boot USB harddisk floppy or CD/DVD." off \
pascal@220 468 Etherboot "Replacement for proprietary PXE ROMs." off \
pascal@223 469 gPXE "Boot from http://boot.slitaz.org/" off \
pascal@220 470 Memtest86+ "Memory failures detection tool." off \
paul@333 471 Grub4DOS "Enhanced grub version supporting NTFS." off \
pascal@220 472 Grub "Boot loader with command shell." off 2>&1 1>&3`
pascal@213 473 retval=$?
pascal@213 474 exec 3>&-
pascal@213 475 check_retval
pascal@213 476 if [ "$retval" = "3" ]; then
pascal@213 477 select_floppy
pascal@213 478 continue;
pascal@213 479 fi
pascal@213 480 while read key file pkg; do
pascal@213 481 [ "$key" = "$ID_SOURCE" ] || continue
pascal@213 482 if [ ! -f "$file" ]; then
pascal@213 483 $DIALOG --title " Install package " --colors \
pascal@213 484 --backtitle "Boot Floppy Creation" --clear \
pascal@213 485 --yes-label "Install" \
pascal@213 486 --no-label "Quit" \
pascal@213 487 --yesno "The package $pkg is not yet installed. Install it ?" 18 70
pascal@213 488 retval=$?
pascal@220 489 if [ "$pkg" = "plop" ]; then
pascal@220 490 bootfloppybox call get-plop $file
pascal@220 491 else
pascal@264 492 tazpkg get-install $pkg
pascal@220 493 fi
pascal@213 494 fi
pascal@264 495 bootfloppybox call install "$pkg" "$DEVICE" "$file"
pascal@213 496 exit 0
pascal@213 497 done <<EOT
pascal@213 498 SmartBtmgr /usr/share/boot/btmgr btmgr
pascal@382 499 Plop /usr/share/boot/plpbt.bin plop
pascal@213 500 Etherboot /usr/share/boot/etherboot etherboot
pascal@222 501 gPXE /boot/gpxe gpxe
pascal@213 502 Memtest86+ /usr/share/boot/memtest.lzma memtest
pascal@274 503 Grub4DOS /usr/share/boot/grldr.lzma grub4dos
pascal@213 504 Grub /usr/sbin/grub grub
pascal@213 505 EOT
pascal@213 506 done
pascal@213 507 fi
pascal@264 508 #
pascal@264 509 # Describe gPXE arguments.
pascal@264 510 #
pascal@264 511 export HELP='
pascal@264 512 <window title="gPXE forced url" icon-name="gtk-floppy">
pascal@264 513 <vbox>
pascal@264 514 <text use-markup="true">
pascal@264 515 <label>"
pascal@264 516 <b>Web boot parameters</b>"
pascal@264 517 </label>
pascal@264 518 </text>
pascal@264 519 <frame>
pascal@264 520 <text wrap="true" width-chars="58" use-markup="true">
pascal@264 521 <label>
paul@333 522 "Without parameters (i.e. with an empty Boot URL) gPXE will perform a normal PXE boot: IP configuration with DHCP and download the DHCP bootfile with TFTP.
pascal@264 523
paul@317 524 You can override the DHCP bootfile with a Boot URL such as <i>tftp://192.168.0.1/pxe/pxeloader</i>, <i>http://mirror.slitaz.org/pxe/pxelinux.0</i>, or <i>x-tftm://192.168.0.201//lts/vmlinuz.ltsp</i>.
pascal@264 525
paul@333 526 You can override IP configuration too (useful without a DHCP server), example: <i>ip=192.168.0.10/24 gw=192.168.0.1 dns=192.168.0.1 nodhcp url=http://mirror.slitaz.org/pxe/pxelinux.0</i>
pascal@264 527
paul@317 528 The <i>nodhcp</i> keyword avoids dhcp timeouts and the <i>url=</i> keyword is optional when the url is the only one argument.
pascal@337 529
paul@350 530 Comma separated URL lists are supported. The PXE client will try to load the first URL. If the load fails, it will try the next URL, and so on.
pascal@264 531 "
pascal@264 532 </label>
pascal@264 533 </text>
pascal@264 534 </frame>
pascal@264 535 </vbox>
pascal@264 536 </window>
pascal@264 537 '
pascal@264 538 #
pascal@405 539 # Create floppy image set
pascal@405 540 #
pascal@405 541 export IMAGE_SET='
pascal@405 542 <window title="Image set generator" icon-name="gtk-floppy">
pascal@405 543 <vbox>
pascal@405 544 <text use-markup="true">
pascal@405 545 <label>
pascal@405 546 "
pascal@405 547 <b>Create a boot floppy set.</b>
pascal@405 548 "
pascal@405 549 </label>
pascal@405 550 </text>
pascal@405 551 <text wrap="false" width-chars="44" use-markup="true">
pascal@405 552 <label>
pascal@405 553 "
pascal@405 554 The total size of the kernel and the initramfs must not
pascal@405 555 increase 14-15Mb due to the tiny boot loader design.
pascal@405 556 "
pascal@405 557 </label>
pascal@405 558 </text>
pascal@405 559 <frame>
pascal@405 560 <vbox>
pascal@405 561 <hbox>
pascal@405 562 <text use-markup="true">
pascal@405 563 <label>"<b>Kernel : </b>"</label>
pascal@405 564 </text>
pascal@405 565 <entry accept="filename">
pascal@405 566 <label>Select a linux kernel</label>
pascal@405 567 <variable>KERNEL</variable>
pascal@405 568 </entry>
pascal@405 569 <button>
pascal@405 570 <input file stock="gtk-open"></input>
pascal@405 571 <action type="fileselect">KERNEL</action>
pascal@405 572 </button>
pascal@405 573 </hbox>
pascal@405 574 <hbox>
pascal@405 575 <text use-markup="true">
pascal@405 576 <label>"<b>Initramfs : </b>"</label>
pascal@405 577 </text>
pascal@405 578 <entry accept="filename">
pascal@405 579 <label>Select an initramfs/initrd file</label>
pascal@405 580 <variable>INITRD</variable>
pascal@405 581 </entry>
pascal@405 582 <button>
pascal@405 583 <input file stock="gtk-open"></input>
pascal@405 584 <action type="fileselect">INITRD</action>
pascal@405 585 </button>
pascal@405 586 </hbox>
pascal@405 587 <hbox>
pascal@405 588 <text use-markup="true">
pascal@405 589 <label>"<b>Cmdline : </b>"</label>
pascal@405 590 </text>
pascal@405 591 <entry>
pascal@405 592 <label>Enter kernel arguments</label>
pascal@405 593 <variable>CMDLINE</variable>
pascal@405 594 <default>rw root=/dev/null autologin</default>
pascal@405 595 </entry>
pascal@405 596 </hbox>
pascal@405 597 <hbox>
pascal@405 598 <text use-markup="true">
pascal@405 599 <label>"<b>Output directory : </b>"</label>
pascal@405 600 </text>
pascal@405 601 <entry accept="directory">
pascal@405 602 <label>Select output directory</label>
pascal@405 603 <variable>OUTPUTDIR</variable>
pascal@405 604 <default>/tmp</default>
pascal@405 605 </entry>
pascal@405 606 <button>
pascal@405 607 <input file stock="gtk-open"></input>
pascal@405 608 <action type="fileselect">OUTPUTDIR</action>
pascal@405 609 </button>
pascal@405 610 </hbox>
pascal@405 611 </vbox>
pascal@405 612 </frame>
pascal@405 613 <hbox>
pascal@405 614 <button>
pascal@405 615 <input file icon="forward"></input>
pascal@405 616 <label>Create image set</label>
pascal@405 617 <action>cd $OUTPUTDIR; bootfloppybox call mkfloppies $KERNEL $INITRD $CMDLINE</action>
pascal@405 618 <action type="closewindow">IMAGE_SET</action>
pascal@405 619 </button>
pascal@405 620 <button>
pascal@405 621 <input file icon="gtk-close"></input>
pascal@405 622 <action type="closewindow">IMAGE_SET</action>
pascal@405 623 </button>
pascal@405 624 </hbox>
pascal@405 625 </vbox>
pascal@405 626 </window>
pascal@405 627 '
pascal@405 628 #
pascal@330 629 # Read/write floppy images
pascal@330 630 #
pascal@330 631 export FLOPPY_IMAGE='
pascal@330 632 <window title="Floppy image manager" icon-name="gtk-floppy">
pascal@330 633 <vbox>
pascal@330 634 <frame Floppy disk drive>
pascal@330 635 <hbox>
pascal@330 636 <text use-markup="true">
pascal@330 637 <label>"<b>Device : </b>"</label>
pascal@330 638 </text>
pascal@330 639 <combobox>
pascal@330 640 <variable>DEVICE</variable>'
pascal@330 641 for i in /sys/devices/platform/floppy.*/block:*; do
pascal@330 642 [ -d $i ] || continue
pascal@330 643 FLOPPY_IMAGE="$FLOPPY_IMAGE
pascal@330 644 <item>/dev/${i#*block:}</item>"
pascal@330 645 done
pascal@330 646 FLOPPY_IMAGE="$FLOPPY_IMAGE
pascal@330 647 </combobox>
pascal@330 648 <button>
pascal@330 649 <label>Format floppy</label>
pascal@330 650 <input file icon=\"media-floppy\"></input>
pascal@330 651 <action>fdformat -n $DEVICE</action>
pascal@330 652 </button>
pascal@330 653 </hbox>
pascal@330 654 </frame>
pascal@330 655 <frame Floppy image file>
pascal@330 656 <hbox>
pascal@330 657 <text use-markup=\"true\">
pascal@330 658 <label>\"<b>File : </b>\"</label>
pascal@330 659 </text>
pascal@330 660 <entry accept=\"filename\">
pascal@330 661 <label>Select a floppy image</label>
pascal@330 662 <variable>IMAGE</variable>
pascal@330 663 </entry>
pascal@330 664 <button>
pascal@330 665 <input file stock=\"gtk-open\"></input>
pascal@330 666 <action type=\"fileselect\">IMAGE</action>
pascal@330 667 </button>
pascal@330 668 </hbox>
pascal@330 669 </frame>
pascal@330 670 <hbox>
pascal@330 671 <button>
pascal@405 672 <input file icon=\"reload\"></input>
pascal@405 673 <label>Create image set</label>
pascal@405 674 <action type=\"launch\">IMAGE_SET</action>
pascal@405 675 </button>
pascal@405 676 <button>
pascal@330 677 <input file icon=\"go-jump\"></input>
pascal@330 678 <label>Write image to floppy</label>
pascal@330 679 <action>dd if=\$IMAGE of=\$DEVICE</action>
pascal@330 680 </button>
pascal@330 681 <button>
pascal@330 682 <input file icon=\"undo\"></input>
pascal@330 683 <label>Get floppy image</label>
pascal@330 684 <action>dd if=\$DEVICE of=\$IMAGE</action>
pascal@330 685 </button>
pascal@330 686 <button>
pascal@330 687 <input file icon=\"gtk-close\"></input>
pascal@330 688 <action type=\"closewindow\">FLOPPY_IMAGE</action>
pascal@330 689 </button>
pascal@330 690 </hbox>
pascal@330 691 </vbox>
pascal@330 692 </window>
pascal@330 693 "
pascal@330 694 #
pascal@130 695 # Write bootfloppy image to floppy device.
pascal@130 696 #
pascal@130 697 BOOT_DIALOG='
pascal@139 698 <window title="bootfloppybox" icon-name="gtk-floppy">
pascal@130 699 <vbox>
pascal@130 700
pascal@130 701 <text use-markup="true">
pascal@130 702 <label>
pascal@130 703 "
pascal@130 704 <b>SliTaz - Bootfloppybox</b>"
pascal@130 705 </label>
pascal@130 706 </text>
pascal@134 707 <text wrap="false" width-chars="44" use-markup="true">
pascal@130 708 <label>
pascal@130 709 "
paul@333 710 Create a floppy or a cdrom to boot a LiveCD in a PXE network or the WEB...
pascal@264 711 May need a floppy disk in drive. Erase the whole floppy disk.
pascal@130 712 "
pascal@130 713 </label>
pascal@130 714 </text>
pascal@130 715
pascal@130 716 <frame Floppy disk drive>
pascal@130 717 <hbox>
pascal@130 718 <text use-markup="true">
pascal@132 719 <label>"<b>Device : </b>"</label>
pascal@130 720 </text>
pascal@264 721 <combobox>
pascal@264 722 <variable>DEVICE</variable>'
pascal@264 723 for i in /sys/devices/platform/floppy.*/block:*; do
pascal@264 724 [ -d $i ] || continue
pascal@264 725 BOOT_DIALOG="$BOOT_DIALOG
pascal@264 726 <item>/dev/${i#*block:}</item>"
pascal@264 727 done
paul@333 728 tmp=' <item>floppy image (boot.fd)</item>
paul@333 729 <item>cdrom image (boot.iso)</item>
pascal@264 730 </combobox>
pascal@132 731 <button>
pascal@132 732 <label>Format floppy</label>
pascal@330 733 <input file icon="media-floppy"></input>
pascal@264 734 <action>case "$DEVICE" in /dev/*) fdformat -n $DEVICE;; esac</action>
pascal@132 735 </button>
pascal@130 736 </hbox>
pascal@130 737 </frame>
pascal@274 738 <notebook labels="LiveCD|USB|PXE Network|WEB Network|Memory Test|Windows|Expert">
pascal@130 739 '
pascal@264 740 BOOT_DIALOG="$BOOT_DIALOG$tmp"
pascal@130 741 while read name file pkg desc; do
pascal@130 742 tmp="<frame $name>
pascal@130 743 <hbox>
pascal@130 744 <text wrap=\"true\" width-chars=\"44\" use-markup=\"true\">
pascal@130 745 <label>
pascal@130 746 \"
pascal@130 747 $(echo -e $desc)
pascal@130 748 \"
pascal@130 749 </label>
pascal@130 750 </text>
pascal@130 751 </hbox>
pascal@264 752 <hbox>
pascal@130 753 "
pascal@130 754 if [ -f $file ]; then
pascal@274 755 if [ "$pkg" = "grub" -o "$pkg" = "grub4dos" ]; then
pascal@135 756 tmp="$tmp
pascal@135 757 <button>
pascal@200 758 <label>Grub menu</label>
pascal@200 759 <input file icon=\"accessories-text-editor\"></input>
pascal@274 760 <action>bootfloppybox call mkmenu $pkg</action>
pascal@214 761 <action type=\"lauch\">leafpad /tmp/floppybox.grub.menu</action>
pascal@200 762 </button>
pascal@135 763 "
pascal@267 764 elif [ "$pkg" = "etherboot" ]; then
pascal@267 765 tmp="$tmp
pascal@267 766 <button>
pascal@267 767 <input file icon=\"browser\"></input>
pascal@267 768 <label>Wiki</label>
pascal@267 769 <action>firefox http://wiki.slitaz.org/doku.php?id=quickstart:pxe &</action>
pascal@267 770 </button>
pascal@267 771 "
pascal@233 772 elif [ "$pkg" = "gpxe" ]; then
pascal@233 773 tmp="$tmp
pascal@233 774 <text wrap=\"true\" use-markup=\"true\">
pascal@233 775 <label> \"<b>Boot URL:</b>\" </label>
pascal@233 776 </text>
pascal@233 777 <entry>
pascal@233 778 <default>$(dd if=$file bs=1 skip=519 count=255 2>/dev/null | strings)</default>
pascal@233 779 <variable>URL</variable>
pascal@233 780 </entry>
pascal@264 781 </hbox>
pascal@264 782 <hbox>
pascal@267 783 <button>
pascal@267 784 <input file icon=\"browser\"></input>
pascal@267 785 <label>Wiki</label>
pascal@267 786 <action>firefox http://wiki.slitaz.org/doku.php?id=quickstart:pxe &</action>
pascal@267 787 </button>
pascal@264 788 <button help>
pascal@264 789 <action type=\"launch\">HELP</action>
pascal@264 790 </button>
pascal@233 791 <button>
pascal@233 792 <label>Update</label>
pascal@233 793 <input file icon=\"reload\"></input>
pascal@233 794 <action>echo -n \"\$URL\" | cat - /dev/zero | dd conv=notrunc bs=1 count=255 seek=519 of=$file 2>/dev/null</action>
pascal@233 795 </button>
pascal@264 796 "
pascal@264 797 fi
pascal@267 798 receipt=/var/lib/tazpkg/installed/$pkg/receipt
pascal@267 799 if [ -f $receipt ]; then
pascal@267 800 . $receipt
pascal@267 801 tmp="$tmp
pascal@267 802 <button>
pascal@267 803 <input file icon=\"browser\"></input>
pascal@267 804 <label>Web</label>
pascal@267 805 <action>firefox $WEB_SITE &</action>
pascal@267 806 </button>
pascal@267 807 "
pascal@267 808 fi
pascal@264 809 tmp="$tmp
pascal@233 810 <button>
pascal@233 811 <label>Write floppy</label>
pascal@233 812 <input file icon=\"forward\"></input>
pascal@264 813 <action>bootfloppybox call install \"$pkg\" \"\$DEVICE\" \"$file\"</action>
pascal@233 814 </button>
pascal@233 815 </hbox>
pascal@233 816 </frame>
pascal@233 817 "
pascal@130 818 else
pascal@264 819 tmp2="tazpkg get-install $pkg --forced"
pascal@220 820 [ "$pkg" = "plop" ] && tmp2="bootfloppybox call get-plop $file"
pascal@130 821 tmp="$tmp
pascal@157 822 <text wrap=\"true\" width-chars=\"34\" use-markup=\"true\">
pascal@130 823 <label>
pascal@130 824 \"<i>The package <b>$pkg</b> is not yet installed</i>\"
pascal@130 825 </label>
pascal@130 826 </text>
pascal@157 827 <button>
pascal@157 828 <input file icon=\"go-jump\"></input>
pascal@157 829 <label>Install</label>
pascal@264 830 <action>[ -f /var/lib/tazpkg/packages.list ] || tazpkg recharge</action>
pascal@264 831 <action>xterm -fa MiscFixed -fs 11 -bg gray93 -fg black -geometry 80x17 -title \"$pkg install\" -e \"$tmp2 ; sleep 2\"</action>
pascal@221 832 <action type=\"exit\">restart</action>
pascal@157 833 </button>
pascal@130 834 </hbox>
pascal@130 835 </frame>
pascal@130 836 "
pascal@130 837 fi
pascal@130 838 BOOT_DIALOG="$BOOT_DIALOG$tmp"
pascal@130 839 done <<EOT
pascal@130 840 SmartBtmgr /usr/share/boot/btmgr btmgr This OS independent Smart Boot Manager can boot any partition or ATAPI CD-ROM.
pascal@382 841 Plop /usr/share/boot/plpbt.bin plop This non free Boot Manager can boot a floppy disk, hardisk, USB or CD/DVD. Hit Ctrl-ESC for text mode.
pascal@130 842 Etherboot /usr/share/boot/etherboot etherboot This network bootloader provides a replacement for proprietary PXE or NBI ROMs.
pascal@233 843 gPXE /boot/gpxe gpxe PXE / iSCSI / AoE network bootloader.
pascal@130 844 Memtest86+ /usr/share/boot/memtest.lzma memtest Memory failures detection tool.
paul@333 845 Grub4DOS /usr/share/boot/grldr.lzma grub4dos Enhanced grub version supporting NTFS.
paul@333 846 Grub /usr/sbin/grub grub General purpose boot loader with command shell.
pascal@130 847 EOT
pascal@130 848 tmp='
pascal@134 849 </notebook>
pascal@130 850 <hbox>
pascal@130 851 <button>
pascal@330 852 <input file icon="media-cdrom"></input>
pascal@330 853 <label>Burn cdrom image</label>
pascal@330 854 <action>burnbox</action>
pascal@330 855 </button>
pascal@330 856 <button>
pascal@330 857 <input file icon="media-floppy"></input>
pascal@330 858 <label>Manage floppy image</label>
pascal@330 859 <action type="launch">FLOPPY_IMAGE</action>
pascal@330 860 </button>
pascal@330 861 <button>
pascal@130 862 <input file icon="exit"></input>
pascal@130 863 <label>Exit</label>
pascal@130 864 <action type="exit">Exit</action>
pascal@130 865 </button>
pascal@130 866 </hbox>
pascal@130 867
pascal@130 868 </vbox>
pascal@130 869 </window>
pascal@130 870 '
pascal@130 871 BOOT_DIALOG="$BOOT_DIALOG$tmp"
pascal@130 872 export BOOT_DIALOG
pascal@130 873
pascal@130 874 # Only root can create floppy.
pascal@130 875 check_root
pascal@221 876 gtkdialog --program=BOOT_DIALOG | grep -q 'EXIT="restart"' && continue
pascal@214 877 rm -f /tmp/floppybox.grub.menu
pascal@130 878 exit 0
pascal@221 879 done