On Fri, Feb 07, 2014 at 09:10:52AM +1100, Ben Finney wrote:
> * ‘/usr/sbin/grub-mkconfig’ exits with status 1, because
> * ‘/etc/grub.d/05_debian_theme’ exits with status 1, because
> * ‘test -d "${GRUB_PREFIX}"’ exits with status 1, because
> * ‘GRUB_PREFIX’ is empty.

I think you have a locally-modified /etc/grub.d/05_debian_theme (which
is a conffile), did not choose to apply the maintainer changes to that
file in 2.00-1, and thus have a version that still refers to
${GRUB_PREFIX}.  I've attached the current version of that file in
2.00-22 for comparison.

-- 
Colin Watson                                       [[email protected]]
#!/bin/sh
set -e

# grub-mkconfig helper script.
# Copyright (C) 2010  Alexander Kurtz <[email protected]>
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

# Include the GRUB helper library for grub-mkconfig.
. /usr/share/grub/grub-mkconfig_lib

# We want to work in /boot/grub/ only.
test -d /boot/grub; cd /boot/grub

# Set the location of a possibly necessary cache file for the background image.
# NOTE: This MUST BE A DOTFILE to avoid confusing it with user-defined images.
BACKGROUND_CACHE=".background_cache"

set_default_theme(){
        case $GRUB_DISTRIBUTOR in
                Ubuntu|Kubuntu)
                        # Set a monochromatic theme for Ubuntu.
                        echo "${1}set menu_color_normal=white/black"
                        echo "${1}set menu_color_highlight=black/light-gray"

                        if [ -e /lib/plymouth/themes/default.grub ]; then
                                sed "s/^/${1}/" 
/lib/plymouth/themes/default.grub
                        fi
                        ;;
                *)
                        # Set the traditional Debian blue theme.
                        echo "${1}set menu_color_normal=cyan/blue"
                        echo "${1}set menu_color_highlight=white/blue"
                        ;;
        esac
}

module_available(){
        local module
        for module in "${1}.mod" */"${1}.mod"; do
                if [ -f "${module}" ]; then
                        return 0
                fi
        done
        return 1
}

set_background_image(){
        # Step #1: Search all available output modes ...
        local output
        for output in ${GRUB_TERMINAL_OUTPUT}; do
                if [ "x$output" = "xgfxterm" ]; then
                        break
                fi
        done

        # ... and check if we are able to display a background image at all.
        if ! [ "x${output}" = "xgfxterm" ]; then
                return 1
        fi

        # Step #2: Check if the specified background image exists.
        if ! [ -f "${1}" ]; then
                return 2
        fi

        # Step #3: Search the correct GRUB module for our background image.
        local reader
        case "${1}" in
                *.jpg|*.JPG|*.jpeg|*.JPEG) reader="jpeg";;
                *.png|*.PNG) reader="png";;
                *.tga|*.TGA) reader="tga";;
                *) return 3;; # Unknown image type.
        esac

        # Step #4: Check if the necessary GRUB module is available.
        if ! module_available "${reader}"; then
                return 4
        fi

        # Step #5: Check if GRUB can read the background image directly.
        # If so, we can remove the cache file (if any). Otherwise the backgound
        # image needs to be cached under /boot/grub/.
        if is_path_readable_by_grub "${1}"; then
                rm --force "${BACKGROUND_CACHE}.jpeg" \
                        "${BACKGROUND_CACHE}.png" "${BACKGROUND_CACHE}.tga"
        elif cp "${1}" "${BACKGROUND_CACHE}.${reader}"; then
                set -- "${BACKGROUND_CACHE}.${reader}" "${2}" "${3}"
        else
                return 5
        fi

        # Step #6: Prepare GRUB to read the background image.
        if ! prepare_grub_to_access_device "`${grub_probe} --target=device 
"${1}"`"; then
                return 6
        fi

        # Step #7: Everything went fine, print out a message to stderr ...
        echo "Found background image: ${1}" >&2

        # ... and write our configuration snippet to stdout. Use the colors
        # desktop-base specified. If we're using a user-defined background, use
        # the default colors since we've got no idea how the image looks like.
        # If loading the background image fails, use the default theme.
        echo "insmod ${reader}"
        echo "if background_image `make_system_path_relative_to_its_root 
"${1}"`; then"
        if [ -n "${2}" ]; then
                echo "  set color_normal=${2}"
        fi
        if [ -n "${3}" ]; then
                echo "  set color_highlight=${3}"
        fi
        if [ -z "${2}" ] && [ -z "${3}" ]; then
                echo "  true"
        fi
        echo "else"
        set_default_theme "  "
        echo "fi"
}

# Earlier versions of grub-pc copied the default background image to /boot/grub
# during postinst. Remove those obsolete images if they haven't been touched by
# the user. They are still available under /usr/share/images/desktop-base/ if
# desktop-base is installed.
while read checksum background; do
        if [ -f "${background}" ] && [ "x`sha1sum "${background}"`" = 
"x${checksum}  ${background}" ]; then
                echo "Removing old background image: ${background}" >&2
                rm "${background}"
        fi
done <<EOF
648ee65dd0c157a69b019a5372cbcfea4fc754a5  debian-blueish-wallpaper-640x480.png
0431e97a6c661084c59676c4baeeb8c2f602edb8  debian-blueish-wallpaper-640x480.png
968ecf6696c5638cfe80e8e70aba239526270864  debian-blueish-wallpaper-640x480.tga
11143e8c92a073401de0b0fd42d0c052af4ccd9b  moreblue-orbit-grub.png
d00d5e505ab63f2d53fa880bfac447e2d3bb197c  moreblue-orbit-grub.png
f5b12c1009ec0a3b029185f6b66cd0d7e5611019  moreblue-orbit-grub.png
EOF

# Include the configuration of desktop-base if available.
if [ -f "/usr/share/desktop-base/grub_background.sh" ]; then
        . "/usr/share/desktop-base/grub_background.sh"
fi

# First check whether the user has specified a background image explicitly.
# If so, try to use it. Don't try the other possibilities in that case
# (#608263).
if [ -n "${GRUB_BACKGROUND+x}" ]; then
        set_background_image "${GRUB_BACKGROUND}" || set_default_theme
        exit 0
fi

# Next search for pictures the user put into /boot/grub/ and use the first one.
for background in *.jpg *.JPG *.jpeg *.JPEG *.png *.PNG *.tga *.TGA; do
        if set_background_image "${background}"; then
                exit 0
        fi
done

# Next try to use the background image and colors specified by desktop-base.
if set_background_image "${WALLPAPER}" "${COLOR_NORMAL}" "${COLOR_HIGHLIGHT}"; 
then
        exit 0
fi

# If we haven't found a background image yet, use the default from desktop-base.
case $GRUB_DISTRIBUTOR in
        Ubuntu|Kubuntu)
                ;;
        *)
                if set_background_image 
"/usr/share/images/desktop-base/desktop-grub.png"; then
                        exit 0
                fi
                ;;
esac

# Finally, if all of the above fails, use the default theme.
set_default_theme

Reply via email to