--- testing/liloconfig.20201223 2020-12-23 22:01:43.268714126 +0100 +++ testing/liloconfig.20201226 2020-12-26 22:31:01.070803743 +0100 @@ -22,6 +22,11 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # +# This script installs the lilo boot loader. +# The kernel used will be whatever the symlink /boot/vmlinuz points to, +# and if /boot/initrd.gz exists, that will be installed as the initrd. +# + TMP=/var/log/setup/tmp CONSOLETYPE=standard unset UTFVT @@ -249,6 +254,45 @@ return $RETVAL } +# This function scans for the Master Boot Record, +# if we are going to install lilo to the MBR. +# The output will be a file "$TMP/LILOMBR" with the device name written to it. +find_mbr() +{ + 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 + elif [ "$MAJOR" = "259" -a ! "$MBR_TARGET" = "/dev/hda" -a ! "$MBR_TARGET" = "/dev/hdc" -a ! "$MBR_TARGET" = "/dev/hde" -a ! "$MBR_TARGET" = "/dev/hdg" ]; then + if [ "$(echo $LINE | cut -f 4 -d ' ' | cut -b 1-4)" = "nvme" ]; then + MBR_TARGET="/dev/$(echo $LINE | cut -f 4 -d ' ' | cut -f 1 -d p)" + echo $MBR_TARGET > $TMP/LILOMBR + fi + fi + if dmidecode 2> /dev/null | grep -q QEMU 2> /dev/null ; then + if [ -r /dev/vda ]; then + MBR_TARGET=/dev/vda + echo $MBR_TARGET > $TMP/LILOMBR + fi + fi + fi + done +} + # 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. @@ -289,38 +333,7 @@ dialog --infobox "\nScanning partitions and generating /etc/lilo.conf..." 5 57 sleep 1 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 - elif [ "$MAJOR" = "259" -a ! "$MBR_TARGET" = "/dev/hda" -a ! "$MBR_TARGET" = "/dev/hdc" -a ! "$MBR_TARGET" = "/dev/hde" -a ! "$MBR_TARGET" = "/dev/hdg" ]; then - if [ "$(echo $LINE | cut -f 4 -d ' ' | cut -b 1-4)" = "nvme" ]; then - MBR_TARGET="/dev/$(echo $LINE | cut -f 4 -d ' ' | cut -f 1 -d p)" - echo $MBR_TARGET > $TMP/LILOMBR - fi - fi - if dmidecode 2> /dev/null | grep -q QEMU 2> /dev/null ; then - if [ -r /dev/vda ]; then - MBR_TARGET=/dev/vda - echo $MBR_TARGET > $TMP/LILOMBR - fi - fi - fi - done + find_mbr LILO_TARGET=$(cat $TMP/LILOMBR) elif [ "$TG" = "Root" ]; then LILO_TARGET=$(echo $ROOT_DEVICE) @@ -338,7 +351,6 @@ echo "append=\"$APPEND $UTFVT\"" >> $T_PX/etc/lilo.conf echo >> $T_PX/etc/lilo.conf #fi - if echo $LILO_TARGET | grep -q vda 2>/dev/null ; then echo "disk = /dev/vda bios=0x80 max-partitions=7" >> $T_PX/etc/lilo.conf fi @@ -452,7 +464,18 @@ LNXP="$(PROBE -l | grep "Linux$")" LNXP="$(echo $LNXP | cut -f 1 -d ' ' | sort)" if [ ! "$LNXP" = "" ]; then - cat << EOF >> $T_PX/etc/lilo.conf + if [ -r $T_PX/boot/initrd.gz ]; then + cat << EOF >> $T_PX/etc/lilo.conf +# Linux bootable partition config begins +image = $KERNEL + initrd = /boot/initrd.gz + #root = $ROOT_DEVICE + label = Linux + read-only +# Linux bootable partition config ends +EOF + else + cat << EOF >> $T_PX/etc/lilo.conf # Linux bootable partition config begins image = $KERNEL root = $ROOT_DEVICE @@ -460,6 +483,7 @@ read-only # Linux bootable partition config ends EOF + fi echo "Linux - (Linux partition)" >> $T_PX/boot/boot_message.txt fi # DEAD CODE, BUT IN CASE OS/2 MAKES A COMEBACK! @@ -668,6 +692,8 @@ ARCHTYPE=i386 if [ -r $T_PX/vmlinuz ]; then KERNEL=/vmlinuz +elif [ -r $T_PX/boot/vmlinuz-generic ] && [ -r $T_PX/boot/initrd.gz ]; then + KERNEL=/boot/vmlinuz-generic elif [ -r $T_PX/boot/vmlinuz ]; then KERNEL=/boot/vmlinuz elif [ -r $T_PX/usr/src/linux/arch/$ARCHTYPE/boot/bzImage ]; then @@ -763,33 +789,7 @@ 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 - if dmidecode 2> /dev/null | grep -q QEMU 2> /dev/null ; then - if [ -r /dev/vda ]; then - MBR_TARGET=/dev/vda - echo $MBR_TARGET > $TMP/LILOMBR - fi - fi - fi - done + find_mbr 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. \ @@ -965,7 +965,18 @@ continue fi LABEL="$(cat $TMP/reply)" - cat << EOF >> $TMP/lilo.conf + if [ -r $T_PX/boot/initrd.gz ]; then + cat << EOF >> $TMP/lilo.conf +# Linux bootable partition config begins +image = $KERNEL + initrd = /boot/initrd.gz + #root = $LINUX_PART + label = $LABEL + read-only # Partitions should be mounted read-only for checking +# Linux bootable partition config ends +EOF + else + cat << EOF >> $TMP/lilo.conf # Linux bootable partition config begins image = $KERNEL root = $LINUX_PART @@ -973,6 +984,7 @@ read-only # Partitions should be mounted read-only for checking # Linux bootable partition config ends EOF + fi 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