diff --git a/ChangeLog b/ChangeLog index 93c72c43a..5a33f734d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2007-06-06 Robert Millan + + * util/update-grub_lib.in (convert_system_path_to_grub_path): Abort if + file doesn't exist, or if it is in a filesystem grub can't read. + + * util/update-grub.in: Set fallback for GRUB_FS check to "unknown". Do + not abort if GRUB_DRIVE could not be defined. Rearrange generated + header comment to fit in 80 columns when the variables are resolved. + + * util/grub.d/00_header.in: Only set root variable when GRUB_DRIVE + could be identified by update-grub. Remove redundant check for + unifont.pff existance (since convert_system_path_to_grub_path now + handles that). + 2007-06-04 Robert Millan * conf/i386-efi.rmk (grub_probe_SOURCES): Add partmap/apple.c. diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in index ea551d8fb..633676211 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -30,13 +30,18 @@ if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi cat << EOF set default=${GRUB_DEFAULT} set timeout=${GRUB_TIMEOUT} +EOF + +if [ "x${GRUB_DRIVE}" = "x" ] ; then : ; else + cat << EOF set root=${GRUB_DRIVE} EOF +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 test -e $i && grub_path=`convert_system_path_to_grub_path $i` ; then + if grub_path=`convert_system_path_to_grub_path $i` ; then cat << EOF font ${grub_path} diff --git a/util/update-grub.in b/util/update-grub.in index 81d677d83..c1ecf38a5 100644 --- a/util/update-grub.in +++ b/util/update-grub.in @@ -74,10 +74,10 @@ GRUB_DEVICE="`grub-probe --target=device /`" # Filesystem for the device containing our userland. Used for stuff like # choosing Hurd filesystem module. -GRUB_FS="`grub-probe --target=fs /`" +GRUB_FS="`grub-probe --target=fs / 2> /dev/null || echo unknown`" -# GRUB path to / -GRUB_DRIVE="`grub-probe --target=drive /`" +# GRUB path to /. Only used for "set root=". Not critical. +GRUB_DRIVE="`grub-probe --target=drive /`" || true # GRUB path to /boot GRUB_DRIVE_BOOT="`convert_system_path_to_grub_path /boot`" @@ -105,8 +105,8 @@ cat << EOF # # DO NOT EDIT THIS FILE # -# It is automaticaly generated by $0 using templates from ${update_grub_dir} -# and settings from ${sysconfdir}/default/grub +# It is automaticaly generated by $0 using templates +# from ${update_grub_dir} and settings from ${sysconfdir}/default/grub # EOF diff --git a/util/update-grub_lib.in b/util/update-grub_lib.in index 6393fff32..b2a871a1d 100644 --- a/util/update-grub_lib.in +++ b/util/update-grub_lib.in @@ -24,6 +24,8 @@ grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` convert_system_path_to_grub_path () { dir=$1 + # Abort if file doesn't exist + test -e $dir dir=`readlink -f $dir` drive=`${grub_probe} -t drive $dir` @@ -31,6 +33,9 @@ convert_system_path_to_grub_path () return 1 fi + # Abort if file is in a filesystem we can't read + ${grub_probe} -t fs $dir > /dev/null 2>&1 + num=`stat -c %d $dir` relative_path="" while : ; do