2009-02-11
Об удобстве настройки и интерактивных возможностях grub много хороших слов написал Владимир Попов, и повторяться я не буду — заинтересованные могут для начала прочесть это и вот это. А я попробую рассказать о том, как обрести эти удобства и возможности в нашем Zenwalk'е. И тут, как всегда, открываются два пути.
Первый — тот, что описан в соответствующем How-to из Zenwalk Wiki. То есть — взять какой-либо LiveCD, в котором в качестве загрузчика используется grub (например, RIP, также описанный Владимиром), и, следуя вышеуказанному документу, установить grub с него. Процедура несложная (хотя в How-to она описана несколько невнятно), но требует скачивания дополнительного iso'шника и его записи. Хотя сам по себе RIP в жизни и пригодится, это может оказаться обременительным.
Второй же путь — более прост: воспользоваться готовым пакетом. Правда, ни в официальном репозитории Zenwalk'а, ни в ZUR мы такого пакета не найдём. Но тут самое время вспомнить о старшей родственнице, Slackware, и отправиться в хранилище её пакетов, официальных или неофициальных, где искомый grub легко отыскивается поиском по всем версиям — последняя его версия там на данный момент grub-0.97-i486-2.tgz для Slackware аж 10.2, но в данном случае это значения не имеет.
Вероятно, если тщательно порыться по сети, то можно обнаружить пакет и посвежее, например, что-нибудь из пре-релизов 2-й версии, или собрать таковой самому. Однако не уверен, что это стоит делать: «пред-первые» grub'ы годами служили верой и правдой. А вот как себя поведут «пред-вторые» — пока не ясно. А загрузчик — не та штука, с которой хотелось бы экспериментировать.
Так что скачиваем ранее найденный пакет, несмотря на его преклонный возраст, с подходящего зеркала и устанавливаем его традиционным способом, по-патриковски:
$ installpkg grub-0.97-i486-2.tgzРазумеется, это и последующие действия выполняются от лица суперпользователя. И вот еще о чем следует помнить: если, следуя рекомендациям разработчиков grub, мы вынесли каталог /boot на самостоятельный раздел (что подразумевается и в дальнейшем), не монтируемый автоматически при старте системы, то перед отдачей команды installpkg его следует подмонтировать вручную:
$ mount /dev/sda1 /bootНа этом, однако, дело не кончается, ибо всё, что мы после этого имеем, — это всего лишь несколько исполняемых файлов с префиксом grub* в каталоге /sbin и «проект» будущего конфига — /boot/grub/menu.lst.sample.
Установочного скрипта пакет grub для Slackware не имеет, и дальнейшие процедуры придётся выполнить собственноручно.
Для начала логика подсказывает нам, что к установке нашего загрузчика имеет отношение команда /sbin/grub-install, которую мы и запускаем:
$ /sbin/grub-install /dev/sda1Аргументом команды выступает имя файла целевого устройства. А об опциях команды можно узнать таким образом:
$ /sbin/grub-install --helpИз доступных опций интерес могут представлять две:
--root-directory=DIRс помощью которой можно сохранить копию grub'а в произвольном каталоге, указанном в качестве значения опции, и
--grub-shell=FILEзадающая шелл, который будет использоваться grub'ом в качестве оболочки при интерактивной работе. Впрочем, по умолчанию в качестве таковой применяется нечто похожее на bash, чего вполне достаточно.
Однако вернёмся к установке. В результате наших действий каталог /boot/grub заполняется серией файлов «полуторной» стадии, *_stage1_5, обеспечивающих «понимание» grub'ом соответствующих файловых систем, как нативных для Linux (e2fs_stage1_5, reiserfs_stage1_5, xfs_stage1_5, jfs_stage1_5), так и иных (ufs2_stage1_5, ffs_stage1_5, minix_stage1_5, iso9660_stage1_5). И с тех, и с других, однако, grub может напрямую загружать ядра соответствующих ОС, не прибегая к «загрузке по цепочке», вынужденно используемой им при загрузке Windows.
Завершающий штрих установки grub'а — запуск его самого на предмет перезаписи загрузочного сектора:
$ /sbin/grubПосле этого перед нами появляется приглашение командной строки его bash-подобного шелла:
grub>где можно вводить нужные команды из числа встроенных (полный их список выдаётся по нажатию табулятора при пустой строке) с необходимыми агрументами — именами дисковых устройств и их разделов, причем в обоих случаях работает автодополнение и предложение альтернатив (посредством того же табулятора).
При задании аргументов команд необходимо помнить об особенностях номенклатуры устройств в grub'е и синтаксисе его шелла:
grub> root (hd0,0)Аргумент в примере дан, исходя из предположения, что под каталог /boot отведен 1-й раздел 1-го диска. А команда
grub> setup (hd0)запишет инициирующий код в MBR первого винчестера.
Всё, теперь командой
grub> quitможно выйти из grub-окружения. И перезагрузиться? Нет, торопиться не надо, как говорил товарищ Саахов. Потому что установить-то grub мы установили, но еще не настроили его должным образом.
Это делается редактированием конфига — простого текстового файла /boot/grub/menu.lst. Ранее я уже упоминал, что прототип его в виде /boot/grub/menu.lst.sample у нас имеется. Так что берём его за основу
$ cp /boot/grub/menu.lst.sample /boot/grub/menu.lstи результат копирования, то есть собственно конфиг menu.lst, загружаем в любимый текстовый редактор, например:
$ nano -w /boot/grub/menu.lst
Отступление: в некоторых дистрибутивах (например, в Gentoo) конфигурационный файл grub'а так и называется — grub.conf. Могут различаться также детали внутреннего устройства, большая или меньшая полнота комментариев и приводимых примеров и тому подобные мелочи. Мы будем придерживаться того, как это подаётся в Slackware и модифицируется в Zenwalk'е, но большинство сказанного ниже имеет силу для любых систем, использующих grub.
Прототип нашего будущего конфига, в полном соответствие с заветами Великого Патрика, хорошо прокомментирован (комментарии предваряются привычным символом #), так что разобраться в нём будет нетрудно. Для тех, кто совсем не разумеет вражьей мовы, остановлюсь на самых существенных моментах.
Конфиг нашего загрузчика неявным образом разделяется на две секции. Первая из них описывает общие настройки grub'а, и потому мантайнер пакета, некто Acrux, резонно назвал её
### Global settingsВ menu.lst других дистрибутивов она может не иметь никакого названия вообще.
Вторая же секция может распадаться на несколько субсекций, каждая из которых описывает свой вариант загрузки (не обязательно разных операционных систем).
«Глобальная» секция в нашем образцовом конфиге начинается с вещей совсем не обязательных — строки, описывающей загрузку фонового изображения
splashimage (hd0,0)/boot/grub/slack_nalug.xpm.gzи закрытых комментариями строк, определяющих расцветку меню.
# foreground = FFFFFF # background = AAAAAAОчевидно, что без всего этого можно обойтись. Или — заменить своей картинкой и цветами. Картинка в формате xpm должна иметь размер, кажется, 640x480 и быть сжатой gzip'ом. Что же до цветов, то они не обязаны задаваться своими шестнадцатеричными кодами, можно использовать и соответствующие английские слова. Например, в конфигах загрузчиков многих дистрибутивов они определяются так:
color cyan/blue white/blueСтоль же не обязательны и строки
## shaded text #shade 1Как это выглядит «в натуре», я проверить не удосужился.
А вот строка
timeout 5в большинстве случаев очень желательна. Если её нет (или в качестве значения тай-аута указан 0), загрузка происходит немедленно, без предоставления пользователю времени для выбора её варианта. Конечно, при единственной загружаемой системе с неизменными параметрами это оправданно, но всё-таки обычно grub используется как мультисистемный загрузчик, и потому время «на подумать» (в секундах) тут будет не лишним.
Наконец, завершающая «глобальную» секцию строка
default 0указывает, какой из вариантов загрузки будет происходить по умолчанию, при отсутствии пользовательского выбора. По аналогии с именованием устройств легко догадаться, что значение 0 соответствует варианту, описываемому в первой субсекции второй секции — такое же умолчание используется и в том случае, если строка default вообще отсутствует.
Между первой и второй секциями Acrux поместил два блока весьма полезных комментариев. Во-первых, это таблица соответствия именования устройств в grub и в Linux:
## Linux Grub ## ====================== ## /dev/hda (hd0) ## /dev/hda1 (hd0,0) ## /dev/hdb (hd1) ## /dev/hdb1 (hd1,0) ## /dev/fd0 (fd0)То есть примерно то, о чем говорилось выше.
Вторая же вставка — таблица кодов, соответствующих различным режимам фреймбуфера:
### FRAMEBUFFER RESOLUTION SETTINGS ## +————————————————————————-+ ## | 640x480 800x600 1024x768 1280x1024 ## ——+—————————————————————— ## 256 | 0x301=769 0x303=771 0x305=773 0x307=775 ## 32K | 0x310=784 0x313=787 0x316=790 0x319=793 ## 64K | 0x311=785 0x314=788 0x317=791 0x31A=794 ## 16M | 0x312=786 0x315=789 0x318=792 0x31B=795 ## +————————————————————————-+Если мы желаем в ходе загрузки любоваться неким изображением (обычно это логотип дистрибутива, в нашем случае — дельфин), а в дальнейшем иметь режим графической консоли, то один из кодов (в любой форме), соответствующих определенному разрешению и глубине цвета, нужно будет указать в качестве значения соответствующего параметра ядра, о чём будет сказано чуть ниже.
Со строки
## Default menu entriesнеявным образом начинается вторая секция. В нашем примере она имеет две субсекции, описывающие варианты типовой загрузки Slackware. Первая (в соответствии с определённым ранее параметром default) выглядит так:
title Slackware GNU/Linux kernel (hd0,0)/boot/vmlinuz vga=0x315 root=/dev/hda1 roПервая строка (title) — это просто имя варианта загрузки, под которым он будет фигурировать в меню grub'а. Желательно, чтобы оно было осмысленным, как в нашем примере.
Вторая строка (kernel) описывает собственно загружаемое ядро и передаваемые ему параметры. Первое значение её — абсолютный путь к файлу образа ядра (vmlinuz — одно из традиционно принятых для него имен в Linux'е), отсчитываемый от имени устройства в нотации grub'а. Очевидно, что в данном примере каталог /boot не лежит на отдельном разделе, а входит в общее дерево корневого каталога.
Далее — параметр vga, определяющий видеорежим при загрузке и, в дальнейшем, в консоли. В примере это режим фреймбуфера с разрешением 800x600 и глубиной цвета 16 млн (т.н. 24-битный цвет). Однако можно выбрать любое подходящее значение из таблицы (так, для LCD-дисплеев можно определить разрешение, соответствующее физическому разрешению матрицы), опустить этот параметр (тогда загрузка будет происходить в текстовом режиме) или задать значение ask (запрос режима перед загрузкой). Для первого раза я рекомендовал бы опустить параметр vga, ибо без него меньше шансов получить ошибку при старте системы.
Параметр root определяет устройство, несущее корневую систему для уже загруженного ядра, и потому даётся в нотации Linux: grub своё дело сделал, и его правила больше не действуют. В примере это первый раздел первого IDE-диска, то есть тот же самый (hd0,0), который выступал в качестве корневого для grub при указании пути к загружаемому ядру.
Наконец, параметр ro означает read only: в процессе загрузки корневая файловая система монтируется обычно в режиме «только для чтения»; доступной для записи она становится в ходе инициализации системы, когда происходит монтирование всех файловых систем, описанных в файле /etc/fstab с теми опциями, которые там приведены. Считается, что монтирование в режиме read only может сберечь корневую файловую систему от повреждений. Так это или нет — науке не известно, но вреда от параметра ro нет, хотя он, разумеется, не обязателен.
Вторая субсекция определена на случай пересборки ядра. Если нет уверенности, что новое ядро загрузится и будет работать нормально (а полной уверенности в этом быть не может до тех пор, пока сам не убедишься на практике), то резонно было бы сохранить возможность загрузки ядра старого, проверенного. Что и достигается нижеследующими строками:
title Slackware GNU/Linux (old) kernel (hd0,0)/boot/vmlinuz.old root=/dev/hda1Можно видеть, что они ничем не отличаются от аналогичных строк первой субсекции, кроме имени (дабы не забыть, что именно здесь загружается) и имени файла образа ядра, столь же традиционного, как указанное выше.
Следующие несколько субсекций, озаглавленных все вместе как
### Special casesименно что и описывают разные специальные случаи. Впрочем, все они закомментированы, являя собой просто образец для подражания или «болванку» для модификации. Для для нас интерес будет представлять только один из этих примеров, который мы рассмотрим под занавес. А пока вернемся к первой, основной субсекции.
Как нетрудно догадаться, основываясь на параметре title, в примере рассмотрен случай с дистрибутивом Slackware. А Zenwalk, хотя и приходится ей близким родственником, отличается рядом особенностей, в частности, именно условиями загрузки.
Главное отличие заключается в том, что Zenwalk при загрузке использует так называемый initrd — виртуальный диск в оперативной памяти (Initial RAM-диск, подобнее об этом говорится в Интермедии 2.2), содержащий ядро, в котором поддерживается минимальное количество оборудования, но обеспечивается загрузка всех остальных компонентов системы. И это, разумеется, должно быть отражено в конфиге grub'а.
Кроме того, форма описания параметров загрузки, принятая Acrux'ом, далеко не самая распространённая. Практически это не важно, ибо результат достигается точно тот же, но выглядит достаточно непривычно.
Наконец, номенклатура файлов дисковых устройств во многих современных дистрибутивах (и Zenwalk тут не исключение), отличается от использованной в примере нашего конфигурационного файла: жесткие диски, вне зависимости от принадлежности к PATA- или SATA-семейству, именуются одинаково — /dev/sd?.
В соответствие с этим мы и отредактируем прототип. Точнее, я приведу просто фрагмент своего конфига для дистрибутива Zenwalk и прокомментирую его.
Итак, секция, первая,
### Global settingsЭто название удачно, и я его сохранил. Хотя и сводится она у меня к двум строкам. Первая:
timeout 10этого времени мне как раз хватает на размышления, если в планах стоит загрузить систему, отличную от умолчальной:
default 0Если не догадались, какая же умолчальная — можно посмотреть на название книжки, или перейти ко второй секции, каковая с неё и начинается:
title ZenwalkЗначение title, думаю, в комментариях не нуждается.
root (hd0,0)Этой строкой определяется устройство, несущее корневой каталог для grub — загрузочный раздел у меня выделен в самом начале диска как первичный (/dev/sda1). Как мы увидим позднее, такое самостоятельное определение корневого устройства, отдельно от пути к образу ядра в строке kernel, в ряде случаев удобнее. Хотя в иных ситуациях может оказаться предпочтительным задание полного пути, как в примере из «образцового» конфига.
Итак, в следующей строке
kernel /vmlinuz vga=791 noapic nolapic root=/dev/sda6 ro quiet splashопределяются образ загружаемого ядра и передаваемые ему параметры. Поскольку раздел под каталог /boot мы только что определили как корневой для grub'а, абсолютный путь к файлу образа от корня же и указывается.
Обратим внимание, что vmlinuz — это символическая ссылка на реальное имя файла образа ядра:
$ ls -l /boot/vmlinuz lrwxrwxrwx 1 root root 14 2008-08-07 00:07 /boot/vmlinuz -> vmlinuz-2.6.26То есть при апгрейде версии ядра никаких изменений в menu.lst вносить не нужно.
Значение параметра vga задаёт разрешение 1024x768 при 16-битном цвете при загрузке. В дальнейшем этот же режим будет использоваться в консоли. Впрочем, на современных широкоформатных мониторах любые стандартные VESA-режимы передаются с сильными искажениями, а задание режимов нестандартных — это совсем отдельная история, которой здесь мы касаться не будем.
Параметры noapic и nolapic запрещают использование улучшенного контроллера прерываний (APIC) — как ввода/вывода (первый), так и локального. Без этих параметров большинство дистрибутивов на моей машине (и многих других современных) просто не грузится. Нужны ли эти параметры в общем случае — обычно определяется методом ползучего эмпиризма.
Параметр root определяет устройство корневой файловой системой для уже загруженного ядра — в нашем случае она отличается от корневого устройства загрузчика и предписывает монтирование корня в режиме read only, о чём уже говорилось ранее. Параметр quiet подавляет вывод сообщений о ходе загрузки, подменяемых, благодаря параметру splash, заготовленной splash-картинкой. Разумеется, оба эти параметра не обязательны, у меня они унаследованы от какого-то старого конфига, развлечения же со сплэшами — также тема специально для любителей.
В строке
initrd /initrd.splashопределяется имя того самого инициирующего диска, о котором говорилось ранее. Он находится в каталоге /boot, вместе с ядром, и в Zemwalk'е по умолчанию носит имя, указанное в вышеприведенной строке. Файлам initrd, собранным для специальных целей (например, для поддержки какого-либо экзотического оборудования), можно давать иные имена.
Отступление: вообще, имена файлов для образа ядра и инициирующего диска в Linux'е не есть что-то предопределенное свыше; они могут быть любыми — нужно только не забывать в соответствующих местах указывать их явным образом. Не обязаны они также находиться в каталоге /boot: довольно часто и ядро, и initrd выносят непосредственно в корневой каталог, хотя обычно в виде символических ссылок. Только опять-таки пути к этим файлам должны быть указаны в абсолютной форме (то есть от корня загрузчика или, если нужно, файловой системы).
Последняя строка нашей субсекции
quietпредписывает «молчаливый» режим по завершении загрузки и также досталась мне по наследству — острой необходимости в ней нет.
Итак, мы описали основной вариант загрузки нашей системы. По образу и подобию его можно создать сколько угодно субсекций для дополнительных вариантов — с различными сборками образов ядра и (или) initrd. Нужно только заботиться об уникальности имен файлов и тех, и других, а также их соответствии в реальности и в описании конфига. Уникальными желательно быть и значениям строки title.
А вот строка root в дополнительных субсекциях в этом случае не нужна — корневое устройство для загрузчика мы определили в первой субсекции, и определение это будет сквозным, до его переопределения явным образом. Так что каждая из дополнительных субсекций сведется к обязательным строкам примерно такого вида:
title Zenwalk Old kernel /vmlinuz.old noapic nolapic root=/dev/sda6 initrd /initrd.oldОднако grub позволяет загружать не только разные варианты одного дистрибутива, но и разные дистрибутивы, каждый из которых лежит, разумеется, на собственном разделе (разделах), что требует переопределения корневого устройства для загрузчика.
Как это делается — проще всего рассмотреть на примере. Одной из систем, установленных у меня на машине, является Xubuntu, которая занимает третий логический раздел (/dev/sda7). Вот как выглядит субсекция, обеспечивающая её загрузку:
title Xubuntu root (hd0,6) kernel /boot/vmlinuz-2.6.24-19-generic vga=791 noapic nolapic root=/dev/sda7 ro quiet initrd /boot/initrd.img-2.6.24-19-generic quietТо есть:
/boot/vmlinuz -> /boot/vmlinuz-2.6.24-19-generic /boot/initrd -> /boot/initrd.img-2.6.24-19дабы избавиться от лишней писанины.
И, наконец, вспомним, что grub яыляется истинно мультисистемным загрузчиком и способен грузить не только Linux, но и иные системы. Делать он это может двояким образом.
Для операционок, файловую систему которых он понимает (к их числу принадлежат, в частности, BSD их FFS и UFS2), grub обеспечивает старт примерно тем же методом, что и для любого Linux'а — то есть непосредственной загрузкой образа ядра или некоей программы, способной эту загрузку выполнить. Например, для FreeBSD (и DragonFlyBSD) это делается примерно так:
title FreeBSD root (hd0,2) kernel (hd0,2)/boot/loaderС титулом здесь всё понятно. Корневое устройство для загрузчика — это BSD-слайс (первичный раздел в терминологии DOS/Windows и Linux, в данном случае третий), разбитый на логические разделы в соответствии c правилами BSD-разметки, а /boot/loader — один из комопнентов загрузчика BSD Loader, который и выполнит всю остальную работу (подробности обо всех этих материях можно прочитать здесь).
Всё это, конечно, очень благородно, скажите вы мне вслед за доном Тамэо, но как там на счёт баб? То есть, пардон, загрузки операционок, файловую систему которых grub не понимает и понимать в принципе не способен из-за их закрытости? А ведь именно загрузка одной из таких операционок представляет наибольший интерес для начинающего пользователя — вы, конечно, уже догадались, о чём идет речь...
На такой случай разработчики grub'а припасли второй метод — загрузку «по цепочке», то есть просто передачу управления на загрузочный сектор раздела, несущего соответствующую операционную систему. Каковую можно и назвать — мы ведь не боимся поминать чёрта к ночи, а Windows — поутру.
Чтобы понять, как это делается, вернёмся к рассмотрению нашего «образцово-показательного» примера — файлу /boot/grub/menu.lst.sample. Ближе к его концу можно обнаружить такую субсекцию:
#title Windows #root (hd0,5) #makeactive #chainloader +1Снимаем знаки комментария со всех этих строк, вместо устройства (hd0,5), при необходимости, указываем то, которое в вашей системе несёт Windows (простите — на этот раз именно вашей, у меня таковой не имеется), и — вуаля! — загрузка Windows вам обеспечена.
Правда, задать корневое устройство для загрузчика более корректно следует так:
rootnoverify (hd?,#)где ? и # — номера диска и раздела соответственно. А параметр rootnoverify не просто назначает загрузочное устройство, но и запрещает проверку его файловой системы, резонно полагая, что проверять заведомо непонимаемое смысла не имеет.
Далее строка
makeactiveделает загрузочное устройство активным, а
chainloader +1«по цепочке» передаёт на него (точнее, на его загрузочный сектор) управление. Дальнейшее — забота Партии, то есть штатного загрузчика Windows, о котором вы наверняка знаете больше меня.
Остаётся только добавить, что загрузка по «цепочке» применима не только к чуждым, но и к вполне соплеменным системам, в отношении которых к ней подчас приходится прибегать. В частности, такая ситуация сложилась, когда во FreeBSD как умолчальная была принята файловая система UFS2, а grub еще не научился её понимать. Как это делалось — ныне представляет только исторический интерес, однако общий принцип «цепочечной» загрузки, думаю, ясен — запомним его на предмет возможного повторения аналогичных ситуаций в будущем:
Однако, во-первых, все мы люди, все мы человеки — и никто из нас не застрахован, скажем, от банальных «ачипяток» (а уж автор этих строк — меньше всех). А во-вторых, как в случае с файловой системой UFS2, ошибки могут быть вызваны и (почти) объективными причинами. И в том, и в другом случае результатом будет не загрузка выбранной системы, а сообщение об ошибке. Что делать?
И тут на помощь придёт режим редактирования — после неудачной загрузки и возврата в главное меню выбранный его пункт можно на лету видоизменить. Для этого нажимаем на клавишу с символом e (от edit) и видим содержимое субсекции, соответствующей данному пункту, а также подсказку по доступным командам, которым соответствуют односимвольные горячие клавиши:
Если загрузка проходит успешно — всё хорошо: немедленно, пока не забыли, вносим соответствующие коррективы в /boot/grub/menu.lst и спокойно живём дальше. Если же опять следует сообщение об ошибке, возвращаемся в режим редактирования — и так до победного конца.
В процессе редактирования можно пользоваться автодополнением и выводом альтернатив, для чего служит клавиша табулятора, действующая точно так же, как и в большинстве командных оболочек. То есть, находясь в пустрой строке
grub> root (по нажатию табулятора мы получим
grub> root (hd Possible disks are: hd0 hd1Дополнив строку номером раздела, получим
grub> root (hd0, Possible partitions are: Partition num: 0, Filesystem type is ext2fs, partition type 0x83 Partition num: 3, Filesystem type is ext2fs, partition type 0x83 Partition num: 4, Filesystem type unknown, partition type 0x82 Partition num: 5, Filesystem type is ext2fs, partition type 0x83 Partition num: 6, Filesystem type is ext2fs, partition type 0x83И так далее. Это же применимо и к именам файлов образа ядра и инциирующего диска. Только напоминаю, что сам grub никаких изменений в собственный конфиг не вносит: это предстоит сделать руками после успешной загрузки.
Посредством grub'а можно загрузить систему, которой не соответствует никакая подсекция в menu.lst, и даже если этот файл пуст или вообще не существует. Для этого нажатием клавиши c надо перейти в режим командной строки и последовательно ввести все необходимые для загрузки команды и их аргументы:
Подводя итог, можно со всей ответственностью заявить: с помощью grub'а
The full documentation for grub is maintained as a Texinfo manual.Правда, с чтением info-страниц могут возникнуть затруднения. Некоторые особо аскетические дистрибутивы, такие как CRUX, просто не имеют их в своём составе. В Zenwalk'е info-страницы есть, и для grub таковая появляется после установки соответствующего пакета. Однако саму команду info искать бесполезно — по умолчанию она отсутствует. И для её появления следует установить пакет texinfo:
$ netpkg texinfoпосле чего можно будет вволю насладиться всеми достижениями GNU'той мысли. Если же читателю этих строк, подобно их автору, слабо пробираться сквозь дебри info-страниц, то Google в помощь: документации по grub в Сети вдоволь, в том числе, как уже было сказано, и на русском языке.
P.S. Эта глава была уже готова к размещению, когда на сайте проекта Zenwalk появилось сообщение о том, что GRUB включён в официальный репозиторий пакетов, причём во второй своей версии. Что же, это упростит жизнь тех пользователей этого дистрибутива, которые одновременно являются и поклонниками Гранда загрузчиков. Однако на счёт именно второй версии последнего пока существуют определённые сомнения. Да и никаких принципиальных изменений в настройке её относительно версии первой не произошло. Так что всё описанное выше актуальности не потеряло.