Библиотека сайта rus-linux.net
Мультики для 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'а, то сообщите, пожалуйста, мне.