cppmm 20.12.2010 22:22

Tips & tricksУкрашаем процесс загрузки в Debian GNU/Linux

Продолжаю допиливать свой нетбук. В этот раз руки добрались до украшения процесса загрузки.

Железо: Asus EeePC 701 4G.
ОС: Debian GNU/Linux Lenny

Я не люблю доки типа HOWTO и т.п., потому что зачастую при малейшем изменении исходных параметров они становятся неюзабельными. Поэтому постараюсь описать не руководство к действию, а весь процесс настройки, чтобы, так сказать, показать способ решения различных задач, связанных с настройкой на конкретном примере. Статья ориентирована на новичков, опытным пользователям большая часть описанного ниже должна быть известна и так.


Начнём с grub'а. Стандартная debian'овская картинка - это, конечно, хорошо, но к моему нетбуку по имени skynet как-то не к лицу, если можно так выразиться. Потому берём в руки руководство grub2(я выбрал именно его, когда устанавливал систему на свой нетбук) и начинаем дорабатывать напильником. Ну и разумеется, не забываем про debian-way. Заглянув в /boot/grub/grub.cfg, можно найти там путь к фоновому изображению: background_image /share/images/desktop-base/moreblue-orbit-grub.png. Путь этот начинается не в корне. Дело в том, что парой строчек раньше в моём конфиге есть такая запись:

set root=(hd0,7)

В моём случае - это раздел с точкой монтирования /usr/. Он и монтируется в момент отображения меню, поэтому и путь выглядит так. Если у вас /usr/ не вынесен на отдельный раздел, то и путь будет выглядеть, как обычно: /usr/share/images/desktop-base/moreblue-orbit-grub.png.

У любого нормального человека первым позывом бует просто подменить эту картинку на свою и всё. Но я старый дебианщик, поэтому знаю, что так делать нельзя. :) Дело в том, что если пойти таким путём при первом же апгрейде картинка сменится на изначальную. Ну и плюс, торопиться не надо, картинка там не простая. Она должна быть в формате png или tga и размером 640x480(говорят, можно увеличить до 1024x768, но мне это не надо). В общем, нахожу интересную картинку, в GIMP'е быстренько дорабатываю напильником до нужного размера, сохраняю в tga и кидаю в директорию с остальными картинками. Теперь надо вписать её в конфиг. Опять же не стоит торопиться. Если внимательно почитать /boot/grub/grub.cfg, можно в самом начале заметить надпись большими буквами о том, что не надо редактировать этот файл, потому что он генерируется автоматически с помощью утилиты grub-update, используя скрипты из /etc/grub.d/ и настройки из /etc/default/grub. Во-первых, это официальный подход к настройке grub2, а во-вторых, в дебиане такой подход почти ко всем настройкам системы. И это на самом деле очень удобно - можно не бояться, что очередное обновление затронет ваши настройки и при этом практически исключается вероятность поймать какой-нибудь глюк, если разработчики программы в новой версии изменят или удалят какую-нибудь прописанную у вас в опциях настройку: скрипты это дело обработают и установят правильный конфиг. Поэтому идём в /etc/grub.d/.

1
2
<root># ls
00_header 05_debian_theme 10_hurd 10_linux 30_os-prober 40_custom README</root>



В README английски по чёрному написано, что все исполняемые в данной директории файлы воспринимаются как shell-скрипты, генерирующие конфиг и выполняются в порядке очередности по убывающей: 00_header заполняет первую часть grub.cfg, 05_debian_theme следующую и т.д. Кстати, в grub.cfg от каждого из этих скриптов имеется комментарий (они пишут, какую часть они сгенерировали). Там же в README вкратце рассказано, за что отвечают эти скрипты. 00_header - это основные установки. Нас он не интересует в данном случае. Ну, единственное, можно подправить строку set gfxmode=640x480, заменив её на set gfxmode=${GRUB_GFXMODE}. После этого эту опцию можно контролировать через /etc/default/grub (В "ванильном" grub'е так и есть, причины этого изменения в debian'е я честно говоря не знаю - если интересно, надо идти на packages.debian.org и читать там changelog'и к пакету). Но особо интересен для нас файл 05_debian_theme. Чтобы сохранить на всякий случай стандартные настройки, делаем так:

1
2
<root># cp 05_debian_theme 05_cppmm_theme
</root><root># chmod a-x 05_debian_theme</root>



Теперь можно смело править 05_cppmm_theme. Именно этот скрипт будет применяться при создании grub.cfg. Для начала, меняем строку с изображением. У меня получилось так:

1
for i in {/boot/grub,/usr/share/images/desktop-base}/terminator.{png,tga} ; do



Далее правим цвета. В моём случае это:

1
2
3
4
if background_image `make_system_path_relative_to_its_root ${bg}` ; then
set color_normal=green/black
set color_highlight=white/black
else



Как не трудно догадаться, параметры отвечают за обычный текст и подсвеченный (выбранный). Сами цвета стандартные. Первый отвечает за цвет текста, второй за фон. Фон в обоих случаях надо оставить чёрным, иначе любой другой цвет перекроет вашу картинку.

Вот, собственно, и всё. Осталось только записать всё это дело в конфиг, выполнив команду update-grub. Теперь после ребута можно будет полюбоваться красивой менюшкой.

Далее на повестке дня скрытие лога загрузки. Оговорюсь сразу, лог загрузки - это очень полезно и очень нужно. И ни на десктопе, ни на сервере я никогда его не отключу. Да и на нетбуке я в grub'е оставляю отдельный пункт для обычной загрузки на всякий случай. А дистрибутивы, которые скрывают его по умолчанию, подлежат, имхо, преданию анафеме и всячески мной порицаемы, потому как прятать от пользователя полезную, а иногда и жизненно необходимую информацию - это вселенское зло. Но на своём нетбуке я уже достаточно отладил систему, чтобы с чистой совестью
скрыть этот лог.

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

Как обычно, ставлю его apt-get'ом и отмечаю для себя, что в зависимостях идёт пакетик usplash-theme-debian. Это полезно (ниже поясню). Ну и плюс надо немного подправить наш grub. В файле /etc/default/grub надо привести к вот такому виду переменную GRUB_CMDLINE_LINUX="quiet vga=786 splash". Параметры quiet и splash, я думаю, и так понятны. А вот vga=786 - это режим, в котором будет отдавать картинку ядро. Цифра соответсвует разрешению и глубине цвета. В моём случае это 640х480х24. Чтобы подобрать под себя гуглите по "grub vga modes".
Настройка простейшая - в /etc/usplash.conf надо вписать разрешение, в котором вы хотите видеть заставку. У меня нетбук, поэтому 640х480. Один момент. Так как выполняется это всё при загрузке, а в этом процессе задействован initrd, после каждого изменения в usplash следует выполнять команду update-initramfs -u.

И тут есть ещё один момент. Если вы до этого использовали настройку консольных шрифтов типа console-data или console-cyrillic, придётся всё это отключить. Они меняют режим отображения и сбивают работу usplash, порождая неприятное моргание. Причём я даже как-то изначально не мог понять, в чём проблема. Пришлось воспользоваться режимом отладки usplash (во время загрузки в grub выбираем нужный пункт меню и жмём "e", это даст возможность подправить параметры запуска, там убираем параметры quiet и splash) и жмём Ctrl+x - будет виден лог загрузки.

Если и это не помогло, можно включить в /etc/default/bootlogd ведение логов. Они будут сохраняться в /var/log/boot.

В идеале больше граблей быть не должно. Во всяком случае, я не встретил. Но как-то не вяжется моя мрачноватая картинка заставки груба и светло-голубая тема debian'а для usplash. Решено было собрать свою тему. Тут-то нам и пригодится тот пакетик, который пришёл по зависимостям с usplash. а точнее, его исходники. Есть разные способы достать их - можно скачать ручками, можно использовать dget, мне больше всего по вкусу стягивать их apt-get'ом. Для этого в /etc/apt/sources.list помимо прочего должны быть прописаны источники исходников пакетов:

1
deb-src http://ftp.debian.org/debian/ lenny main non-free contrib



Командуем (можно из-под пользователя) apt-get update && apt-get source usplash-theme-debian и получаем в текущей директории исходники пакета. Так как я собираю просто тему(по сути это один файл), я решил не делать для него пакета, а положить, как обычную настройку. Поэтому нас интересует всё, кроме директории debian. Её можно удалить вообще. Итого у нас останется несколько файлов: background.svg cmap.gif Makefile progress.png theme.c theme.in themesetup.sh. Makefile - это правила сборки, theme.c, theme.in - исходники, themesetup.sh - вспомогательный скрипт для конвертирования, всё остальное - изображения. Далее действуем топорным способом.
Просто меняем все эти изображения на свои. Тут всё, в принципе, понятно, стоит пояснить лишь по поводу файла progress.png. Там можно положить картинку (например, надпись) с прозрачным фоном. Эта надпись и будет служить прогрессбаром. Куда интереснее, чем просто полосочка. После этого командуем make и ждём (для этого в системе должен быть установлен набор компиляторов и сопутсвующих утилит; для начала можно просто скомандовать apt-get install make gcc, а про всё остальной сама программа make скажет, если не будет хватать).
После завершения сборки среди прочих временных файлов будет и файл debian-theme.so. Вот он-то нам и нужен.

Далее понадобятся рутовые права.
Переименовываем этот файл и копируем в /usr/lib/usplash/. Переименовать обязательно, потому как в той директории уже есть файл с именем debian-theme.so. Если вы его просто замените, при ближайшем апдейте пакета, он затрётся стандартным.

Теперь надо показать системе, что нам нужна именно эта тема, а не какая-либо другая. Здесь на помощь придёт утилита update-alternatives. О подробностях её работы можно узнать из мана. Я расскажу только вкратце. Она помогает следить за различными версиями программ, библиотек и прочих файлов в системе и позволяет выбирать нужную в данный момент, не удаляя другие. Реализует она это с помощью системы симлинков.

Итак, создаём группу usplash и добавляем в неё стандартную тему:

1
update-alternatives --intall /usr/lib/usplash/usplash-artwork.so usplash.so /usr/lib/usplash/debian-theme.so 10



Далее добавляем в эту группу нашу тему:

1
update-alternative --install /usr/lib/usplash/usplash-artwork.so usplash.so /usr/lib/usplash/cppmm-usplash.so 20



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

Ну и последние штрихи:

1
2
update-initramfs -u
shutdown -r now



Наслаждаемся.

Вот так оно получилось у меня:


Что-то у меня видео не отображается. Вот ссылка
P.S. В дальнейшем собираюсь перепелить slim.


Тэги: boot debian grub2 Usplash
+ 13 -
Похожие Поделиться

thebeetlebum 20.12.2010 22:35 #
На ееепцах еще картинку в биосе можно поменять;-)
Uzix 20.12.2010 22:43 #
Немного белой магии - и тыц!
cppmm 20.12.2010 22:50 #
Да у меня как бы тоже шаманских танцев не потребовалось. :)

А что касается скрина, то моя цель была в данном случае полностью скрыть лог, а не украсить. К слову, если убрать в грубе splash и quit будет что-то похожее.
Dark_SS 21.12.2010 00:39 #
Ткнёте носом в how-to?Научите?
thebeetlebum 21.12.2010 01:19 #
framebuffer
wiz 20.12.2010 22:56 #
А ещё можно воткнуть SSD и забыть про процесс загрузки вообще...
exelens 20.12.2010 22:57 #
поясни
thebeetlebum 20.12.2010 22:59 #
c ssd система очень быстро грузиться. Загрузка настолько быстра что не видно картинки:)
cppmm 20.12.2010 23:04 #
Вот про такое не слышал ни разу. С чего бы ему так быстро грузиться?
thebeetlebum 20.12.2010 23:07 #
с того что ssd, особенно если btrfs -o ssd и система оптимизирована. На нетбуке и так много грузить не надо, можно много добиться.
cppmm 20.12.2010 23:10 #
Очень сильно сомневаюсь.
Какая бы там не была fs, скорость чтения + скорость выполнения(тут проц совсем не из сильных) своё возьмут.
И что подразумевается под "много грузить не надо"? У меня тут обычный linux, с обычной системой. Грузится всё, как на простом компе - slim, потом xfce4.
thebeetlebum 20.12.2010 23:14 #
Ну мы сейчас спорить будет, а толку? Есть факты, серьезно, можете почитать соответствующие статьи. Сам подумываю о ssd. При процессе загрузки камень не сильно нагружается. Конечно чем он быстрей, тем лучше, но при загрузке самое слабое место это диск. Можете сравнить сколько система из спящего режима грузится(когда информация из оперативки) и из гибернации(когда на диске).
cppmm 20.12.2010 23:21 #
Вот из гибернации как раз задействован только диск. Образ оперативки с него считывает и загружается в ОЗУ. За счёт этого и скорость.
А при обычной загрузке проц отрабатывает достаточно сильно, если он такой как на нетбуке.
Плюс, не забываем про стартующие сервисы(сеть, логи, dbus в фоне и прочее). Всё это требует времени.
Ну и если уж на то пошло, в моей модели eeepc стоят как раз ssd-флешки, а не винчестер. Вот только места там всего 4 гига, потому и не выделял я раздел под своп. Но как видите, загрузка всё-равно требует нескольких секунд. Ни о каких мгновениях речи идти не может.
Википедия по этому поводу вот что думает: "меньше время загрузки системы, переход в состояние готовности после включения питания - около 20 секунд (for int21h);" Опять же не мгновение.
Если вы поделитесь ссылками на статьи, где говорится о том, что с ssd можно загрузиться за мгновение, буду премного благодарен.
thebeetlebum 20.12.2010 23:30 #
к сожалению у меня нет ssd, я только задумываюсь о покупке. Не могу найти ssd на SLC маленьких. Мне 16Гб хватит с головой, найти не могу такие(
wiz 21.12.2010 06:52 #
Не заморачивайся на SLC. У тебя комп два раза сменится прежде чем ты MLC сточишь до неюзабельности.
thebeetlebum 21.12.2010 07:46 #
Мне кажется тут ты прав, учитывая те факты что работа с ssd будет оптимизирована под него и в добавок будет использоваться обычный hdd, для изменяемых-больших файлов)
wiz 21.12.2010 06:55 #
Ну и если уж на то пошло, в моей модели eeepc стоят как раз ssd-флешки, а не винчестер. Вот только места там всего 4 гига

Ключевой момент. Там чем больше объём, тем выше скорость т.к. внутри стоит RAID контроллер, который размазывает по нескольким чипам. Соответственно чем больше чипов, тем больше скорость. Сейчас вполне доступно взять 64 гига — представь, что у тебя всё грузится в 64/4 раз быстрее, как минимум. Теперь понятней профит?
cppmm 21.12.2010 07:20 #
Хм. Ну если так.
Мне не грозит. В 401-ых она впаяна - не заменить.
wiz 21.12.2010 07:24 #
Да, это печально... Придётся тогда украшать (:

А точно впаяна и без слотов для дополнительных дисков?
cppmm 21.12.2010 07:37 #
Да. Во всяком случае в отсеке для дисков и памяти можно заменить только память. Может, там можно глубже докопаться, но я не разбирал. По спецификациям в таких нетбуках бывает либо впаяная, либо mini PCIe. Но вторые появились позже. Я свой брал практически сразу после их выхода. Одни из первых(я такую штуку ждал ещё с первых анонсов).
wiz 20.12.2010 23:19 #
Там кроме скорости чтения ещё скороть доступа огромная. Всё вместе это даёт практически сразу десктоп после биоса. У меня на сраном целероне с 1м ддром убунта тупо скопированая на ssd начала грузиться в один момент. И это было год назад. А сейчас они ещё в два раза быстрее.
cppmm 20.12.2010 23:35 #
Вот на этом нетбуке целерон, ssd в качестве диска и 512 ddr2. Что-то даже с дефолтным урезанным Xandros'ом оно грузилось не мгновенно. Про полноценную систему я уже и не говорю.
wiz 21.12.2010 06:50 #
Насколько я помню там у него паршивенький ssd из первых поколений.
wiz 20.12.2010 23:21 #
На ext4 с дефолтными настройками тоже всё шустро.
cppmm 20.12.2010 23:01 #
Видимо, имеется ввиду спящий режим.
SSD у меня воткнут, но я использую его под другие цели. Выделять лишние 500 метров под свопфайл неохота. Да и так не напряжно. Он у меня не полчаса грузится.
wiz 20.12.2010 23:17 #
нет, не спящий.
ZED 21.12.2010 02:17 #
У мну ssd от интела, долго настраивал плимут, а в итоге картинка мелькает меньше секунды :( Теперь сам биос грузится дольше ОС. Софт запускается мгновенно. То что ставят в нетбуки это гамно типа обычных флешек. Нормальные диски только у intel и OCZ.
wiz 21.12.2010 06:51 #
корсар тоже ок
dr_lo 21.12.2010 05:50 #
надо было все-таки прикрутить аудио-дорожку к видео. вот эту
http://www.youtube.com/watch?v=pCZ6h28mixI&feature=related
cppmm 21.12.2010 07:24 #
О. Спасибо за идею. Можно будет вырезать кусочек на несколько секунд и воткнуть в качестве стартового звука в xfce4. :)
blackraven 21.12.2010 12:03 #
GRUB_CMDLINE_LINUX="quit vga=786 splash". Параметры quit и splash, я думаю, и так понятны

Может я конечно гоню (нет под рукой груба для проверки), но параметр вроде бы должен быть quiet.

И неплохо было бы выделить в тексте подобные строчки, и отделить абзацы - читать невозможно совершенно...
cppmm 22.12.2010 01:19 #
Может я конечно гоню (нет под рукой груба для проверки), но параметр вроде бы должен быть quiet.

Спасибо, поправил. Опечатался.
И неплохо было бы выделить в тексте подобные строчки, и отделить абзацы - читать невозможно совершенно...

Так лучше? Или ещё где подправить? Если что в личку напиши, сделаем.
blackraven 22.12.2010 11:39 #
Написал :)
philosoft 22.12.2010 13:24 #
Параметр vga, кстати устарел, о чём ядро добросовестно сообщает при запуске, вместо него стоит использовать video.
cppmm 22.12.2010 18:34 #
А где об этом почитать?
У меня ядро на него не ругается. Настройки grub'а я брал в основном тут.
philosoft 23.12.2010 13:14 #
Не знаю, где об этом почитать, гугление не показала конкретных источников, но показало, что ругается на этот параметр не ядро, а второй граб.
FalleN 21.12.2010 18:10 #
а можно мануал по установке debian'a на eee pc..
помню, хотел поставить, но возникли какието косяки
cppmm 22.12.2010 01:15 #