суббота, 6 ноября 2010 г.

Ubuntu 10.10 Maverick Meerkat. Настройка grub

Адаптируем заметку Ubuntu Karmic. Настройка Grub к последней версии дистрибутива — Maverick Meerkat.

Касательно файла /etc/default/grub все осталось без изменений, необходимо изменить указанные ниже настройки:
  • GRUB_TIMEOUT=5 — время показа меню, 5 секунд.
  • раскомментировать GRUB_DISABLE_LINUX_RECOVERY="true" для отключения recovery пунктов меню.

Для отключения вызова memtest'а с выводом на последовательную консоль необходимо привести файл /etc/grub.d/20_memtest86+ в следующий вид:
#!/bin/sh
set -e

if [ -f /usr/lib/grub/grub-mkconfig_lib ]; then
  . /usr/lib/grub/grub-mkconfig_lib
  LX=linux16
elif [ -f /usr/lib/grub/update-grub_lib ]; then
  . /usr/lib/grub/update-grub_lib
  LX=linux
else
  # no grub file, so we notify and exit gracefully
  echo "Cannot find grub config file, exiting." >&2
  exit 0
fi

# We can't cope with loop-mounted devices here.
case ${GRUB_DEVICE_BOOT} in
  /dev/loop/*|/dev/loop[0-9]) exit 0 ;;
esac

prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")"

if test -e /boot/memtest86+.bin ; then
  MEMTESTPATH=$( make_system_path_relative_to_its_root "/boot/memtest86+.bin" )
  echo "Found memtest86+ image: $MEMTESTPATH" >&2
  cat << EOF
menuentry "Memory test (memtest86+)" {
EOF
  printf '%s\n' "${prepare_boot_cache}"
  cat << EOF
    $LX $MEMTESTPATH
}
EOF
fi
На закомментированные строки в конце файла (начинающиеся с #) можно не обращать внимания. Код, который следует поместить в файл /etc/grub.d/08_windows_7, представлен ниже. Новый файл должен иметь исполняемый бит.
#! /bin/sh
set -e

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib

. ${libdir}/grub/grub-mkconfig_lib

if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then
  # missing os-prober and/or linux-boot-prober
  exit 0
fi

OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
if [ -z "${OSPROBED}" ] ; then
  # empty os-prober output, nothing doing
  exit 0
fi

for OS in ${OSPROBED} ; do
  DEVICE="`echo ${OS} | cut -d ':' -f 1`"
  LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
  LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

  if [ "x${LONGNAME}" = "xWindows 7 (loader)"  ]; then
    echo "Found Windows 7" >&2
    cat << EOF
menuentry "Windows 7" {
EOF
    save_default_entry | sed -e "s/^/\t/"
    prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
    cat << EOF
  chainloader +1
}
EOF
  fi
done
Теперь необходимо внести изменения в файл /etc/grub.d/30_os-prober, что он не находил Windows 7. Файл большой, поэтому приведем только часть кода, начинающуюся со 149 строки. Необходимо добавить в файл последние 4 приведенные здесь строки:
for OS in ${OSPROBED} ; do
  DEVICE="`echo ${OS} | cut -d ':' -f 1`"
  LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
  LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
  BOOT="`echo ${OS} | cut -d ':' -f 4`"

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

  if [ "x${LONGNAME}" = "xWindows 7 (loader)"  ]; then
    echo "Found Windows 7, skipping" >&2
    continue
  fi
После внесения все изменений необходимо отдать команду sudo update-grub:
user@host:/etc/grub.d$ sudo update-grub
Generating grub.cfg ...
Found Windows 7
Found linux image: /boot/vmlinuz-2.6.35-22-generic
Found initrd image: /boot/initrd.img-2.6.35-22-generic
Found memtest86+ image: /memtest86+.bin
Found Windows 7, skipping
done
После этого загрузочное меню должно принять вид
  • Windows 7
  • Ubuntu
  • Memtest

По умолчанию будет загружаться Windows 7.

Комментариев нет:

Отправить комментарий