diff --git a/ChangeLog b/ChangeLog index 04deaeb04..be4d19e37 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-06-23 Robert Millan + + * util/update-grub_lib.in (font_path): New function. Determine wether + a font file can be found and, if so, echo the GRUB path to it. + + * util/update-grub.in: Handle multiple terminals depending on user + input, platform availability and font file presence. Propagate + variables of our findings to /etc/grub.d/ children. + + * util/grub.d/00_header.in: Handle multiple terminals, based on + environment setup by update-grub. + 2007-06-23 Robert Millan * conf/i386-pc.rmk (pkgdata_MODULES): Add serial.mod. diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in index 633676211..cfe4ed4b2 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -20,6 +20,7 @@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ +platform=@platform@ # for convert_system_path_to_grub_path() . ${libdir}/grub/update-grub_lib @@ -33,23 +34,27 @@ set timeout=${GRUB_TIMEOUT} EOF if [ "x${GRUB_DRIVE}" = "x" ] ; then : ; else - cat << EOF -set root=${GRUB_DRIVE} -EOF + echo "set root=${GRUB_DRIVE}" fi -# Prefer system path for space reasons (/boot/grub might be a very small -# partition in case of OpenFirmware, etc). -for i in /usr/share/grub/unifont.pff /boot/grub/unifont.pff ; do - if grub_path=`convert_system_path_to_grub_path $i` ; then - cat << EOF +if [ "x${GRUB_FONT_PATH}" = "x" ] ; then : ; else + echo "font ${GRUB_FONT_PATH}" +fi -font ${grub_path} +case ${platform}:${GRUB_TERMINAL} in + pc:gfxterm) cat << EOF set gfxmode=640x480 insmod gfxterm insmod vbe -terminal gfxterm EOF - break - fi -done + ;; + *:serial) + if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then + echo "Warning, requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used." >&2 + GRUB_SERIAL_COMMAND=serial + fi + echo "${GRUB_SERIAL_COMMAND}" + ;; +esac + +echo "terminal ${GRUB_TERMINAL}" diff --git a/util/update-grub.in b/util/update-grub.in index c1ecf38a5..76801b854 100644 --- a/util/update-grub.in +++ b/util/update-grub.in @@ -27,11 +27,12 @@ sysconfdir=@sysconfdir@ grub_prefix=`echo /boot/grub | sed ${transform}` grub_cfg=${grub_prefix}/grub.cfg update_grub_dir=${sysconfdir}/grub.d +platform=@platform@ grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}` grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` -# for convert_system_path_to_grub_path() +# for convert_system_path_to_grub_path(), font_path() . ${libdir}/grub/update-grub_lib if [ "x$UID" = "x" ] ; then @@ -89,12 +90,42 @@ if test -f ${sysconfdir}/default/grub ; then . ${sysconfdir}/default/grub fi +# if ${GRUB_TERMINAL} is set, check it has a sane value. if undefined, +# fallback to our default +case ${platform}:${GRUB_TERMINAL} in + pc:) GRUB_TERMINAL=gfxterm ;; + pc:console | pc:serial) ;; + ieee1275:) GRUB_TERMINAL=ofconsole ;; + ieee1275:ofconsole) ;; + *:) GRUB_TERMINAL=console ;; + *:*) echo "Invalid terminal \"${GRUB_TERMINAL}\"" >&2 ; exit 1 ;; +esac + +# check for terminals that require fonts +case ${GRUB_TERMINAL} in + gfxterm) + if GRUB_FONT_PATH=`font_path` ; then : ; else + # fallback to console + GRUB_TERMINAL=console + fi + ;; +esac + +# does our terminal support utf-8 ? +case ${platform}:${GRUB_TERMINAL} in + *:gfxterm) ;; + *:*) + # make sure all our children behave in conformance with ascii.. + export LANG=C + ;; +esac + # These are defined in this script, export them here so that user can # override them. -export GRUB_DEVICE GRUB_FS GRUB_DRIVE GRUB_DRIVE_BOOT GRUB_DRIVE_BOOT_GRUB +export GRUB_DEVICE GRUB_FS GRUB_DRIVE GRUB_DRIVE_BOOT GRUB_DRIVE_BOOT_GRUB GRUB_FONT_PATH # These are optional, user-defined variables. -export GRUB_DEFAULT GRUB_TIMEOUT GRUB_DISTRIBUTOR GRUB_CMDLINE_LINUX +export GRUB_DEFAULT GRUB_TIMEOUT GRUB_DISTRIBUTOR GRUB_CMDLINE_LINUX GRUB_TERMINAL GRUB_SERIAL_COMMAND exec > ${grub_cfg}.new chmod 444 ${grub_cfg}.new diff --git a/util/update-grub_lib.in b/util/update-grub_lib.in index 938eafc1f..6a4624532 100644 --- a/util/update-grub_lib.in +++ b/util/update-grub_lib.in @@ -89,3 +89,23 @@ convert_system_path_to_grub_path () echo ${drive}${relative_path} } + +font_path () +{ + if [ "x${GRUB_FONT_PATH}" = "x" ] ; then : ; else + echo "${GRUB_FONT_PATH}" + return 0 + fi + + # Prefer system path for space reasons (/boot/grub might be a very small + # partition in case of OpenFirmware, etc). + for i in /usr/share/grub/unifont.pff /boot/grub/unifont.pff ; do + if path=`convert_system_path_to_grub_path $i` ; then + GRUB_FONT_PATH="${path}" + echo "${GRUB_FONT_PATH}" + return 0 + fi + done + + return 1 +}