slitaz-tools annotate tinyutils/bootfloppybox @ rev 251

Tidy up *boxes
author Paul Issott <paul@slitaz.org>
date Sat Jul 19 00:02:08 2008 +0000 (2008-07-19)
parents 3dcbb752f68b
children b6ce1001af64
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@220 5 VERSION=20080625
pascal@220 6 PLOP_URL=http://download.plop.at/plop/bootmngr/plpbt50rc12flp.zip
pascal@130 7
pascal@130 8 # Check if user is root.
pascal@130 9 check_root()
pascal@130 10 {
pascal@130 11 if test $(id -u) != 0 ; then
pascal@130 12 echo -e "
pascal@130 13 You must be root to run `basename $0`. Please type 'su' and
pascal@130 14 root password to become super-user.\n"
pascal@130 15 exit 0
pascal@130 16 fi
pascal@130 17 }
pascal@130 18
pascal@213 19 # This function is used after each screen to contine or abort install.
pascal@213 20 check_retval()
pascal@213 21 {
pascal@213 22 case $retval in
pascal@213 23 1)
pascal@214 24 rm -f /tmp/floppybox.grub.menu
pascal@213 25 echo -e "\nVoluntary exit.\n" && exit 0 ;;
pascal@213 26 255)
pascal@214 27 rm -f /tmp/floppybox.grub.menu
pascal@213 28 echo -e "ESC pressed.\n" && exit 0 ;;
pascal@213 29 esac
pascal@213 30 }
pascal@213 31
pascal@213 32 select_floppy()
pascal@213 33 {
pascal@213 34 exec 3>&1
pascal@213 35 DEVICE=`$DIALOG --title " Floppy device " \
pascal@213 36 --backtitle "Boot Floppy Creation" --clear \
pascal@213 37 --extra-button --extra-label "Format" \
pascal@213 38 --colors --inputbox "
pascal@213 39 Enter floppy device (default /dev/fd0)
pascal@213 40 " 18 70 2>&1 1>&3`
pascal@213 41 retval=$?
pascal@213 42 exec 3>&-
pascal@213 43 check_retval
pascal@213 44 case "$DEVICE" in
pascal@213 45 /dev/fd*);;
pascal@213 46 *) DEVICE=/dev/fd0;;
pascal@213 47 esac
pascal@213 48 if [ "$retval" = "3" ]; then
pascal@213 49 fdformat -n $DEVICE
pascal@213 50 fi
pascal@213 51 }
pascal@213 52
pascal@221 53 while true; do
pascal@221 54
pascal@213 55 if [ "$1" == "call" ]; then
pascal@213 56 case "$2" in
pascal@213 57 setup-grub)
pascal@213 58 DEVICE=$3
pascal@213 59 mke2fs $DEVICE
pascal@213 60 mkdir /media/floppy
pascal@213 61 mount $DEVICE /media/floppy
pascal@213 62 mkdir -p /media/floppy/boot/grub
pascal@213 63 cp /usr/lib/grub/i386-pc/stage? /media/floppy/boot/grub
pascal@214 64 cp /tmp/floppybox.grub.menu /media/floppy/boot/grub/menu.lst
pascal@214 65 [ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ]\
pascal@221 66 && cat /usr/share/boot/btmgr /dev/zero | \
pascal@221 67 dd bs=18k count=80 | gzip -9 > \
pascal@221 68 /media/floppy/boot/btmgr.gz \
pascal@214 69 && unlzma -c /usr/share/boot/memdisk.lzma > \
pascal@214 70 /media/floppy/boot/memdisk
pascal@220 71 [ -f /usr/share/boot/plop.gz -a \
pascal@220 72 -f /usr/share/boot/memdisk.lzma ]\
pascal@221 73 && zcat /usr/share/boot/plop.gz | cat - /dev/zero | \
pascal@221 74 dd bs=18k count=80 | gzip -9 > \
pascal@221 75 /media/floppy/boot/plop.gz \
pascal@220 76 && unlzma -c /usr/share/boot/memdisk.lzma > \
pascal@220 77 /media/floppy/boot/memdisk
pascal@214 78 [ -f /usr/share/boot/etherboot ]\
pascal@214 79 && cp /usr/share/boot/etherboot /media/floppy/boot
pascal@222 80 [ -f /boot/gpxe ]\
pascal@222 81 && cp /boot/gpxe /media/floppy/boot
pascal@214 82 [ -f /usr/share/boot/memtest.lzma ]\
pascal@214 83 && unlzma -c /usr/share/boot/memtest.lzma > \
pascal@214 84 /media/floppy/boot/memtest
pascal@214 85 [ -f /usr/share/boot/grub.exe.lzma ]\
pascal@214 86 && unlzma -c /usr/share/boot/grub.exe.lzma > \
pascal@214 87 /media/floppy/boot/grub.exe
pascal@214 88 grub-set-default --root-directory=/media/floppy 0
pascal@214 89 umount $DEVICE
pascal@214 90 grub --batch <<EOT
pascal@214 91 root (${DEVICE#/dev/})
pascal@214 92 setup (${DEVICE#/dev/})
pascal@214 93 quit
pascal@214 94 EOT
pascal@214 95 ;;
pascal@220 96 get-plop)
pascal@220 97 wget -O - $PLOP_URL | unzip -p /dev/stdin | \
pascal@220 98 dd bs=18k count=6 | gzip -9 > $3
pascal@220 99 [ -s $3 ] || exit 1
pascal@220 100 mkdir /tmp/get-plop$$
pascal@220 101 cd /tmp/get-plop$$
pascal@220 102 echo $3 > files.list
pascal@220 103 cpio -o -H newc < files.list | gzip -9 > fs.cpio.gz
pascal@220 104 cat > receipt <<EOT
pascal@220 105 PACKAGE="plop"
pascal@220 106 VERSION="1.0"
pascal@220 107 CATEGORY="non-free"
pascal@220 108 SHORT_DESC="Plop boot manager."
pascal@220 109 WEB_SITE="http://www.plop.at/en/bootmanager.html"
pascal@220 110 EOT
pascal@220 111 cpio -o -H newc > plop-1.0.tazpkg <<EOT
pascal@220 112 receipt
pascal@220 113 files.list
pascal@220 114 fs.cpio.gz
pascal@220 115 EOT
pascal@220 116 tazpkg install plop-1.0.tazpkg
pascal@220 117 cd ..
pascal@220 118 rm -rf /tmp/get-plop$$
pascal@220 119 ;;
pascal@214 120 *) echo "Invalid command $0 $@" 1>&2
pascal@214 121 exit 1;;
pascal@214 122 esac
pascal@214 123 exit 0
pascal@214 124 fi
pascal@214 125
pascal@214 126 cat > /tmp/floppybox.grub.menu <<EOT
pascal@213 127 default saved
pascal@213 128 timeout 10
pascal@213 129
pascal@213 130 title Windows (example on /dev/hda1)
pascal@213 131 rootnoverify (hd0,0)
pascal@213 132 chainloader +1
pascal@213 133 save default
pascal@213 134
pascal@213 135 title Slitaz Live (example on /dev/hda1)
pascal@213 136 root (hd0,0)
pascal@213 137 kernel /boot/bzImage rw root=/dev/null vga=normal
pascal@213 138 initrd /boot/rootfs.gz
pascal@213 139 save default
pascal@213 140
pascal@213 141 title Slitaz Installed (example on /dev/hda2)
pascal@213 142 root (hd0,1)
pascal@213 143 kernel /boot/bzImage ro root=/dev/hda2 vga=normal
pascal@213 144 save default
pascal@213 145
pascal@213 146 EOT
pascal@214 147 [ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ]\
pascal@214 148 && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@220 149 title Smart Boot Manager (boot floppy, hard disk or CD/DVD)
pascal@221 150 kernel /boot/memdisk floppy c=80 h=2 s=18
pascal@221 151 initrd /boot/btmgr.gz
pascal@213 152
pascal@213 153 EOT
pascal@220 154 [ -f /usr/share/boot/plop.gz -a -f /usr/share/boot/memdisk.lzma ]\
pascal@220 155 && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@220 156 title Plop Boot Manager (boot floppy, hard disk, CD/DVD or USB)
pascal@221 157 kernel /boot/memdisk floppy c=80 h=2 s=18
pascal@221 158 initrd /boot/plop.gz
pascal@220 159
pascal@220 160 EOT
pascal@214 161 [ -f /usr/share/boot/etherboot ] && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@222 162 title Etherboot (LAN boot, PXE or NBI)
pascal@213 163 kernel /boot/etherboot
pascal@213 164
pascal@213 165 EOT
pascal@222 166 [ -f /boot/gpxe ] && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@223 167 title gPXE (default boot form http://boot.slitaz.org/, PXE/iSCSI/AoE support)
pascal@222 168 kernel /boot/gpxe
pascal@222 169
pascal@222 170 EOT
pascal@214 171 [ -f /usr/share/boot/memtest.lzma ] && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@213 172 title Memtest86+
pascal@213 173 kernel /boot/memtest
pascal@213 174
pascal@213 175 EOT
pascal@214 176 [ -f /usr/share/boot/grub.exe.lzma ] && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@213 177 title Grub4Dos
pascal@213 178 kernel /boot/grub/grub.exe --config-file="configfile (fd0)/boot/grub/menu4dos.lst"
pascal@213 179
pascal@213 180 EOT
pascal@213 181
pascal@213 182 if [ -z "$XAUTHORITY" ]; then
pascal@213 183
pascal@213 184 : ${DIALOG=dialog}
pascal@213 185
pascal@213 186 DEVICE=/dev/fd0
pascal@213 187 while true; do
pascal@213 188 exec 3>&1
pascal@213 189 ID_SOURCE=`$DIALOG --title " Choose a boot floppy " \
pascal@213 190 --backtitle "Boot Floppy Creation on $DEVICE" --clear \
pascal@213 191 --extra-button --extra-label "Change floppy" \
pascal@213 192 --yes-label "Install" \
pascal@213 193 --no-label "Quit" \
pascal@213 194 --colors --radiolist "
pascal@213 195 Create a floppy to boot a LiveCD, in a PXE network...
paul@251 196 Needs a floppy disk in drive. Erase the whole floppy disk.
pascal@213 197 " 18 70 50\
pascal@220 198 SmartBtmgr "Boot any partition or ATAPI CD-ROM." on \
pascal@220 199 Plop "Boot harddisk floppy CD/DVD or USB." off \
pascal@220 200 Etherboot "Replacement for proprietary PXE ROMs." off \
pascal@223 201 gPXE "Boot from http://boot.slitaz.org/" off \
pascal@220 202 Memtest86+ "Memory failures detection tool." off \
pascal@220 203 Grub "Boot loader with command shell." off 2>&1 1>&3`
pascal@213 204 retval=$?
pascal@213 205 exec 3>&-
pascal@213 206 check_retval
pascal@213 207 if [ "$retval" = "3" ]; then
pascal@213 208 select_floppy
pascal@213 209 continue;
pascal@213 210 fi
pascal@213 211 while read key file pkg; do
pascal@213 212 [ "$key" = "$ID_SOURCE" ] || continue
pascal@213 213 if [ ! -f "$file" ]; then
pascal@213 214 $DIALOG --title " Install package " --colors \
pascal@213 215 --backtitle "Boot Floppy Creation" --clear \
pascal@213 216 --yes-label "Install" \
pascal@213 217 --no-label "Quit" \
pascal@213 218 --yesno "The package $pkg is not yet installed. Install it ?" 18 70
pascal@213 219 retval=$?
pascal@220 220 if [ "$pkg" = "plop" ]; then
pascal@220 221 bootfloppybox call get-plop $file
pascal@220 222 else
pascal@244 223 tazpkg get-install $pkg --forced
pascal@220 224 fi
pascal@213 225 fi
pascal@213 226 if [ "$pkg" = "grub" ]; then
pascal@213 227 bootfloppybox call setup-grub $DEVICE
pascal@213 228 else
pascal@213 229 case "$file" in
pascal@213 230 *.lzma) action="unlzma -c";;
pascal@213 231 *.gz) action="zcat";;
pascal@213 232 *) action="cat";;
pascal@213 233 esac
pascal@213 234 $action $file > $DEVICE
pascal@213 235 fi
pascal@213 236 exit 0
pascal@213 237 done <<EOT
pascal@213 238 SmartBtmgr /usr/share/boot/btmgr btmgr
pascal@220 239 Plop /usr/share/boot/plop.gz plop
pascal@213 240 Etherboot /usr/share/boot/etherboot etherboot
pascal@222 241 gPXE /boot/gpxe gpxe
pascal@213 242 Memtest86+ /usr/share/boot/memtest.lzma memtest
pascal@213 243 Grub /usr/sbin/grub grub
pascal@213 244 EOT
pascal@213 245 done
pascal@213 246 fi
pascal@130 247 # Write bootfloppy image to floppy device.
pascal@130 248 #
pascal@130 249 BOOT_DIALOG='
pascal@139 250 <window title="bootfloppybox" icon-name="gtk-floppy">
pascal@130 251 <vbox>
pascal@130 252
pascal@130 253 <text use-markup="true">
pascal@130 254 <label>
pascal@130 255 "
pascal@130 256 <b>SliTaz - Bootfloppybox</b>"
pascal@130 257 </label>
pascal@130 258 </text>
pascal@134 259 <text wrap="false" width-chars="44" use-markup="true">
pascal@130 260 <label>
pascal@130 261 "
pascal@222 262 Create a floppy to boot a LiveCD, in a PXE network or WEB...
pascal@130 263 Need a floppy disk in drive. Erase the whole floppy disk.
pascal@130 264 "
pascal@130 265 </label>
pascal@130 266 </text>
pascal@130 267
pascal@130 268 <frame Floppy disk drive>
pascal@130 269 <hbox>
pascal@130 270 <text use-markup="true">
pascal@132 271 <label>"<b>Device : </b>"</label>
pascal@130 272 </text>
pascal@130 273 <entry>
pascal@130 274 <default>/dev/fd0</default>
pascal@130 275 <variable>DEVICE</variable>
pascal@130 276 </entry>
pascal@132 277 <button>
pascal@132 278 <label>Format floppy</label>
pascal@132 279 <input file icon="forward"></input>
pascal@132 280 <action>fdformat -n $DEVICE</action>
pascal@132 281 </button>
pascal@130 282 </hbox>
pascal@130 283 </frame>
pascal@222 284 <notebook labels="LiveCD|USB|PXE Network|WEB Network|Memory Test|Expert">
pascal@130 285 '
pascal@130 286 while read name file pkg desc; do
pascal@130 287 tmp="<frame $name>
pascal@130 288 <hbox>
pascal@130 289 <text wrap=\"true\" width-chars=\"44\" use-markup=\"true\">
pascal@130 290 <label>
pascal@130 291 \"
pascal@130 292 $(echo -e $desc)
pascal@130 293 \"
pascal@130 294 </label>
pascal@130 295 </text>
pascal@130 296 </hbox>
pascal@130 297 "
pascal@130 298 if [ -f $file ]; then
pascal@130 299 case "$file" in
pascal@131 300 *.lzma) action="unlzma -c";;
pascal@130 301 *.gz) action="zcat";;
pascal@130 302 *) action="cat";;
pascal@130 303 esac
pascal@135 304 if [ "$pkg" = "grub" ]; then
pascal@135 305 tmp="$tmp
pascal@135 306 <hbox>
pascal@135 307 <button>
pascal@200 308 <label>Grub menu</label>
pascal@200 309 <input file icon=\"accessories-text-editor\"></input>
pascal@214 310 <action type=\"lauch\">leafpad /tmp/floppybox.grub.menu</action>
pascal@200 311 </button>
pascal@200 312 <button>
pascal@135 313 <label>Write floppy</label>
pascal@135 314 <input file icon=\"forward\"></input>
pascal@213 315 <action>bootfloppybox call setup-grub \$DEVICE</action>
pascal@135 316 </button>
pascal@135 317 </hbox>
pascal@135 318 </frame>
pascal@135 319 "
pascal@233 320 elif [ "$pkg" = "gpxe" ]; then
pascal@233 321 tmp="$tmp
pascal@233 322 <hbox>
pascal@233 323 <text wrap=\"true\" use-markup=\"true\">
pascal@233 324 <label> \"<b>Boot URL:</b>\" </label>
pascal@233 325 </text>
pascal@233 326 <entry>
pascal@233 327 <default>$(dd if=$file bs=1 skip=519 count=255 2>/dev/null | strings)</default>
pascal@233 328 <variable>URL</variable>
pascal@233 329 </entry>
pascal@233 330 <button>
pascal@233 331 <label>Update</label>
pascal@233 332 <input file icon=\"reload\"></input>
pascal@233 333 <action>echo -n \"\$URL\" | cat - /dev/zero | dd conv=notrunc bs=1 count=255 seek=519 of=$file 2>/dev/null</action>
pascal@233 334 </button>
pascal@233 335 </hbox>
pascal@233 336 <hbox>
pascal@233 337 <button>
pascal@233 338 <label>Write floppy</label>
pascal@233 339 <input file icon=\"forward\"></input>
pascal@233 340 <action>$action $file > \$DEVICE</action>
pascal@233 341 </button>
pascal@233 342 </hbox>
pascal@233 343 </frame>
pascal@233 344 "
pascal@135 345 else
pascal@135 346 tmp="$tmp
pascal@130 347 <hbox>
pascal@130 348 <button>
pascal@130 349 <label>Write floppy</label>
pascal@130 350 <input file icon=\"forward\"></input>
pascal@130 351 <action>$action $file > \$DEVICE</action>
pascal@130 352 </button>
pascal@130 353 </hbox>
pascal@130 354 </frame>
pascal@130 355 "
pascal@135 356 fi
pascal@130 357 else
pascal@220 358 tmp2="[ -f /var/lib/tazpkg/packages.list ] || tazpkg recharge</action>
pascal@242 359 <action>xterm -fa MiscFixed -fs 11 -bg gray93 -fg black -geometry 80x17 -title \"$pkg install\" -e \"tazpkg get-install $pkg --forced; echo -e \\\"----\\n\\nENTER to continue...\\\" && read close\""
pascal@220 360 [ "$pkg" = "plop" ] && tmp2="bootfloppybox call get-plop $file"
pascal@130 361 tmp="$tmp
pascal@130 362 <hbox>
pascal@157 363 <text wrap=\"true\" width-chars=\"34\" use-markup=\"true\">
pascal@130 364 <label>
pascal@130 365 \"<i>The package <b>$pkg</b> is not yet installed</i>\"
pascal@130 366 </label>
pascal@130 367 </text>
pascal@157 368 <button>
pascal@157 369 <input file icon=\"go-jump\"></input>
pascal@157 370 <label>Install</label>
pascal@220 371 <action>$tmp2</action>
pascal@221 372 <action type=\"exit\">restart</action>
pascal@157 373 </button>
pascal@130 374 </hbox>
pascal@130 375 </frame>
pascal@130 376 "
pascal@130 377 fi
pascal@130 378 BOOT_DIALOG="$BOOT_DIALOG$tmp"
pascal@130 379 done <<EOT
pascal@130 380 SmartBtmgr /usr/share/boot/btmgr btmgr This OS independent Smart Boot Manager can boot any partition or ATAPI CD-ROM.
pascal@222 381 Plop /usr/share/boot/plop.gz plop This non free Boot Manager can boot floppy, hardisk, USB or CD/DVD. Hit Ctrl-ESC for text mode.
pascal@130 382 Etherboot /usr/share/boot/etherboot etherboot This network bootloader provides a replacement for proprietary PXE or NBI ROMs.
pascal@233 383 gPXE /boot/gpxe gpxe PXE / iSCSI / AoE network bootloader.
pascal@130 384 Memtest86+ /usr/share/boot/memtest.lzma memtest Memory failures detection tool.
pascal@135 385 Grub /usr/sbin/grub grub General purpose boot loader with command shell
pascal@130 386 EOT
pascal@130 387 tmp='
pascal@134 388 </notebook>
pascal@130 389 <hbox>
pascal@130 390 <button>
pascal@130 391 <input file icon="exit"></input>
pascal@130 392 <label>Exit</label>
pascal@130 393 <action type="exit">Exit</action>
pascal@130 394 </button>
pascal@130 395 </hbox>
pascal@130 396
pascal@130 397 </vbox>
pascal@130 398 </window>
pascal@130 399 '
pascal@130 400 BOOT_DIALOG="$BOOT_DIALOG$tmp"
pascal@130 401 export BOOT_DIALOG
pascal@130 402
pascal@130 403 # Only root can create floppy.
pascal@130 404 check_root
pascal@221 405 gtkdialog --program=BOOT_DIALOG | grep -q 'EXIT="restart"' && continue
pascal@214 406 rm -f /tmp/floppybox.grub.menu
pascal@130 407 exit 0
pascal@221 408 done