#!/bin/bash # $Id$ source include/hwdetection.sh : ${INSTALL_ROOT="/mnt/magellan"} create_device_map() { local chroot [[ ! -z ${INSTALL_ROOT} ]] && chroot=chrooted # create device.map ${chroot} grub --batch --no-floppy --no-config-file --device-map=/boot/grub/device.map /dev/null } install_grub() { local chroot [[ ! -z ${INSTALL_ROOT} ]] && chroot=chrooted # update grub ${chroot} grub --batch --no-floppy << EOF 1> /dev/null 2> /dev/null root $(convert_device ${PARTITION_DISK_BOOT}) setup $(convert_device ${PARTITION_DISK_BOOT} | sed "s:,[0-9]::") quit EOF return 0 } convert_device() { local device="$1" local root_part= # extract device type (block) and major number for root drive local major_minor=$(ls -Ll ${device} | awk '{if ($6 < 64) printf("%c%d0", $1, $5); else printf("%c%d1", $1, $5)}') # find the matching BIOS device for bios_drive in $(grep -v '^#' ${INSTALL_ROOT}/boot/grub/device.map | awk '{print $2}') do bios_major_minor=$(ls -Ll ${bios_drive} 2>/dev/null | awk '{if ($6 < 64) printf("%c%d0", $1, $5); else printf("%c%d1", $1, $5)}') if [[ ${major_minor} = ${bios_major_minor} ]] then # we found it root_drive=$(grep ${bios_drive} ${INSTALL_ROOT}/boot/grub/device.map | awk '{print $1}') root_part=$(ls -Ll ${device} | awk '{print $6}') root_part=$(( ${root_part} % 16 - 1 )) break fi done drive=$(echo ${root_drive} | sed "s:)$:,${root_part}):") echo ${drive} } add_grub_conf() { echo "$@" >> ${INSTALL_ROOT}/boot/grub/grub.conf } create_grub_conf() { local splashimage if [[ -z ${PARTITION_DISK_BOOT} ]] then export PARTITION_DISK_BOOT="${PARTITION_DISK_ROOT}" fi # create an empty one :> ${INSTALL_ROOT}/boot/grub/grub.conf add_grub_conf "default 0" add_grub_conf "timeout 10" add_grub_conf "" # our splashimage splashimage="magellan.xpm.gz" # forcefully use gfxsplash [[ ! -f ${INSTALL_ROOT}/boot/${splashimage} ]] && cp data/magellan-black2.xpm.gz ${INSTALL_ROOT}/boot/${splashimage} if [[ -f ${INSTALL_ROOT}/boot/${splashimage} ]] then add_grub_conf "# splash image" # old logo #add_grub_conf "splashimage /boot/magellan.xpm.gz" #add_grub_conf "foreground FFFFFF" #add_grub_conf "background 1B456B" # the new one add_grub_conf "splashimage $(convert_device ${PARTITION_DISK_BOOT})/boot/${splashimage}" add_grub_conf "foreground FFFFFF" add_grub_conf "background 253861" add_grub_conf "" else add_grub_conf "# some pretty colors" add_grub_conf "color cyan/blue white/blue" add_grub_conf "" fi add_grub_conf "title Magellan-Linux $(< ${INSTALL_ROOT}/etc/mageversion) ($(readlink ${INSTALL_ROOT}/boot/vmlinuz | sed s:kernel-::))" add_grub_conf "root $(convert_device ${PARTITION_DISK_BOOT})" add_grub_conf "kernel /boot/$(readlink ${INSTALL_ROOT}/boot/vmlinuz) root=$(get_uuid ${PARTITION_DISK_ROOT})" add_grub_conf "initrd /boot/$(readlink ${INSTALL_ROOT}/boot/initrd)" # add an empty line as spacer between other boot entries add_grub_conf "" } install_bootloader() { create_device_map >&2 echo 25 create_grub_conf >&2 echo 50 install_grub >&2 echo 100 } install_bootloader