Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Процесс начальной загрузки системы

Мультики для Grub'а

Алексей Дмитриев, 13 февраля 2010

Введение

Обычно я не очень страдаю стремлением украсить свои рабочие столы и приложения. Однако вид загрузчика Grub в его первозданном виде приводит меня в уныние. Даже логотип Виндоуз и то лучше. Думаю, я не один такой, поэтому в этой статье расскажу о своих методах сделать заставку Grub'а привлекательной.

Для начала нужно договориться о терминологии. Сегодня уже официально существуют две версии Grub'а: Просто Grub 0.97, он же Grub Legacy (традиционный, наследственный) и Grub2 - написанный с нуля загрузчик со значительно более широкими возможностями, но, увы, с неудобными и сложными настройками. В данной статье речь пойдет исключительно о старом, традиционном, унаследованном Grub'е Legacy. Для простоты я не стану больше тратить прилагательные, и буду называть его просто Grub.

Простота, универсальность и легкость установки этого загрузчика, даже по сравнению с его предшественником - LILO, снискали ему широкую популярность. Практически с момента появления начались попытки придать ему красивый вид. На этом пути Линукс-сообщество разделилось на два направления.

Первое направление возглавил дистрибутив SuSe, а позже к нему примкнула Mandriva. Программист Steffen Winterfeldt приспособил для Grub'а знаменитое меню с анимированными пингвинами.

Знаменитое меню с пингвинами

Оно уже несколько лет работало в LILO у той же SuSe. Для этого пришлось писать специальный патч для Grub'а, получивший известность как gfxmenu, а пропатченный им загрузчик иногда называется Grub-gfxmenu. Не знаю, взяла ли Mandriva патч у SuSe, или разработала свой, но сами заставки, называемые message, у этих двух дистрибутивов взаимозаменяемы.

Второе направление, во главе с Debian и множеством дистрибутивов на его основе - Ubuntu и прочие, создало свой собственный патч Grub'а, умеющий показывать в качестве заставки многоцветные изображения, называемые splashimage.

Пример картинки splashimage

Эти картинки просто скачиваются из Сети и помещаются в директорию /boot/grub/. Картинки должны иметь расширение .xpm.gz. Чтобы Grub начал показывать их в качестве заставок, нужно вписать в файл /boot/grub/menu.lst первой строкой: splashimage=(hd0,Х)/boot/grub/имя_картинки.xpm.gz. А если вы накачали кучу разных splashimage'ей, то заведите для них папку в той же директории и назовите ее, скажем, images. Тогда строка в файле /boot/grub/menu.lst будет чуть длиннее: splashimage=(hd0,Х)/boot/grub/images/имя_картинки.xpm.gz. Вместо буквы Х поставьте в скобках номер вашего раздела минус 1. Так, если ваш дистрибутив Линукс находится в разделе /dev/hda2, то нужно написать (hd0,1). Такова нотация Grub'а - он считает разделы с нуля, а не с первого.

Еще небольшая тонкость насчет картинок. Некоторые картинки не позволяют увидеть подсветку строк в загрузочном меню Grub'а. Она сливается по цвету с картинкой. На этот случай нужно определить цвета фона и переднего плана меню при помощи еще двух строк:

foreground  = ffffff 
background  = 000000

Это шестнадцатеричные значения цветов по системе RRGGBB (красный- зеленый - голубой).

Пример будет означать, что передний план (foreground) белый (ffffff), а фон - черный (000000). Если нужно наоборот, увидеть картинку на белом фоне, то следует написать:

foreground  = 000000
background  = ffffff

Это будет черным по белому.

Суммируя все сказанное, вид общей секции вашего файла /boot/grub/menu.lst станет выглядеть примерно так:

splashimage=(hd0,2)/boot/grub/images/имя_картинки.xpm.gz
foreground  = 000000
background  = ffffff
default 1
timeout 10

Если попадутся строки типа nosplash или nosplashimage, то их нужно удалить или закомментировать (#). Также нужно поступить и со строками, определяющими цвета обычного меню, типа: color green/black white/black

Главный недостаток splashimage - их нельзя анимировать. Зато можно создавать свои собственные картинки. Их размер должен быть 640х480 пикселей, не более 14 цветов. Подойдет и фотография, которую нужно будет обработать до необходимых размеров в Gimp'е или Photoshop'е. Затем конвертировать в формат xpm в Gimp'е и сжать gz'ипом. Наилучшие картинки получаются в оттенках серого цвета.

На этом закончим со splashimage и перейдем к основной части нашего рассказа - gfxmenu.

Как установить анимированную заставку в свою систему

Загрузчиком Grub-gfxmenu комплектуются дистрибутивы SuSe и Mandriva. Но если вы не пользуетесь данными дистрибутивами, то не спешите искать патч gfxmenu для Grub'а, патчить его и устанавливать в свой дистрибутив. Можно поступить проще. Вот как делаю я.

Первым делом создаю нормальной программой партиционирования два новых раздела: загрузочный (400Мб), с LABEL=zagruz, и временный, размером 4-5Гб, для установки самого дистрибутива.

Затем устанавливаю дистрибутив (SuSe или Mandriva), таким образом, чтобы загрузочный раздел монтировался как /boot, а временный как /. Когда программа установки спросит, куда устанавливать загрузчик, следует ответить - в MBR. Не помешает по окончании установки перезагрузить компьютер и убедиться, что новый дистрибутив нормально загружается. При этом не имеет значения, загружаются ли Windows и все ваши рабочие дистрибутивы - это мы всегда поправим.

Затем нужно отредактировать в свежеустановленном дистрибутиве файл /boot/grub/menu.lst. Обычно в этом файле столько всяких закомментированных пояснений, что самого текста не видно. Поэтому я просто удаляю весь текст из этого файла и вставляю туда текст из аналогичного файла своего рабочего дистрибутива, не забыв только поменять номер root раздела. Вот пример:

default 1
timeout 20
gfxmenu (hd0,8)/message

title Windows on (/dev/sda2)
  map (hd0,0) (hd0,1)
  map (hd0,1) (hd0,0)
  rootnoverify (hd0,1)
  makeactive
  chainloader +1

title AltLinux (/dev/sda5)
  root (hd0,4)
  kernel /boot/vmlinuz root=/dev/sda5 ro vga=791
  initrd /boot/initrd.img

title  Debian GNU/Linux, kernel 2.6.26-2-686
  root (hd0,7)
  kernel /boot/vmlinuz-2.6.26-2-686 root=/dev/sda8 ro vga=791 quiet
  initrd /boot/initrd.img-2.6.26-2-686


title openSUSE 11.0
    root (hd0,8)
    kernel /vmlinuz-2.6.25.5-1.1-default root=...и т.д.
    initrd /initrd-2.6.25.5-1.1-default

Внимание: Присмотритесь к третьей строке: gfxmenu (hd0,8)/message. По идее она должна была бы выглядеть как gfxmenu (hd0,8)/boot/message. Но поскольку у нас директория /boot вынесена в отдельный загрузочный раздел /dev/sda9 (или (hd0,8) в нотации Grub), то и файл анимированной заставки message окажется в корневой директории загрузочного раздела. Эта третья строчка и последний абзац "title openSUSE 11.0" вот все, что осталось от первоначального файла menu.lst установленного дистрибутива.

Теперь следует проверить новый загрузчик со всеми установленными операционными системами. Если все в порядке, то можно продолжать. Если нет, то нужно найти ошибку в файле menu.lst.

"Но, позвольте, я не вижу никаких анимированных пингвинов!" - скажет нетерпеливый читатель. Действительно, если в openSUSE 10 пингвины появлялись время от времени, по закону случайных чисел, то в openSUSE 11.0 они не появляются никогда, хотя включены в состав файла /boot/message. Наша задача - найти их!

Перезагружаемся в свой рабочий дистрибутив.

Вписываем новый загрузочный раздел в файл /etc/fstab:

/dev/sda9  /mnt/zagruz  ext3  rw,user,noauto,dev,exec 0 0 

Монтируем раздел /dev/sda9 любым привычным вам способом.

Файл message является архивом CPIO и может быть распакован командой cpio. У этой команды чудной синтаксис, поэтому будьте внимательны. Я не стану пересказывать здесь ман этой команды (который есть в Интернете), просто объясню основные моменты.

Команда cpio копирует содержимое из архива CPIO в нужную директорию, или, наоборот, копирует файлы из нужной директории в архив CPIO. При этом она не умеет создавать директории сама. Поэтому порядок действий такой:

Открываем консоль с правами root.

Создаем в текущей директории временный каталог pingu:

# mkdir pingu

Переходим в новый каталог:

# cd pingu

Вводим в командную строку следующее заклинание:

pingu# cpio -iv < /mnt/zagruz/message

16x16.fnt
back.jpg
en.hlp
en.tr
gfxboot.cfg
init
languages
pabout.txt
panim.jpg
panim_a.jpg
pback.jpg
phead.jpg
timer_a.jpg
841 blocks

Опция -i копирует файлы из архива /mnt/zagruz/message в текущую директорию pingu. Опция -v выводит список скопированных файлов.

Нас интересует только файл gfxboot.cfg (пятый сверху).

Открываем его в вашем любимом текстовом редакторе с правами root.

Находим девятнадцатую по счету строку сверху (считая и пустые):

; penguin theme likelihood (in percent, -1 = auto)
penguin=0

Она переводится как: "Вероятность появления темы пингвинов (в процентах, параметр -1 означает автоматическое случайное появление)". Пока вероятность равна нулю (penguin=0), то есть тема пингвинов не появляется никогда, всегда появляется тема SUSE. Мы должны изменить строку так:

; penguin theme likelihood (in percent, -1 = auto)
penguin=100

И сохранить. И все!

Осталось запаковать архив обратно. Для этого служит команда:

pingu# ls | cpio -ov > message

16x16.fnt
back.jpg
en.hlp
en.tr
gfxboot.cfg
gfxboot.cfg~
init
languages
pabout.txt
panim_a.jpg
panim.jpg
pback.jpg
phead.jpg
timer_a.jpg
841 blocks

Опция -o означает копировать все файлы со стандартного вывода в архив message. Замечу, что архив message окажется в текущей директории pingu. А нам нужно переместить его в /mnt/zagruz. Но и находящийся там неисправленный message тоже желательно сохранить на всякий случай. Поэтому сначала переименуем старый архив:

pingu# mv /mnt/zagruz/message /mnt/zagruz/message-old

Теперь переместим или скопируем новый исправленный архив на место:

pingu# mv message /mnt/zagruz/message

Проверим:

pingu# ls /mnt/zagruz

backup_mbr                   message-old
boot                         symsets-2.6.25.5-1.1-default.tar.gz
config-2.6.25.5-1.1-default  symtypes-2.6.25.5-1.1-default.gz
grub                         symvers-2.6.25.5-1.1-default.gz
initrd                       System.map-2.6.25.5-1.1-default
initrd-2.6.25.5-1.1-default  vmlinux-2.6.25.5-1.1-default.gz
lost+found                   vmlinuz
memtest.bin                  vmlinuz-2.6.25.5-1.1-default
message

Оба архива на месте. Но загружаться будет именно исправленный архив message.

Осталось удалить временный каталог pingu:

pingu# cd ..

Это мы вернулись в родительский каталог.

# rm -R pingu

Удалили временный каталог pingu.

Теперь перезагружаемся, чтобы проверить, появилось ли меню с пингвинами.

Появилось, естественно. Можно удалять раздел /dev/sda10, где у нас расположен весь дистрибутив SUSE (кроме его директории /boot). А если вам нужен SUSE, то можно и не удалять, решать вам.

Что касается анимированного меню с пингвинами, то в openSUSE 11.0 оно хуже, чем было в openSUSE 10. Во-первых, оно не русифицировано, во-вторых, надписи насчет клавиш F1, F2, F3 как-то неудачно расположены на самом виду, в-третьих, оно почти на 100 Кб больше.

Поэтому я помещу уже переделанное русское анимированное меню с пингвинами из openSUSE 10 на своем сайте, и вы сможете его скачать.

Если у вас нет дистрибутива SUSE, то все вышеописанное можно проделать и с Mandriva One 2009, а архив message, уже готовый к употреблению, скачать в "Читалке Линукс".

Другие способы установить gfxmenu

Пользователи Debian, Ubuntu и им подобных дистрибутивов. Вы счастливые люди! Ваши дистрибьюторы позаботились о вас, и в ваших репозиториях имеется и Grub-gfxmenu и всякие анимированные заставки, по темам ваших дистрибутивов. Вы можете установить все это непосредственно в ваш дистрибутив. Как это сделать, подробно описано в статье "GfxBoot или красивая заставка для меню GRUB".

Ну, и, наконец, можно самому попытаться пропатчить Grub 0.97, скачать message и все наладить. Я плохо разбираюсь в таких вещах, поэтому советовать ничего не буду.

Заключение

Жаль, что анимированное меню с пингвинами, насколько я смог узнать, единственное в своем роде. Несколько анимированных меню того же автора находятся на его сайте, но они не идут ни в какое сравнение с пингвинами.

Если вы найдете в Сети другие, более современные мультики для Grub'а, то сообщите, пожалуйста, мне.




Средняя оценка 5 при 1 голосовавших