slitaz-tools annotate tinyutils/bootfloppybox @ rev 214

bootfloppybox: edit menu.lst before writing floppy
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Jun 18 21:25:51 2008 +0000 (2008-06-18)
parents 696369f3891f
children 3de8bd028ff4
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@214 5 VERSION=20080618
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@213 33 exec 3>&1
pascal@213 34 DEVICE=`$DIALOG --title " Floppy device " \
pascal@213 35 --backtitle "Boot Floppy Creation" --clear \
pascal@213 36 --extra-button --extra-label "Format" \
pascal@213 37 --colors --inputbox "
pascal@213 38 Enter floppy device (default /dev/fd0)
pascal@213 39 " 18 70 2>&1 1>&3`
pascal@213 40 retval=$?
pascal@213 41 exec 3>&-
pascal@213 42 check_retval
pascal@213 43 case "$DEVICE" in
pascal@213 44 /dev/fd*);;
pascal@213 45 *) DEVICE=/dev/fd0;;
pascal@213 46 esac
pascal@213 47 if [ "$retval" = "3" ]; then
pascal@213 48 fdformat -n $DEVICE
pascal@213 49 fi
pascal@213 50 }
pascal@213 51
pascal@213 52 if [ "$1" == "call" ]; then
pascal@213 53 case "$2" in
pascal@213 54 setup-grub)
pascal@213 55 DEVICE=$3
pascal@213 56 mke2fs $DEVICE
pascal@213 57 mkdir /media/floppy
pascal@213 58 mount $DEVICE /media/floppy
pascal@213 59 mkdir -p /media/floppy/boot/grub
pascal@213 60 cp /usr/lib/grub/i386-pc/stage? /media/floppy/boot/grub
pascal@214 61 cp /tmp/floppybox.grub.menu /media/floppy/boot/grub/menu.lst
pascal@214 62 [ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ]\
pascal@214 63 && cp /usr/share/boot/btmgr /media/floppy/boot \
pascal@214 64 && unlzma -c /usr/share/boot/memdisk.lzma > \
pascal@214 65 /media/floppy/boot/memdisk
pascal@214 66 [ -f /usr/share/boot/etherboot ]\
pascal@214 67 && cp /usr/share/boot/etherboot /media/floppy/boot
pascal@214 68 [ -f /usr/share/boot/memtest.lzma ]\
pascal@214 69 && unlzma -c /usr/share/boot/memtest.lzma > \
pascal@214 70 /media/floppy/boot/memtest
pascal@214 71 [ -f /usr/share/boot/grub.exe.lzma ]\
pascal@214 72 && unlzma -c /usr/share/boot/grub.exe.lzma > \
pascal@214 73 /media/floppy/boot/grub.exe
pascal@214 74 grub-set-default --root-directory=/media/floppy 0
pascal@214 75 umount $DEVICE
pascal@214 76 grub --batch <<EOT
pascal@214 77 root (${DEVICE#/dev/})
pascal@214 78 setup (${DEVICE#/dev/})
pascal@214 79 quit
pascal@214 80 EOT
pascal@214 81 ;;
pascal@214 82 *) echo "Invalid command $0 $@" 1>&2
pascal@214 83 exit 1;;
pascal@214 84 esac
pascal@214 85 exit 0
pascal@214 86 fi
pascal@214 87
pascal@214 88 cat > /tmp/floppybox.grub.menu <<EOT
pascal@213 89 default saved
pascal@213 90 timeout 10
pascal@213 91
pascal@213 92 title Windows (example on /dev/hda1)
pascal@213 93 rootnoverify (hd0,0)
pascal@213 94 chainloader +1
pascal@213 95 save default
pascal@213 96
pascal@213 97 title Slitaz Live (example on /dev/hda1)
pascal@213 98 root (hd0,0)
pascal@213 99 kernel /boot/bzImage rw root=/dev/null vga=normal
pascal@213 100 initrd /boot/rootfs.gz
pascal@213 101 save default
pascal@213 102
pascal@213 103 title Slitaz Installed (example on /dev/hda2)
pascal@213 104 root (hd0,1)
pascal@213 105 kernel /boot/bzImage ro root=/dev/hda2 vga=normal
pascal@213 106 save default
pascal@213 107
pascal@213 108 EOT
pascal@214 109 [ -f /usr/share/boot/btmgr -a -f /usr/share/boot/memdisk.lzma ]\
pascal@214 110 && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@213 111 title Smart Boot Manager
pascal@213 112 kernel /boot/memtest
pascal@213 113 initrd /boot/btmgr
pascal@213 114
pascal@213 115 EOT
pascal@214 116 [ -f /usr/share/boot/etherboot ] && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@213 117 title Etherboot
pascal@213 118 kernel /boot/etherboot
pascal@213 119
pascal@213 120 EOT
pascal@214 121 [ -f /usr/share/boot/memtest.lzma ] && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@213 122 title Memtest86+
pascal@213 123 kernel /boot/memtest
pascal@213 124
pascal@213 125 EOT
pascal@214 126 [ -f /usr/share/boot/grub.exe.lzma ] && cat >> /tmp/floppybox.grub.menu <<EOT
pascal@213 127 title Grub4Dos
pascal@213 128 kernel /boot/grub/grub.exe --config-file="configfile (fd0)/boot/grub/menu4dos.lst"
pascal@213 129
pascal@213 130 EOT
pascal@213 131
pascal@213 132 if [ -z "$XAUTHORITY" ]; then
pascal@213 133
pascal@213 134 : ${DIALOG=dialog}
pascal@213 135
pascal@213 136 DEVICE=/dev/fd0
pascal@213 137 while true; do
pascal@213 138 exec 3>&1
pascal@213 139 ID_SOURCE=`$DIALOG --title " Choose a boot floppy " \
pascal@213 140 --backtitle "Boot Floppy Creation on $DEVICE" --clear \
pascal@213 141 --extra-button --extra-label "Change floppy" \
pascal@213 142 --yes-label "Install" \
pascal@213 143 --no-label "Quit" \
pascal@213 144 --colors --radiolist "
pascal@213 145 Create a floppy to boot a LiveCD, in a PXE network...
pascal@213 146 Need a floppy disk in drive. Erase the whole floppy disk.
pascal@213 147 " 18 70 50\
pascal@213 148 SmartBtmgr " Boot any partition or ATAPI CD-ROM." on \
pascal@213 149 Etherboot " Replacement for proprietary PXE ROMs." off \
pascal@213 150 Memtest86+ " Memory failures detection tool." off \
pascal@213 151 Grub " Boot loader with command shell." off 2>&1 1>&3`
pascal@213 152 retval=$?
pascal@213 153 exec 3>&-
pascal@213 154 check_retval
pascal@213 155 if [ "$retval" = "3" ]; then
pascal@213 156 select_floppy
pascal@213 157 continue;
pascal@213 158 fi
pascal@213 159 while read key file pkg; do
pascal@213 160 [ "$key" = "$ID_SOURCE" ] || continue
pascal@213 161 if [ ! -f "$file" ]; then
pascal@213 162 $DIALOG --title " Install package " --colors \
pascal@213 163 --backtitle "Boot Floppy Creation" --clear \
pascal@213 164 --yes-label "Install" \
pascal@213 165 --no-label "Quit" \
pascal@213 166 --yesno "The package $pkg is not yet installed. Install it ?" 18 70
pascal@213 167 retval=$?
pascal@213 168 tazpkg get-install $pkg
pascal@213 169 fi
pascal@213 170 if [ "$pkg" = "grub" ]; then
pascal@213 171 bootfloppybox call setup-grub $DEVICE
pascal@213 172 else
pascal@213 173 case "$file" in
pascal@213 174 *.lzma) action="unlzma -c";;
pascal@213 175 *.gz) action="zcat";;
pascal@213 176 *) action="cat";;
pascal@213 177 esac
pascal@213 178 $action $file > $DEVICE
pascal@213 179 fi
pascal@213 180 exit 0
pascal@213 181 done <<EOT
pascal@213 182 SmartBtmgr /usr/share/boot/btmgr btmgr
pascal@213 183 Etherboot /usr/share/boot/etherboot etherboot
pascal@213 184 Memtest86+ /usr/share/boot/memtest.lzma memtest
pascal@213 185 Grub /usr/sbin/grub grub
pascal@213 186 EOT
pascal@213 187 done
pascal@213 188 fi
pascal@130 189 # Write bootfloppy image to floppy device.
pascal@130 190 #
pascal@130 191 BOOT_DIALOG='
pascal@139 192 <window title="bootfloppybox" icon-name="gtk-floppy">
pascal@130 193 <vbox>
pascal@130 194
pascal@130 195 <text use-markup="true">
pascal@130 196 <label>
pascal@130 197 "
pascal@130 198 <b>SliTaz - Bootfloppybox</b>"
pascal@130 199 </label>
pascal@130 200 </text>
pascal@134 201 <text wrap="false" width-chars="44" use-markup="true">
pascal@130 202 <label>
pascal@130 203 "
pascal@135 204 Create a floppy to boot a LiveCD, in a PXE network...
pascal@130 205 Need a floppy disk in drive. Erase the whole floppy disk.
pascal@130 206 "
pascal@130 207 </label>
pascal@130 208 </text>
pascal@130 209
pascal@130 210 <frame Floppy disk drive>
pascal@130 211 <hbox>
pascal@130 212 <text use-markup="true">
pascal@132 213 <label>"<b>Device : </b>"</label>
pascal@130 214 </text>
pascal@130 215 <entry>
pascal@130 216 <default>/dev/fd0</default>
pascal@130 217 <variable>DEVICE</variable>
pascal@130 218 </entry>
pascal@132 219 <button>
pascal@132 220 <label>Format floppy</label>
pascal@132 221 <input file icon="forward"></input>
pascal@132 222 <action>fdformat -n $DEVICE</action>
pascal@132 223 </button>
pascal@130 224 </hbox>
pascal@130 225 </frame>
pascal@135 226 <notebook labels="LiveCD|PXE Network|Memory Test|Expert">
pascal@130 227 '
pascal@130 228 while read name file pkg desc; do
pascal@130 229 tmp="<frame $name>
pascal@130 230 <hbox>
pascal@130 231 <text wrap=\"true\" width-chars=\"44\" use-markup=\"true\">
pascal@130 232 <label>
pascal@130 233 \"
pascal@130 234 $(echo -e $desc)
pascal@130 235 \"
pascal@130 236 </label>
pascal@130 237 </text>
pascal@130 238 </hbox>
pascal@130 239 "
pascal@130 240 if [ -f $file ]; then
pascal@130 241 case "$file" in
pascal@131 242 *.lzma) action="unlzma -c";;
pascal@130 243 *.gz) action="zcat";;
pascal@130 244 *) action="cat";;
pascal@130 245 esac
pascal@135 246 if [ "$pkg" = "grub" ]; then
pascal@135 247 tmp="$tmp
pascal@135 248 <hbox>
pascal@135 249 <button>
pascal@200 250 <label>Grub menu</label>
pascal@200 251 <input file icon=\"accessories-text-editor\"></input>
pascal@214 252 <action type=\"lauch\">leafpad /tmp/floppybox.grub.menu</action>
pascal@200 253 </button>
pascal@200 254 <button>
pascal@135 255 <label>Write floppy</label>
pascal@135 256 <input file icon=\"forward\"></input>
pascal@213 257 <action>bootfloppybox call setup-grub \$DEVICE</action>
pascal@135 258 </button>
pascal@135 259 </hbox>
pascal@135 260 </frame>
pascal@135 261 "
pascal@135 262 else
pascal@135 263 tmp="$tmp
pascal@130 264 <hbox>
pascal@130 265 <button>
pascal@130 266 <label>Write floppy</label>
pascal@130 267 <input file icon=\"forward\"></input>
pascal@130 268 <action>$action $file > \$DEVICE</action>
pascal@130 269 </button>
pascal@130 270 </hbox>
pascal@130 271 </frame>
pascal@130 272 "
pascal@135 273 fi
pascal@130 274 else
pascal@130 275 tmp="$tmp
pascal@130 276 <hbox>
pascal@157 277 <text wrap=\"true\" width-chars=\"34\" use-markup=\"true\">
pascal@130 278 <label>
pascal@130 279 \"<i>The package <b>$pkg</b> is not yet installed</i>\"
pascal@130 280 </label>
pascal@130 281 </text>
pascal@157 282 <button>
pascal@157 283 <input file icon=\"go-jump\"></input>
pascal@157 284 <label>Install</label>
pascal@157 285 <action>[ -f /var/lib/tazpkg/packages.list ] || tazpkg recharge</action>
pascal@157 286 <action>xterm -fa MiscFixed -fs 11 -bg gray93 -fg black -geometry 80x17 -title \"$pkg install\" -e \"tazpkg get-install $pkg ; echo -e \\\"----\\n\\nENTER to continue...\\\" && read close\"</action>
pascal@157 287 <action type=\"exit\">Exit</action>
pascal@157 288 </button>
pascal@130 289 </hbox>
pascal@130 290 </frame>
pascal@130 291 "
pascal@130 292 fi
pascal@130 293 BOOT_DIALOG="$BOOT_DIALOG$tmp"
pascal@130 294 done <<EOT
pascal@130 295 SmartBtmgr /usr/share/boot/btmgr btmgr This OS independent Smart Boot Manager can boot any partition or ATAPI CD-ROM.
pascal@130 296 Etherboot /usr/share/boot/etherboot etherboot This network bootloader provides a replacement for proprietary PXE or NBI ROMs.
pascal@130 297 Memtest86+ /usr/share/boot/memtest.lzma memtest Memory failures detection tool.
pascal@135 298 Grub /usr/sbin/grub grub General purpose boot loader with command shell
pascal@130 299 EOT
pascal@130 300 tmp='
pascal@134 301 </notebook>
pascal@130 302 <hbox>
pascal@130 303 <button>
pascal@130 304 <input file icon="exit"></input>
pascal@130 305 <label>Exit</label>
pascal@130 306 <action type="exit">Exit</action>
pascal@130 307 </button>
pascal@130 308 </hbox>
pascal@130 309
pascal@130 310 </vbox>
pascal@130 311 </window>
pascal@130 312 '
pascal@130 313 BOOT_DIALOG="$BOOT_DIALOG$tmp"
pascal@130 314 export BOOT_DIALOG
pascal@130 315
pascal@130 316 # Only root can create floppy.
pascal@130 317 check_root
pascal@130 318 gtkdialog --program=BOOT_DIALOG
pascal@214 319 rm -f /tmp/floppybox.grub.menu
pascal@130 320
pascal@130 321 exit 0