diff options
Diffstat (limited to 'source/a/lilo/liloconfig')
-rw-r--r-- | source/a/lilo/liloconfig | 1165 |
1 files changed, 1165 insertions, 0 deletions
diff --git a/source/a/lilo/liloconfig b/source/a/lilo/liloconfig new file mode 100644 index 00000000..e786e752 --- /dev/null +++ b/source/a/lilo/liloconfig @@ -0,0 +1,1165 @@ +#!/bin/sh +# +# Copyright 1994, 1998, 1999 Patrick Volkerding, Moorhead, Minnesota USA +# Copyright 2002, 2003 Slackware Linux, Inc, Concord, CA +# Copyright 2007, 2008 Patrick Volkerding, Sebeka, Minnesota, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +TMP=/var/log/setup/tmp +CONSOLETYPE=standard +unset UTFVT + +# Set the OS root directory (called T_PX for some unknown reason). +# If an argument is given to this script and it is a directory, it +# is taken to be the root directory. First though, we check for a +# directory named $T_PX, and that gets the first priority. +if [ ! -d "$T_PX" ]; then + if [ ! "$1" = "" ]; then + if [ -d "$1" ]; then + T_PX="$1" + fi + else + # Are we on the installer image? + if [ -r /usr/lib/setup/SeTpartitions ]; then + T_PX=/mnt + # Or, are we on a running system? + elif [ -r /etc/slackware-version ]; then + T_PX=/ + # One more installer-likely thing: + elif [ -r /usr/lib/setup/setup ]; then + T_PX=/mnt + else + # We will have to assume we've on an installed and running system. + T_PX=/ + fi + fi +fi + +# If there's no boot_message.txt, start the header for one now: +if [ ! -r $T_PX/boot/boot_message.txt ]; then + cat << EOF > $T_PX/boot/boot_message.txt + +Welcome to the LILO Boot Loader! + +Please enter the name of the partition you would like to boot +at the prompt below. The choices are: + +EOF +fi + +# The default install location may be set here: +DEFAULT=" --default-item MBR " + +# This is a different 'probe' than the function below. +PROBE() { + if [ -x /sbin/probe ]; then + /sbin/probe -l + elif fdisk -l | grep "Disk /dev/ide" 1> /dev/null 2> /dev/null ; then # no devfs yet + for devs in /dev/hda /dev/hdb /dev/hdc /dev/hdd /dev/hde /dev/hdf /dev/hdg \ + /dev/hdh /dev/hdi /dev/hdj /dev/hdk /dev/hdl /dev/hdm /dev/hdn /dev/hdo /dev/hdp \ + /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi \ + /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp ; do + fdisk -l $devs 2> /dev/null + done + elif fdisk -l | grep "Disk /dev/scsi" 1> /dev/null 2> /dev/null ; then # no devfs yet + for devs in /dev/hda /dev/hdb /dev/hdc /dev/hdd /dev/hde /dev/hdf /dev/hdg \ + /dev/hdh /dev/hdi /dev/hdj /dev/hdk /dev/hdl /dev/hdm /dev/hdn /dev/hdo /dev/hdp \ + /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi \ + /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp ; do + fdisk -l $devs 2> /dev/null + done + elif [ -z "`fdisk -l`" ]; then + for devs in /dev/hda /dev/hdb /dev/hdc /dev/hdd /dev/hde /dev/hdf /dev/hdg \ + /dev/hdh /dev/hdi /dev/hdj /dev/hdk /dev/hdl /dev/hdm /dev/hdn /dev/hdo /dev/hdp \ + /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi \ + /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp ; do + fdisk -l $devs 2> /dev/null + done + else # We got output without /dev/ide or /dev/scsi, so it can probably be trusted: + fdisk -l 2> /dev/null + fi +} + +# Function to ask if the Slackware logo boot screen should be used. +ask_boot_splash() { + dialog --title "OPTIONAL SLACKWARE LOGO BOOT SCREEN" \ + --yesno \ +"Would you like to use a boot screen with the Slackware logo \ +against a black background? If you answer no here, the standard \ +LILO menu will be used.\n\ +" 7 65 2> $TMP/reply + RETVAL=$? + return $RETVAL +} + +boot_bmp() { + cat << EO_BMP +# Boot BMP Image. +# Bitmap in BMP format: 640x480x8 + bitmap = /boot/slack.bmp +# Menu colors (foreground, background, shadow, highlighted +# foreground, highlighted background, highlighted shadow): + bmp-colors = 255,0,255,0,255,0 +# Location of the option table: location x, location y, number of +# columns, lines per column (max 15), "spill" (this is how many +# entries must be in the first column before the next begins to +# be used. We don't specify it here, as there's just one column. + bmp-table = 60,6,1,16 +# Timer location x, timer location y, foreground color, +# background color, shadow color. + bmp-timer = 65,27,0,255 +EO_BMP +} + +# Menu to check if we want to use VESA framebuffer support: +use_framebuffer() { +if cat /proc/devices | grep "29 fb" 1> /dev/null ; then + dialog --title "CONFIGURE LILO TO USE FRAME BUFFER CONSOLE?" \ + --default-item 1024x768x256 \ + --menu "Looking at /proc/devices, it seems your kernel has support for \ +the Linux frame buffer console. If we enable this in /etc/lilo.conf, it \ +will allow more rows and columns of text on the screen and give you a cool \ +penguin logo at boot time. However, the frame buffer text console is \ +slower than a standard text console. In addition, not every video card \ +or monitor supports all of these video modes. Would you like to use the \ +frame buffer console, or the standard Linux console?" 0 0 0 \ + "standard" "Use the standard Linux console (the safe choice)" \ + "640x480x256" "Frame buffer console, 640x480x256" \ + "800x600x256" "Frame buffer console, 800x600x256" \ + "1024x768x256" "Frame buffer console, 1024x768x256" \ + "640x480x32k" "Frame buffer console, 640x480x32k" \ + "800x600x32k" "Frame buffer console, 800x600x32k" \ + "1024x768x32k" "Frame buffer console, 1024x768x32k" \ + "640x480x64k" "Frame buffer console, 640x480x64k" \ + "800x600x64k" "Frame buffer console, 800x600x64k" \ + "1024x768x64k" "Frame buffer console, 1024x768x64k" \ + 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + exit + fi +# Frame buffer modes above 1024x768 look terrible except +# on LCD panels, and 32 bit color is slow. Since we don't +# even need to run a framebuffer console to run framebuffer +# X anymore, these modes aren't of much real use. +# "1280x1024x256" "Frame buffer console, 1280x1024x256" \ +# "1600x1200x256" "Frame buffer console, 1600x1200x256" \ +# "1280x1024x32k" "Frame buffer console, 1280x1024x32k" \ +# "1600x1200x32k" "Frame buffer console, 1600x1200x32k" \ +# "1280x1024x64k" "Frame buffer console, 1280x1024x64k" \ +# "1600x1200x64k" "Frame buffer console, 1600x1200x64k" \ +# "640x480x16m" "Frame buffer console, 640x480x16.8m" \ +# "800x600x16m" "Frame buffer console, 800x600x16.8m" \ +# "1024x768x16m" "Frame buffer console, 1024x768x16.8m" \ +# "1280x1024x16m" "Frame buffer console, 1280x1024x16.8m" \ +# "1600x1200x16m" "Frame buffer console, 1600x1200x16.8m" + CONSOLETYPE="`cat $TMP/reply`" + if [ "$CONSOLETYPE" = "1600x1200x16m" ]; then + CONSOLENUM=799 + elif [ "$CONSOLETYPE" = "1600x1200x64k" ]; then + CONSOLENUM=798 + elif [ "$CONSOLETYPE" = "1600x1200x32k" ]; then + CONSOLENUM=797 + elif [ "$CONSOLETYPE" = "1600x1200x256" ]; then + CONSOLENUM=796 + elif [ "$CONSOLETYPE" = "1280x1024x16m" ]; then + CONSOLENUM=795 + elif [ "$CONSOLETYPE" = "1280x1024x64k" ]; then + CONSOLENUM=794 + elif [ "$CONSOLETYPE" = "1280x1024x32k" ]; then + CONSOLENUM=793 + elif [ "$CONSOLETYPE" = "1280x1024x256" ]; then + CONSOLENUM=775 + elif [ "$CONSOLETYPE" = "1024x768x16m" ]; then + CONSOLENUM=792 + elif [ "$CONSOLETYPE" = "1024x768x64k" ]; then + CONSOLENUM=791 + elif [ "$CONSOLETYPE" = "1024x768x32k" ]; then + CONSOLENUM=790 + elif [ "$CONSOLETYPE" = "1024x768x256" ]; then + CONSOLENUM=773 + elif [ "$CONSOLETYPE" = "800x600x16m" ]; then + CONSOLENUM=789 + elif [ "$CONSOLETYPE" = "800x600x64k" ]; then + CONSOLENUM=788 + elif [ "$CONSOLETYPE" = "800x600x32k" ]; then + CONSOLENUM=787 + elif [ "$CONSOLETYPE" = "800x600x256" ]; then + CONSOLENUM=771 + elif [ "$CONSOLETYPE" = "640x480x16m" ]; then + CONSOLENUM=786 + elif [ "$CONSOLETYPE" = "640x480x64k" ]; then + CONSOLENUM=785 + elif [ "$CONSOLETYPE" = "640x480x32k" ]; then + CONSOLENUM=784 + elif [ "$CONSOLETYPE" = "640x480x256" ]; then + CONSOLENUM=769 + fi +fi +} + +# A function to ask for append= parameters. +ask_append() { + dialog --title "OPTIONAL LILO append=\"<kernel parameters>\" LINE" --inputbox \ +"Some systems might require extra parameters to be passed to the kernel. \ +If you needed to pass parameters to the kernel when you booted the Slackware \ +bootdisk, you'll probably want to enter the same ones here. Most \ +systems won't require any extra parameters. If you don't need any, just \ +hit ENTER to continue.\n\ +" 12 72 2> $TMP/reply + RETVAL=$? + return $RETVAL +} + +ask_utf() { + if [ "$(uname -r | cut -f 3 -d .)" -gt "23" ]; then + dialog --defaultno --title "USE UTF-8 TEXT CONSOLE?" --yesno \ +"Beginning with the 2.6.24 kernel, the text consoles default to UTF-8 mode. \ +Unless you are using a UTF-8 locale (\$LANG setting), using the old default \ +of a non-UTF text console is safer until some issues with various console \ +programs are addressed. This option has no effect on the use of UTF-8 with X. \ +\"No\" is the safe choice here." 10 70 + fi +} + +# This function scans for bootable partitions (making some assumptions along +# the way which may or may not be correct, but usually work), and sets up +# LILO in either the superblock, or the MBR. +simplelilo() +{ + use_framebuffer; + + ask_append; + if [ $? = 1 -o $? = 255 ]; then + APPEND="" + fi + APPEND="`cat $TMP/reply`" + + ask_utf; + if [ $? = 1 -o $? = 255 ]; then + UTFVT="vt.default_utf8=0" + else + UTFVT="vt.default_utf8=1" + fi + + if PROBE -l | grep 'OS/2 Boot Manager' 1> /dev/null 2> /dev/null ; then + dialog --title "OS/2 BOOT MANAGER FOUND" --yesno \ + "Your system appears to have Boot Manager, a boot menu system provided \ +with OS/2 and Partition Magic. If you like, we can install a very simple \ +LILO boot block at the start of your Linux partition. Then, you can \ +add the partition to the Boot Manager menu, and you'll be able to use \ +Boot Manager to boot Linux. Would you like to install LILO in a Boot \ +Manager compatible way?" 11 65 + FLAG=$? + if [ ! $FLAG = 0 -a ! $FLAG = 1 ]; then + exit 1 + fi + if [ $FLAG = 0 ]; then # yes, use BM + if [ -r $T_PX/etc/lilo.conf ]; then + mv $T_PX/etc/lilo.conf $T_PX/etc/lilo.conf.orig + fi + cat << EOF > $T_PX/etc/lilo.conf +# LILO configuration file +# generated by 'liloconfig' +# +# Start LILO global section +# +EOF + if [ ! "$APPEND" = "" -o ! "$UTFVT" = "" ]; then + echo "# Append any additional kernel parameters:" >> $T_PX/etc/lilo.conf + echo "append=\"$APPEND $UTFVT\"" >> $T_PX/etc/lilo.conf + fi + cat << EOF >> $T_PX/etc/lilo.conf +boot = $ROOT_DEVICE +#delay = 5 +EOF + if [ "$CONSOLETYPE" = "standard" ]; then + cat << EOF >> $T_PX/etc/lilo.conf +vga = normal +EOF + else + cat << EOF >> $T_PX/etc/lilo.conf +# VESA framebuffer at $CONSOLETYPE +vga = $CONSOLENUM +EOF + fi + cat << EOF >> $T_PX/etc/lilo.conf +# End LILO global section +# Linux root partition section +image = $KERNEL + root = $ROOT_DEVICE + label = Linux + read-only +# End root Linux partition section +EOF + installcolor; + return + fi # Use Boot Manager + fi # Boot Manager detected + # If we got here, we either don't have boot manager or don't want to use it + dialog --title "SELECT LILO DESTINATION" $DEFAULT --menu \ +"LILO can be installed to a variety of places:\n\ +\n\ + 1. The superblock of your root Linux partition. (which could\n\ + be made the bootable partition with Windows or Linux fdisk, or\n\ + booted with a program like OS/2 Boot Manager)\n\ + 2. A formatted floppy disk.\n\ + 3. The Master Boot Record of your first hard drive.\n\ +\n\ +Options 1 and 2 are the safest, but option 1 does require a little\n\ +extra work later (setting the partition bootable with fdisk).\n\ +Which option would you like?" \ + 20 72 3 \ + "Root" "Install to superblock (not for use with XFS)" \ + "Floppy" "Install to a formatted floppy in /dev/fd0 (A:)" \ + "MBR" "Install to Master Boot Record" \ + 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + exit + fi + TG="`cat $TMP/reply`" + rm -r $TMP/reply + if [ "$TG" = "MBR" ]; then + MBR_TARGET=/dev/sda + echo $MBR_TARGET > $TMP/LILOMBR + cat /proc/partitions | while read LINE ; do + MAJOR="`echo $LINE | cut -f 1 -d ' '`" + MINOR="`echo $LINE | cut -f 2 -d ' '`" + if [ ! "$MINOR" = "0" -a ! "$MINOR" = "64" ]; then # ignore whole devices to weed out CD drives + if [ "$MAJOR" = "3" ]; then + MBR_TARGET=/dev/hda + echo $MBR_TARGET > $TMP/LILOMBR + elif [ "$MAJOR" = "22" -a ! "$MBR_TARGET" = "/dev/hda" ]; then + MBR_TARGET=/dev/hdc + echo $MBR_TARGET > $TMP/LILOMBR + elif [ "$MAJOR" = "33" -a ! "$MBR_TARGET" = "/dev/hda" -a ! "$MBR_TARGET" = "/dev/hdc" ]; then + MBR_TARGET=/dev/hde + echo $MBR_TARGET > $TMP/LILOMBR + elif [ "$MAJOR" = "34" -a ! "$MBR_TARGET" = "/dev/hda" -a ! "$MBR_TARGET" = "/dev/hdc" -a ! "$MBR_TARGET" = "/dev/hde" ]; then + MBR_TARGET=/dev/hdg + echo $MBR_TARGET > $TMP/LILOMBR + fi + fi + done + LILO_TARGET=`cat $TMP/LILOMBR` + elif [ "$TG" = "Root" ]; then + LILO_TARGET=`echo $ROOT_DEVICE` + elif [ "$TG" = "Floppy" ]; then + LILO_TARGET="/dev/fd0" + fi + cat << EOF > $T_PX/etc/lilo.conf +# LILO configuration file +# generated by 'liloconfig' +# +# Start LILO global section +EOF + if [ ! "$APPEND" = "" -o ! "$UTFVT" = "" ]; then + echo "# Append any additional kernel parameters:" >> $T_PX/etc/lilo.conf + echo "append=\"$APPEND $UTFVT\"" >> $T_PX/etc/lilo.conf + fi + cat << EOF >> $T_PX/etc/lilo.conf +boot = $LILO_TARGET + +# Boot BMP Image. +# Bitmap in BMP format: 640x480x8 + bitmap = /boot/slack.bmp +# Menu colors (foreground, background, shadow, highlighted +# foreground, highlighted background, highlighted shadow): + bmp-colors = 255,0,255,0,255,0 +# Location of the option table: location x, location y, number of +# columns, lines per column (max 15), "spill" (this is how many +# entries must be in the first column before the next begins to +# be used. We don't specify it here, as there's just one column. + bmp-table = 60,6,1,16 +# Timer location x, timer location y, foreground color, +# background color, shadow color. + bmp-timer = 65,27,0,255 + +# Standard menu. +# Or, you can comment out the bitmap menu above and +# use a boot message with the standard menu: +#message = /boot/boot_message.txt + +# Wait until the timeout to boot (if commented out, boot the +# first entry immediately): +prompt +# Timeout before the first entry boots. +# This is given in tenths of a second, so 600 for every minute: +timeout = 1200 +# Override dangerous defaults that rewrite the partition table: +change-rules + reset +EOF + if [ "$CONSOLETYPE" = "standard" ]; then + cat << EOF >> $T_PX/etc/lilo.conf +# Normal VGA console +vga = normal +# VESA framebuffer console @ 1024x768x64k +# vga=791 +# VESA framebuffer console @ 1024x768x32k +# vga=790 +# VESA framebuffer console @ 1024x768x256 +# vga=773 +# VESA framebuffer console @ 800x600x64k +# vga=788 +# VESA framebuffer console @ 800x600x32k +# vga=787 +# VESA framebuffer console @ 800x600x256 +# vga=771 +# VESA framebuffer console @ 640x480x64k +# vga=785 +# VESA framebuffer console @ 640x480x32k +# vga=784 +# VESA framebuffer console @ 640x480x256 +# vga=769 +EOF + else + cat << EOF >> $T_PX/etc/lilo.conf +# VESA framebuffer console @ $CONSOLETYPE +vga = $CONSOLENUM +# Normal VGA console +# vga = normal +# VESA framebuffer console @ 1024x768x64k +# vga=791 +# VESA framebuffer console @ 1024x768x32k +# vga=790 +# VESA framebuffer console @ 1024x768x256 +# vga=773 +# VESA framebuffer console @ 800x600x64k +# vga=788 +# VESA framebuffer console @ 800x600x32k +# vga=787 +# VESA framebuffer console @ 800x600x256 +# vga=771 +# VESA framebuffer console @ 640x480x64k +# vga=785 +# VESA framebuffer console @ 640x480x32k +# vga=784 +# VESA framebuffer console @ 640x480x256 +# vga=769 +EOF + fi +cat << EOF >> $T_PX/etc/lilo.conf +# End LILO global section +EOF + # OK, now let's look for Windows partitions: + DOSP="`PROBE -l | grep "DOS +Win +W95 +FAT12 +FAT16 +HPFS" | grep -v "Ext'd" | grep -v "Extend" | sort`" + DOSP="`echo $DOSP | cut -f 1 -d ' '`" + if [ ! "$DOSP" = "" ]; then + TABLE="`echo $DOSP | cut -b1-8`" + cat << EOF >> $T_PX/etc/lilo.conf +# Windows bootable partition config begins +other = $DOSP + label = Windows + table = $TABLE +# Windows bootable partition config ends +EOF + echo "Windows - (Windows FAT/NTFS partition)" >> $T_PX/boot/boot_message.txt + fi + # Next, we search for Linux partitions: + LNXP="`PROBE -l | grep "Linux$"`" + LNXP="`echo $LNXP | cut -f 1 -d ' ' | sort`" + if [ ! "$LNXP" = "" ]; then + cat << EOF >> $T_PX/etc/lilo.conf +# Linux bootable partition config begins +image = $KERNEL + root = $ROOT_DEVICE + label = Linux + read-only +# Linux bootable partition config ends +EOF + echo "Linux - (Linux partition)" >> $T_PX/boot/boot_message.txt + fi +# DEAD CODE, BUT IN CASE OS/2 MAKES A COMEBACK! +# # OK, hopefully we can remember how to deal with OS/2 :^) +# OS2P="`PROBE -l | grep "HPFS"`" +# OS2P="`echo $OS2P | cut -f 1 -d ' ' | sort`" +# if [ ! "$OS2P" = "" ]; then +# TABLE="`echo $OS2P | cut -b1-8`" +# if [ "$TABLE" = "/dev/hda" ]; then +# cat << EOF >> $T_PX/etc/lilo.conf +## OS/2 bootable partition config begins +#other = $OS2P +# label = OS2 +# table = $TABLE +## OS/2 bootable partition config ends +#EOF +# else +# cat << EOF >> $T_PX/etc/lilo.conf +## OS/2 bootable partition config begins +#other = $OS2P +# label = OS2 +# table = $TABLE +# loader = /boot/os2_d.b +## map-drive = 0x80 +## to = 0x81 +## map-drive = 0x81 +## to = 0x80 +## OS/2 bootable partition config ends +#EOF +# echo "OS2 - OS/2 Warp (HPFS partition)" >> $T_PX/boot/boot_message.txt +# fi +# fi + echo >> $T_PX/boot/boot_message.txt + # Done, now we must install lilo: + installcolor; +} + +checkp_text() +{ + if [ ! -r $1 ]; then + echo + echo "I can't find a device named '$1'!" + echo + echo -n "Are you sure you want to use this device name [y]es, [n]o? " + read use_device; + if [ ! "$use_device" = "y" ]; then + return 1; + fi + return 0; + fi +} + +checkp_dialog() +{ + if [ ! -r $1 ]; then + dialog --title "DEVICE FILE NOT FOUND" --yesno "I can't find a \ +device named '$1'. Are you sure you want to use this device \ +name?" 7 60 + return $?; + fi +} + +installcolor() +{ + dialog --infobox "\nInstalling the Linux Loader..." 5 40 + if [ "$T_PX" = "/" ]; then + lilo 1> /dev/null 2> /etc/lilo-error.$$ + SUCCESS=$? + else + lilo -r $T_PX -m /boot/map -C /etc/lilo.conf 1> /dev/null 2> /etc/lilo-error.$$ + SUCCESS=$? + fi + if [ ! "$SUCCESS" = "0" ]; then # edit file to try lba32 mode: + cat $T_PX/etc/lilo.conf | while read line ; do + echo $line + if [ "$line" = "# Start LILO global section" ] ; then + echo "lba32 # Allow booting past 1024th cylinder with a recent BIOS" + fi + done > $T_PX/etc/lilo.conf.lba32 + mv $T_PX/etc/lilo.conf.lba32 $T_PX/etc/lilo.conf + if [ "$T_PX" = "/" ]; then + lilo 1> /dev/null 2> /etc/lilo-error.$$ + SUCCESS=$? + else + lilo -r $T_PX -m /boot/map -C /etc/lilo.conf 1> /dev/null 2> /etc/lilo-error.$$ + SUCCESS=$? + fi + fi + sleep 1 + if [ ! "$SUCCESS" = "0" ]; then # some LILO error occured + echo >> /etc/lilo-error.$$ +cat << EOF >> /etc/lilo-error.$$ +Sorry, but the attempt to install LILO has returned an error, so LILO \ +has not been correctly installed. You'll have to use a bootdisk \ +to start your \ +machine instead. It should still be possible to get LILO working by \ +editing the /etc/lilo.conf and reinstalling LILO manually. See the \ +LILO man page and documentation in /usr/doc/lilo/ for more help. \ +The error message may be seen above. +EOF + dialog --msgbox "$(cat /etc/lilo-error.$$)" 0 0 + fi +} + +installtext() +{ + echo "Installing the Linux Loader..." + if [ "$T_PX" = "/" ]; then + lilo + SUCCESS=$? + else + lilo -r $T_PX -m /boot/map -C /etc/lilo.conf + SUCCESS=$? + fi + if [ ! "$SUCCESS" = "0" ]; then # try lba32 mode: + cat $T_PX/etc/lilo.conf | while read line ; do + echo $line + if [ "$line" = "# Start LILO global section" ] ; then + echo "lba32 # Allow booting past 1024th cylinder with a recent BIOS" + fi + done > $T_PX/etc/lilo.conf.lba32 + mv $T_PX/etc/lilo.conf.lba32 $T_PX/etc/lilo.conf + if [ "$T_PX" = "/" ]; then + lilo 1> /dev/null 2> /dev/null + SUCCESS=$? + else + lilo -r $T_PX -m /boot/map -C /etc/lilo.conf 1> /dev/null 2> /dev/null + SUCCESS=$? + fi + fi + sleep 1 + if [ ! "$SUCCESS" = "0" ]; then # some LILO error occured + cat << EOF + +LILO INSTALL ERROR # $SUCCESS + +Sorry, but the attempt to install LILO has returned an error, so LILO +has not been correctly installed. You'll have to use a bootdisk to +start your machine instead. It should still be possible to get LILO +working by editing the /etc/lilo.conf and reinstalling LILO manually. +See the LILO man page and documentation in /usr/doc/lilo/ for more +help. + +EOF + fi +} + +# 'probe()' borrowed from LILO QuickInst. +probe() +{ + [ ! -z "`dd if=$1 bs=1 count=1 2>/dev/null | tr '\0' x`" ] + return +} + +# Figure out if we're installing from the hard drive +if [ -r $TMP/SeTT_PX ]; then + T_PX="`cat $TMP/SeTT_PX`" +else + if [ "$T_PX" = "" -a ! "$1" = "" ]; then + T_PX=$1 + else + T_PX=/ + fi +fi +HDR="no" # this means the header section of /etc/lilo.conf has not yet + # been configured +LNX="no" # this means no Linux partition has been defined as bootable + # through LILO. Both of these must change to "yes" before LILO will + # install from this script. +# Determine the root partition (such as /dev/hda2) +ROOT_DEVICE=$2 +if [ "$ROOT_DEVICE" = "" ]; then + if [ -r $TMP/SeTrootdev ]; then + ROOT_DEVICE="`cat $TMP/SeTrootdev`" + else + ROOT_DEVICE="`mount | cut -f 1 -d " " | sed -n "1 p"`" + fi +fi +# Figure out where the kernel is: +ARCHTYPE=i386 +if [ -r $T_PX/vmlinuz ]; then + KERNEL=/vmlinuz +elif [ -r $T_PX/boot/vmlinuz ]; then + KERNEL=/boot/vmlinuz +elif [ -r $T_PX/usr/src/linux/arch/$ARCHTYPE/boot/bzImage ]; then + KERNEL=/usr/src/linux/arch/$ARCHTYPE/boot/bzImage +elif [ -r $T_PX/usr/src/linux/arch/$ARCHTYPE/boot/zImage ]; then + KERNEL=/usr/src/linux/arch/$ARCHTYPE/boot/zImage +else + exit 99 # no kernel? guess you couldn't read. bye bye. +fi + + # If we're installing from the umsdos.gz rootdisk, suggest skipping LILO: + if [ ! "$T_PX" = "/" ]; then + if mount | grep " on /mnt " | grep umsdos 1> /dev/null 2> /dev/null ; then + dialog --title "SKIP LILO CONFIGURATION? (RECOMMENDED)" --yesno "Since \ +you are installing to a FAT partition, it's suggested that you do not \ +configure LILO at this time. (Instead, use your bootdisk. For booting \ +off the hard drive from MS-DOS, you can use Loadlin. You'll find \ +Loadlin on your hard drive in \LINUX\ROOT) Skip LILO configuration \ +(highly recommended)?" 10 70 + if [ $? = 0 ]; then + exit + fi + fi + fi + # OK, now let's see if we should automate things: + dialog --title "INSTALL LILO" --menu "LILO (Linux Loader) is a generic \ +boot loader. There's a simple installation which tries to automatically \ +set up LILO to boot Linux (also Windows if found). For \ +more advanced users, the expert option offers more control over the \ +installation process. Since LILO does not work in all cases (and can \ +damage partitions if incorrectly installed), there's the third (safe) \ +option, which is to skip installing LILO for now. You can always install \ +it later with the 'liloconfig' command. Which option would you like?" \ + 18 67 3 \ + "simple" "Try to install LILO automatically" \ + "expert" "Use expert lilo.conf setup menu" \ + "skip" "Do not install LILO" 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + exit + fi + REPLY="`cat $TMP/reply`" + rm -f $TMP/reply + if [ "$REPLY" = "skip" ]; then + exit + elif [ "$REPLY" = "simple" ]; then + # Do simple LILO setup + simplelilo + exit + fi + # drop through to last option: (use the expert menus) + while [ 0 ]; do + dialog --title "EXPERT LILO INSTALLATION" --menu \ +"This menu directs the creation of the LILO config file, lilo.conf. \ +To install, you make a new LILO configuration file by creating a new header \ +and then adding one or more bootable partitions to the file. Once you've done \ +this, you can select the install option. Alternately, if you already have an \ +/etc/lilo.conf, you may reinstall using that. If you make a mistake, you can \ +always start over by choosing 'Begin'. \ +Which option would you like?" 21 73 8 \ +"Begin" "Start LILO configuration with a new LILO header" \ +"Linux" "Add a Linux partition to the LILO config" \ +"Windows" "Add a Windows FAT or NTFS partition to the LILO config" \ +"Install" "Install LILO" \ +"Recycle" "Reinstall LILO using the existing lilo.conf" \ +"Skip" "Skip LILO installation and exit this menu" \ +"View" "View your current /etc/lilo.conf" \ +"Help" "Read the Linux Loader HELP file" 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + REPLY="Skip" + else + REPLY="`cat $TMP/reply`" + fi + rm -r $TMP/reply + if [ "$REPLY" = "Begin" ]; then + ask_append; + if [ $? = 1 -o $? = 255 ]; then + APPEND="" + HDR="no" + continue; + else + APPEND="`cat $TMP/reply`" + fi + ask_utf; + if [ $? = 1 -o $? = 255 ]; then + UTFVT="vt.default_utf8=0" + else + UTFVT="vt.default_utf8=1" + fi + use_framebuffer; + dialog --title "SELECT LILO TARGET LOCATION" $DEFAULT --menu "LILO can be installed \ +to a variety of places: \ +the superblock of your root Linux partition (which could then be made the \ +bootable partition with fdisk), a formatted floppy disk, \ +or the master boot record of your first hard drive. If you're using \ +a boot system such as Boot Manager, you should use the "Root" \ +selection. Please pick a target location:" 15 65 3 \ +"Root" "Install to superblock (not for use with XFS)" \ +"Floppy" "Use a formatted floppy disk in the boot drive" \ +"MBR" "Use the Master Boot Record (possibly unsafe)" \ +2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + HDR="no" + continue; + else + LNX="no" + TG="`cat $TMP/reply`" + fi + rm -r $TMP/reply + if [ "$TG" = "MBR" ]; then + MBR_TARGET=/dev/sda + echo $MBR_TARGET > $TMP/LILOMBR + cat /proc/partitions | while read LINE ; do + MAJOR="`echo $LINE | cut -f 1 -d ' '`" + MINOR="`echo $LINE | cut -f 2 -d ' '`" + if [ ! "$MINOR" = "0" -a ! "$MINOR" = "64" ]; then # ignore whole devices to weed out CD drives + if [ "$MAJOR" = "3" ]; then + MBR_TARGET=/dev/hda + echo $MBR_TARGET > $TMP/LILOMBR + elif [ "$MAJOR" = "22" -a ! "$MBR_TARGET" = "/dev/hda" ]; then + MBR_TARGET=/dev/hdc + echo $MBR_TARGET > $TMP/LILOMBR + elif [ "$MAJOR" = "33" -a ! "$MBR_TARGET" = "/dev/hda" -a ! "$MBR_TARGET" = "/dev/hdc" ]; then + MBR_TARGET=/dev/hde + echo $MBR_TARGET > $TMP/LILOMBR + elif [ "$MAJOR" = "34" -a ! "$MBR_TARGET" = "/dev/hda" -a ! "$MBR_TARGET" = "/dev/hdc" -a ! "$MBR_TARGET" = "/dev/hde" ]; then + MBR_TARGET=/dev/hdg + echo $MBR_TARGET > $TMP/LILOMBR + fi + fi + done + LILO_TARGET=`cat $TMP/LILOMBR` + dialog --title "CONFIRM LOCATION TO INSTALL LILO" --inputbox \ +"The auto-detected location to install the LILO boot block is shown below. \ +If you need to make any changes, you can make them below. Otherwise, hit \ +ENTER to accept the target location shown." 11 60 $LILO_TARGET 2> $TMP/reply + if [ $? = 0 ]; then + LILO_TARGET="`cat $TMP/reply`" + fi + rm -f $TMP/reply + elif [ "$TG" = "Root" ]; then + LILO_TARGET=`echo $ROOT_DEVICE` + elif [ "$TG" = "Floppy" ]; then + LILO_TARGET="/dev/fd0" + else + HDR="no" + continue; + fi + dialog --title "CHOOSE LILO TIMEOUT" --menu "At boot time, how long would \ +you like LILO to wait for you to select an operating system? If you \ +let LILO time out, it will boot the first OS in the configuration file by \ +default." 13 74 4 \ +"None" "Don't wait at all - boot straight into the first OS" \ +"5" "5 seconds" \ +"30" "30 seconds" \ +"Forever" "Present a prompt and wait until a choice is made" 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + HDR="no" + continue; + else + TIMEOUT="`cat $TMP/reply`" + fi + rm -r $TMP/reply + if [ "$TIMEOUT" = "None" ]; then + PROMPT="#prompt" + TIMEOUT="#timeout = 5" + elif [ "$TIMEOUT" = "5" ]; then + PROMPT="prompt" + TIMEOUT="timeout = 50" + elif [ "$TIMEOUT" = "30" ]; then + PROMPT="prompt" + TIMEOUT="timeout = 300" + elif [ "$TIMEOUT" = "Forever" ]; then + PROMPT="prompt" + TIMEOUT="#timeout = 300" + else + HDR="no" + continue; + fi + cat << EOF > $TMP/lilo.conf +# LILO configuration file +# generated by 'liloconfig' +# +# Start LILO global section +boot = $LILO_TARGET +#compact # faster, but won't work on all systems. +EOF + # Boot splash + if [ "$PROMPT" = "prompt" ]; then + if ask_boot_splash ; then + boot_bmp >> $TMP/lilo.conf + cat << EOF >> $TMP/lilo.conf +# Standard menu. +# Or, you can comment out the bitmap menu above and +# use a boot message with the standard menu: +#message = /boot/boot_message.txt + +EOF + fi + else + cat << EOF >> $TMP/lilo.conf +# Standard menu. +message = /boot/boot_message.txt + +EOF + fi + if [ ! "$APPEND" = "" -o ! "$UTFVT" = "" ]; then + echo "# Append any additional kernel parameters:" >> $TMP/lilo.conf + echo "append=\"$APPEND $UTFVT\"" >> $TMP/lilo.conf + fi + cat << EOF >> $TMP/lilo.conf +$PROMPT +$TIMEOUT +EOF + if [ "$CONSOLETYPE" = "standard" ]; then + cat << EOF >> $TMP/lilo.conf +# Normal VGA console +vga = normal +# VESA framebuffer console @ 1024x768x64k +# vga=791 +# VESA framebuffer console @ 1024x768x32k +# vga=790 +# VESA framebuffer console @ 1024x768x256 +# vga=773 +# VESA framebuffer console @ 800x600x64k +# vga=788 +# VESA framebuffer console @ 800x600x32k +# vga=787 +# VESA framebuffer console @ 800x600x256 +# vga=771 +# VESA framebuffer console @ 640x480x64k +# vga=785 +# VESA framebuffer console @ 640x480x32k +# vga=784 +# VESA framebuffer console @ 640x480x256 +# vga=769 +EOF + else + cat << EOF >> $TMP/lilo.conf +# VESA framebuffer console @ $CONSOLETYPE +vga = $CONSOLENUM +# Normal VGA console +# vga = normal +# VESA framebuffer console @ 1024x768x64k +# vga=791 +# VESA framebuffer console @ 1024x768x32k +# vga=790 +# VESA framebuffer console @ 1024x768x256 +# vga=773 +# VESA framebuffer console @ 800x600x64k +# vga=788 +# VESA framebuffer console @ 800x600x32k +# vga=787 +# VESA framebuffer console @ 800x600x256 +# vga=771 +# VESA framebuffer console @ 640x480x64k +# vga=785 +# VESA framebuffer console @ 640x480x32k +# vga=784 +# VESA framebuffer console @ 640x480x256 +# vga=769 +EOF + fi + cat << EOF >> $TMP/lilo.conf +# ramdisk = 0 # paranoia setting +# End LILO global section +EOF + HDR="yes" + elif [ "$REPLY" = "Linux" ]; then + if [ "$HDR" = "yes" ]; then + echo "These are your Linux partitions:" > $TMP/tmpmsg + echo >> $TMP/tmpmsg + echo " Device Boot Start End Blocks Id System" >> $TMP/tmpmsg + PROBE -l | grep "Linux$" | sort >> $TMP/tmpmsg + echo >> $TMP/tmpmsg + echo "Which one would you like LILO to boot?" >> $TMP/tmpmsg + dialog --title "SELECT LINUX PARTITION" --no-collapse --inputbox \ +"`cat $TMP/tmpmsg`" 21 74 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + rm $TMP/tmpmsg + continue + fi + rm $TMP/tmpmsg + LINUX_PART="`cat $TMP/reply`" + checkp_dialog $LINUX_PART + if [ ! $? = 0 ]; then + continue; + fi + dialog --title "SELECT PARTITION NAME" --inputbox \ +"Now you must select a short, unique name for this partition. \ +You'll use this name if you specify a partition to boot at the \ +LILO prompt. 'Linux' might not be a bad choice. THIS MUST BE A \ +SINGLE WORD." 11 60 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + continue + fi + LABEL="`cat $TMP/reply`" + cat << EOF >> $TMP/lilo.conf +# Linux bootable partition config begins +image = $KERNEL + root = $LINUX_PART + label = $LABEL + read-only # Partitions should be mounted read-only for checking +# Linux bootable partition config ends +EOF + else + dialog --title "CAN'T ADD LINUX PARTITION" --msgbox "You can't add \ +partitions unless you start over with a new LILO header." 6 60 + continue + fi + LNX="yes" + # MORE OS/2 DEAD CODE... DOESN'T HURT. + # THIS ITEM HAS LONG BEEN REMOVED FROM THE MENU... + elif [ "$REPLY" = "OS/2" ]; then + if [ "$HDR" = "yes" ]; then + echo "These are possibly OS/2 partitions. They will be treated" > $TMP/tmpmsg + echo "as such if you install them using this menu." >> $TMP/tmpmsg + echo >> $TMP/tmpmsg + echo " Device Boot Start End Blocks Id System" >> $TMP/tmpmsg + PROBE -l | grep DOS | sort >> $TMP/tmpmsg + PROBE -l | grep HPFS | sort >> $TMP/tmpmsg + echo >> $TMP/tmpmsg + echo "Which one would you like LILO to boot?" >> $TMP/tmpmsg + dialog --title "SELECT OS/2 PARTITION" --no-collapse --inputbox \ +"`cat $TMP/tmpmsg`" 20 74 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + rm $TMP/tmpmsg + continue + fi + rm $TMP/tmpmsg + OS_2_PART="`cat $TMP/reply`" + checkp_dialog $OS_2_PART + if [ ! $? = 0 ]; then + continue; + fi + dialog --title "SELECT PARTITION NAME" --inputbox \ +"Now you must select a short, unique name for this partition. \ +You'll use this name if you specify a partition to boot at the \ +LILO prompt. 'OS/2' might not be a bad choice. THIS MUST BE A \ +SINGLE WORD." 11 60 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + continue + fi + LABEL="`cat $TMP/reply`" + TABLE="`echo $OS_2_PART | cut -b1-8`" + if [ "`echo $TABLE | cut -b6-8`" = "hda" ]; then + cat << EOF >> $TMP/lilo.conf +# OS/2 bootable partition config begins +other = $OS_2_PART + label = $LABEL + table = $TABLE +# OS/2 bootable partition config ends +EOF + else + cat << EOF >> $TMP/lilo.conf +# OS/2 bootable partition config begins +other = $OS_2_PART + label = $LABEL + table = $TABLE + loader = /boot/os2_d.b +# map-drive = 0x80 +# to = 0x81 +# map-drive = 0x81 +# to = 0x80 +# OS/2 bootable partition config ends +EOF + fi + else + dialog --title "CAN'T ADD OS/2 PARTITION" --msgbox "You can't add \ +partitions unless you start over with a new LILO header." 6 60 + continue + fi + LNX="yes" + elif [ "$REPLY" = "Windows" ]; then + if [ "$HDR" = "yes" ]; then + echo "These are possibly Windows or DOS partitions. They will be treated" > $TMP/tmpmsg + echo "as such if you install them using this menu." >> $TMP/tmpmsg + echo >> $TMP/tmpmsg + echo " Device Boot Start End Blocks Id System" >> $TMP/tmpmsg + PROBE -l | grep "DOS +Win +W95 +FAT12 +FAT16 +HPFS" | grep -v "Ext'd" | grep -v "Extend" | sort >> $TMP/tmpmsg + echo >> $TMP/tmpmsg + echo "Which one would you like LILO to boot?" >> $TMP/tmpmsg + dialog --title "SELECT WINDOWS PARTITION" --no-collapse --inputbox \ +"`cat $TMP/tmpmsg`" 20 74 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + rm $TMP/tmpmsg + continue + fi + rm $TMP/tmpmsg + DOSPART="`cat $TMP/reply`" + checkp_dialog $DOSPART + if [ ! $? = 0 ]; then + continue; + fi + dialog --title "SELECT PARTITION NAME" --inputbox \ +"Now you must select a short, unique name for this partition. \ +You'll use this name if you specify a partition to boot at the \ +LILO prompt. 'Windows' might not be a bad choice. THIS MUST BE A \ +SINGLE WORD." 11 60 2> $TMP/reply + if [ $? = 1 -o $? = 255 ]; then + continue + fi + LABEL="`cat $TMP/reply`" + unset USE_LOADER + TABLE="`echo $DOSPART | cut -b1-8`" + if [ "`echo $TABLE | cut -b6-8`" = "hda" ]; then + USE_LOADER="no" + fi + if [ "`echo $TABLE | cut -b6-8`" = "sda" ]; then + if probe /dev/hda; then + USE_LOADER="yes" + else + USE_LOADER="no" + fi + fi + if [ "$USE_LOADER" = "no" ]; then + cat << EOF >> $TMP/lilo.conf +# Windows bootable partition config begins +other = $DOSPART + label = $LABEL + table = $TABLE +# Windows bootable partition config ends +EOF + else + cat << EOF >> $TMP/lilo.conf +# Windows bootable partition config begins +other = $DOSPART + label = $LABEL +# map-drive = 0x80 +# to = 0x81 +# map-drive = 0x81 +# to = 0x80 + table = $TABLE +# Windows bootable partition config ends +EOF + fi + else + dialog --title "CAN'T ADD WINDOWS PARTITION" --msgbox "You can't add \ +partitions unless you start over with a new LILO header." 6 60 + continue + fi + LNX="yes" + elif [ "$REPLY" = "Install" -o "$REPLY" = "Recycle" ]; then + if [ "$REPLY" = "Recycle" -a -r $T_PX/etc/lilo.conf ]; then + LNX="yes" + fi + if [ "$LNX" = "no" ]; then + dialog --title "CAN'T INSTALL LILO" --msgbox "LILO could not be \ +installed. If you have not created a LILO configuration file by defining \ +a new header and adding at least one bootable partition to it, you must do \ +so before installing LILO. If you were attempting to use an existing LILO \ +configuration file, it could not be found. Try making a new one." 9 70 + continue + else + if [ "$REPLY" = "Install" ]; then + if [ -r $TMP/lilo.conf ]; then + if [ -r $T_PX/etc/lilo.conf ]; then + mv $T_PX/etc/lilo.conf $T_PX/etc/lilo.conf.bak + fi + cp $TMP/lilo.conf $T_PX/etc/lilo.conf + chmod 644 $T_PX/etc/lilo.conf + fi + fi + installcolor; + fi + rm -f $TMP/tmpmsg $TMP/reply + break + elif [ "$REPLY" = "Skip" ]; then + rm -f $TMP/tmpmsg $TMP/reply + break + elif [ "$REPLY" = "View" ]; then + if [ -r $TMP/lilo.conf ]; then + dialog --title "YOUR NEW /etc/lilo.conf" --textbox "$TMP/lilo.conf" 22 70 + else + if [ -r /mnt/etc/lilo.conf ]; then + dialog --title "YOUR OLD /etc/lilo.conf" --textbox "/mnt/etc/lilo.conf" 22 70 + elif [ "$T_PX" = "/" -a -r /etc/lilo.conf ]; then + dialog --title "YOUR OLD /etc/lilo.conf" --textbox "/etc/lilo.conf" 22 70 + else + dialog --title "NO CONFIG FILE FOUND" --msgbox "Sorry, but you don't \ +have a LILO configuration file that can be viewed." 6 60 + fi + fi + elif [ "$REPLY" = "Help" ]; then + dialog --title "LILO INSTALLATION HELP" --textbox "$T_PX/var/log/setup/text.lilohelp" 22 68 + fi + done + |