apt-get falha em qualquer instalação: “dpkg: error processing grub-pc”

2

Ao instalar qualquer programa com o apt-get install, recebo o seguinte erro:

Generating grub.cfg ...
/etc/grub.d/00_header: 234: /etc/grub.d/00_header: Bad substitution
dpkg: error processing grub-pc (--configure):
 subprocess installed post-installation script returned error exit status 2

Então, eu dei uma olhada no /etc/grub.d/00_header, a linha 234 é "cat & lt; & lt; EOF".

make_timeout ()
{
    cat << EOF
if [ "${recordfail}" = 1 ]; then
  set timeout=${GRUB_RECORDFAIL_TIMEOUT:0}
else
  set timeout=
fi
EOF
}

Eu também descobri que em / boot / grub, há dois arquivos relevantes:

ll /boot/grub/grub*
-r--r--r-- 1 root root 4247 Jul 26 09:57 /boot/grub/grub.cfg
-r-------- 1 root root 1293 Jul 26 09:57 /boot/grub/grub.cfg.new

O arquivo grub.cfg.new termina na seguinte linha (59):

  

terminal_output gfxterm

Embora o grub.cfg tenha o seguinte conteúdo da linha 59:

terminal_output gfxterm
if [ "${recordfail}" = 1 ]; then
  set timeout=-1
else
  set timeout=2
fi
### END /etc/grub.d/00_header ###

O set timeout me diz que este arquivo grub.cfg.new estava sendo compilado do arquivo 00_header. Então parece que algo está impedindo o dpkg de compilar o cabeçalho no novo arquivo grub.cfg. O processo é interrompido, deixando o arquivo grub.cfg.new inacabado.

Como posso corrigir esse erro?

    
por Francois Stark 26.07.2013 / 10:10

1 resposta

0

Eu tinha dois servidores idênticos e apenas um estava dando esse erro. Eu simplesmente copiei o arquivo 00_header do servidor de trabalho.

Aqui estão os detalhes do ambiente

Kernel:

Linux 3.2.0-53-generic #81-Ubuntu SMP Thu Aug 22 21:01:03 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

/ etc / lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"

Aqui está o arquivo /etc/grub.d/00_header que eu usei

#! /bin/sh
set -e

# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009,2010  Free Software Foundation, Inc.
#
# 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/>.

transform="s,x,x,"

prefix="/usr"
exec_prefix="${prefix}"
datarootdir="${prefix}/share"
locale_dir='echo ${GRUB_PREFIX}/locale | sed ${transform}'
grub_lang='echo $LANG | cut -d . -f 1'

. "${datarootdir}/grub/grub-mkconfig_lib"

# Do this as early as possible, since other commands might depend on it.
# (e.g. the 'loadfont' command might need lvm or raid modules)
for i in ${GRUB_PRELOAD_MODULES} ; do
  echo "insmod $i"
done

if [ "x${GRUB_DEFAULT}" = "x" ] ; then GRUB_DEFAULT=0 ; fi
if [ "x${GRUB_DEFAULT}" = "xsaved" ] ; then GRUB_DEFAULT='${saved_entry}' ; fi
if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi
if [ "x${GRUB_GFXMODE}" = "x" ] ; then GRUB_GFXMODE=auto ; fi

if [ "x${GRUB_DEFAULT_BUTTON}" = "x" ] ; then GRUB_DEFAULT_BUTTON="$GRUB_DEFAULT" ; fi
if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_entry}' ; fi
if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi

cat << EOF
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
EOF
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
    cat <<EOF
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
   set default="${GRUB_DEFAULT_BUTTON}"
else
   set default="${GRUB_DEFAULT}"
fi
EOF
else
    cat <<EOF
set default="${GRUB_DEFAULT}"
EOF
fi
cat <<EOF
if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function recordfail {
  set recordfail=1
  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}

function load_video {
EOF
if [ -n "${GRUB_VIDEO_BACKEND}" ]; then
    cat <<EOF
  insmod ${GRUB_VIDEO_BACKEND}
EOF
else
    # Insert all available backends; GRUB will use the most appropriate.
    have_video=0;
    for backend in $(cat "${GRUB_PREFIX}/video.lst"); do
        have_video=1;
        cat <<EOF
  insmod ${backend}
EOF
    done
    if [ x$have_video = x0 ]; then
        echo "true"
    fi
fi
cat <<EOF
}

EOF

serial=0;
gfxterm=0;
for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do
    if [ xserial = "x$x" ]; then
        serial=1;
    fi
    if [ xgfxterm = "x$x" ]; then
        gfxterm=1;
    fi
done

if [ "x$serial" = x1 ]; then
    if ! test -e "${GRUB_PREFIX}/serial.mod" ; then
        echo "Serial terminal not available on this platform." >&2 ; exit 1
    fi

    if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then
        grub_warn "Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used."
        GRUB_SERIAL_COMMAND=serial
    fi
    echo "${GRUB_SERIAL_COMMAND}"
fi

if [ "x$gfxterm" = x1 ]; then
    # Make the font accessible
    prepare_grub_to_access_device '${grub_probe} --target=device "${GRUB_FONT_PATH}"'

    cat << EOF
if loadfont 'make_system_path_relative_to_its_root "${GRUB_FONT_PATH}"' ; then
  set gfxmode=${GRUB_GFXMODE}
  load_video
  insmod gfxterm
EOF

# Gettext variables and module
if [ "x${LANG}" != "xC" ] && [ -d "${locale_dir}" ] ; then
    prepare_grub_to_access_device $(${grub_probe} --target=device ${locale_dir}) | sed -e "s/^/  /"
  cat << EOF
  set locale_dir=($root)$(make_system_path_relative_to_its_root ${locale_dir})
  set lang=${grub_lang}
  insmod gettext
EOF
fi

cat <<EOF
fi
EOF
fi

case x${GRUB_TERMINAL_INPUT} in
  x)
    # Just use the native terminal
  ;;
  x*)
    cat << EOF
terminal_input ${GRUB_TERMINAL_INPUT}
EOF
  ;;
esac

case x${GRUB_TERMINAL_OUTPUT} in
  x)
    # Just use the native terminal
  ;;
  x*)
    cat << EOF
terminal_output ${GRUB_TERMINAL_OUTPUT}
EOF
  ;;
esac

if [ "x$gfxterm" = x1 ]; then
    if [ "x$GRUB_THEME" != x ] && [ -f "$GRUB_THEME" ] \
        && is_path_readable_by_grub "$GRUB_THEME"; then
        echo "Found theme: $GRUB_THEME" >&2
        prepare_grub_to_access_device '${grub_probe} --target=device "$GRUB_THEME"'
        cat << EOF
insmod gfxmenu
EOF
        themedir="'dirname "$GRUB_THEME"'"
        for x in "$themedir"/*.pf2 "$themedir"/f/*.pf2; do
            if [ -f "$x" ]; then
                cat << EOF
loadfont ($root)'make_system_path_relative_to_its_root $x'
EOF
            fi
        done
        if [ x"'echo "$themedir"/*.jpg'" != x"$themedir/*.jpg" ] || [ x"'echo "$themedir"/*.jpeg'" != x"$themedir/*.jpeg" ]; then
            cat << EOF
insmod jpeg
EOF
        fi
        if [ x"'echo "$themedir"/*.png'" != x"$themedir/*.png" ]; then
            cat << EOF
insmod png
EOF
        fi
        if [ x"'echo "$themedir"/*.tga'" != x"$themedir/*.tga" ]; then
            cat << EOF
insmod tga
EOF
        fi

        cat << EOF
set theme=($root)'make_system_path_relative_to_its_root $GRUB_THEME'
EOF
    elif [ "x$GRUB_BACKGROUND" != x ] && [ -f "$GRUB_BACKGROUND" ] \
            && is_path_readable_by_grub "$GRUB_BACKGROUND"; then
        echo "Found background: $GRUB_BACKGROUND" >&2
        case "$GRUB_BACKGROUND" in 
            *.png)         reader=png ;;
            *.tga)         reader=tga ;;
            *.jpg|*.jpeg)  reader=jpeg ;;
            *)             echo "Unsupported image format" >&2; exit 1 ;;
        esac
        prepare_grub_to_access_device '${grub_probe} --target=device "$GRUB_BACKGROUND"'
        cat << EOF
insmod $reader
background_image -m stretch 'make_system_path_relative_to_its_root "$GRUB_BACKGROUND"'
EOF
    fi
fi

make_timeout ()
{
    cat << EOF
if [ "${recordfail}" = 1 ] ; then
  set timeout=${GRUB_RECORDFAIL_TIMEOUT:--1}
else
EOF
    if [ "x" != "x" ] ; then
        if [ "x" != "x" ] ; then
            timeout=""
            style=""
        else
            # Handle the deprecated GRUB_HIDDEN_TIMEOUT scheme.
            timeout=""
            if [ "x" != "x0" ] ; then
                grub_warn "$(gettext "Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.")"
            fi
            if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
                style="hidden"
            else
                style="countdown"
            fi
        fi
        if [ "x${style}" = "xcountdown" ] ; then
            verbose=" --verbose"
        else
            verbose=
        fi
        cat << EOF
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=${style}
    set timeout=${timeout}
EOF
        if [ "x${style}" != "xmenu" ] ; then
            cat << EOF
  # Fallback hidden-timeout code in case the timeout_style feature is
  # unavailable.
  elif sleep${verbose} --interruptible ${timeout} ; then
    set timeout=0
EOF
        fi
        cat << EOF
  fi
EOF
    else
        cat << EOF
  set timeout=
EOF
    fi
    cat << EOF
fi
EOF
}

if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
    cat <<EOF
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
EOF
make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_STYLE_BUTTON}"
echo else
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" "${GRUB_TIMEOUT_STYLE}"
echo fi
else
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" "${GRUB_TIMEOUT_STYLE}"
fi

if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ] && [ "x$GRUB_BUTTON_CMOS_CLEAN" = "xyes" ]; then
    cat <<EOF
cmosclean $GRUB_BUTTON_CMOS_ADDRESS
EOF
fi

# Play an initial tune
if [ "x${GRUB_INIT_TUNE}" != "x" ] ; then
  echo "play ${GRUB_INIT_TUNE}"
fi

if [ "x${GRUB_BADRAM}" != "x" ] ; then
  echo "badram ${GRUB_BADRAM}"
fi
    
por user257986 13.03.2014 / 20:13