Gentoo'алиссимус, или введение в комбинаторику


Автор: Алексей Федорчук, [email protected]
Опубликовано: 12.07.2002
Оригинал: http://www.softerra.ru/freeos/18909/


Если б водка была
На одного –
Ох и здорово было б
Но всегда покурить на двоих,
Но всегда распивать на троих.

Как будто бы Владимир Высоцкий

Мое отношение к дистрибутивам Linux (и вообще открытым Unix'оидам) вполне вписывается в рамки известной сентенции: если бы к красоте инсталлятора из Caldera, да гибкость настроек Slackware. Да туда бы еще систему портов из FreeBSD вкупе с ее же sysinstall (причем всеохватную, как DrakConfig) – ох и здорово было б Но всегда чем-то приходится поступаться. Что и дает возможность стремиться к идеалу – от колыбели до могилы.

Новый шаг на этом пути (к идеалу, не к могиле, надеюсь) – дистрибутив со странным названием Gentoo Linux (никаких указаний на его семантику я не обнаружил). Доступен он на сайте разработчиков (ну и на всяких сайтах типа www.linuxiso.org – также) в виде iso-образа CD. Файл образа – на удивление маленький (чуть больше 100 Мбайт для текущей, 1.2, версии), хотя сам дистрибутив позиционируется как полнофункциональный. И, забегая вперед подтвержу – таковым является. Причины же такой необычной в наши дни компактности станут ясными из дальнейшего рассмотрения.

Кроме того, на том же сайте можно отыскать немало документации, качество которой производит (впечатление) и не оставляет (желать лучшего) – за исключением того, хорошо бы ей еще быть русскоязычной (но это – к вопросу из первого абзаца). В частности, руководство по установке (build.html) – действительно подробнейшая инструкция по построению системы, можно сказать, почти с нуля. К слову – очень рекомендуется поначалу держать ее распечатку под рукой. Хотя, как будет показано далее, даже и без этого можно обойтись.

Внутренность iso-образа после его разворачивания на CD также оказывается своеобразной: на нем содержится каталог ~/cdrom/isolinux с ядром, загрузчиком и еще парой-тройкой файлов и три тарбалла в формате tbz2 (сиречь tar-архивы, упакованные bzip2-компрессором, также весьма способствующим уменьшению суммарного объема). Тем не менее, CD позволяет загрузиться с него и начать установку.

Первые же шаги которой способны вогнать в дрожь закоренелого GUI'шника: никакого интерфейса, за исключением командной строки (правда, вполне полноценного bash, с историей команд, автодополнением и прочими прелестями, греющими душу истого CLI'шника) не предусмотрено.

Первое, что предлагается по окончании загрузки – выбрать клавиатурную раскладку, от бельгийской до японской. Что приятно, и русская в этом списке присутствует. Хотя смысла сего действия я не понял – вводить национальные символы в процессе установки не придется, а на дальнейшие настройки этот выбор никакого влияния не оказывает. Более того, я бы вообще воздрежался от этого – в прилагаемой раскладке переключение осуществляется правым Control'ом, каковой достаточно активно задействуется при навигации по командной строке bash.

Далее автоматически определяются PCI-устройства. Насколько корректно в общем случае – утверждать не берусь, определить телетюнер на чипе BT-сколько_то система не смогла. Но моя сетевая карта была опознана безошибочно, для нее предложен был драйвер (имя его не худо записать или запомнить, оно потребуется практически сразу), и даже выведен MAC-адрес (уж не знаю, насколько он нужен при установке, но ведь и вреда от него ни малейшего, верно?).

Вслед за этим нажатие Enter'а активизирует командную оболочку с весьма приличным списком встроенных команд. Причем доступными становятся сразу 6 виртуальных консолей. Так что жить становится совсем просто – на второй консоли выводим

$ less install.txt

с коим и сверяем дальнейшие шаги – это точная текстовая копия упоминаемого ранее build.html.

А в качестве первого из этих шагов рекомендуется подгрузить необходимые модули (в моем случае – только для сетевой карты, а вообще – и для SCSI-адаптера, если такой имеется):

$ modprobe ne2k-pci

название которого нам любезно сообщили только что, и сконфигурировать сеть для пущего комфорта установки. Каковой, впрочем, достигается только при наличии постоянного подключения к Сети с большой буквы. Однако и без него можно обойтись – я, например, в своей деревне обошелся.

Следующий шаг – создание дисковых разделов. Грубо, весомо, зримо – командой

$ fdisk /dev/hd?

без всяких там полумер типа cfdisk, Disk Druid'ов и прочего дискового клира. Зато в руководстве даются подробные рекомендации по схеме разбиения и желательным файловым системам. В частности, предлагается сделать небольшой (100 Мбайт) загрузочный раздел (/boot) и приписать ему файловую систему ext2 или ext3. А для корневого раздела (/) и (/usr, /var, /home – по потребности) прочих рекомендуется XFS или ext3, но не ReiserFS, причем – с достаточно внятным обоснованием выбора. Тем не менее, приведены примеры создания всех возможных файловых систем  [1] .

Здесь и далее остается только жалеть, что не активизирована служба консольной мыши – тогда осталось бы только таскать примеры из руководства в установочную консоль, почти не притрагиваясь к клавишам

Далее остается активизировать раздел подкачки, создать требуемые каталоги (минимум /mnt/gentoo и, чуть позже, /mnt/gentoo/boot), смонтировать в них созданные файловые системы, а затем – установочный CD (в /mnt/cdrom, разумеется). После чего дело доходит и до упомянутых тарбаллов. Причем весь процесс установки описывается в расчете на то, что из них имеется только один (stage1-ix86...), прочие компоненты добираются с ftp-сервера в полуавтоматическом режиме. Если же подключения к Сети нет – потребуются все три тарбалла, но зато и процесс установки будет проще.

Итак, переходим в /mnt/gentoo, распаковываем тарбаллы (особо предупреждается об опции -p, иначе возможны проблемы с доступом):

$ tar -xvjpv /mount/cdrom/stage?-*.tbz2

Далее монтируем файловую систему proc, меняем корневой каталог:

$ chroot /mnt/gentoo

обновляем окружение:

$ env-update
$ source /etc/profile

и мы внутри свежеинсталлированной системы Gentoo! Правда, с одной оговоркой – если машина имеет процессор от Pentium Pro и выше. Так как два старших тарбалла (stage2- и stage3-i386*.tbz2), как легко понять из их названия, скомпилированы именно под них.

При установке же с использованием Сети инсталлируется только первый, абстрактно-интеловский, тарбалл. Затем настраивается файл /etc/make.conf, в котором и задаются условия компиляции – для P6 только (с флагом -march=i686), с оптимизацией под него же, но возможностью запуска на младших процессорах (флаг -mcpu=i686), Pentium/PentiumMMX, AMD K-5. Или – вообще под архитектуру нетрадиционной ориентации (то есть PowerPC, разных там прочих Альф Gentoo не поддерживает).

Настройка /etc/make.conf (и все дальнейшие, о которых речь впереди) осуществляется «в лоб» – редактированием в текстовом редакторе. Роль которого исполняет nano – простой в обращении, открытый клон pico, известного.

После этого компоненты второго и третьего тарбалла скачиваются в виде исходников и компилируются – похоже на систему портов FreeBSD, не правда ли? Да и называется похоже – система Portage, к которой я еще вернусь. А в промежутке можно заодно пересобрать командой

$ /usr/portage/scripts/bootstrap.sh

и первый тарбалл – в соответствии с настройками /etc/make.conf.

Однако проследим далее генеральную линию после установки. Первый ее сегмент, в соответствие с логикой, – сборка собственного ядра. Делается это традиционным

$ make menuconfig

и к теме разговора прямого отношения не имеет  [2].Замечу только, что в текущую версию Gentoo входит ядро 2.4.19, в коем требуется включить такие опции, как поддержка новомодных файловых систем devfs, tmpfs и, конечно же, тех, которые были размещены на дисковых разделах – ext3 там, или XFS. Теоретически Gentoo можно заставить работать и с ядрами ветви 2.2, но это потребует ряда дополнительных телодвижений, впрочем, подробно описанных в документации.

Следующий необходимый шаг – редактирование файла /etc/fstab, где только-то и требуется, что заменить приведенные в примере значения на свои реалии. Затем, при необходимости, корректируем загрузку модулей (редактированием файла /etc/modules.autoload) и сетевые соединения (имя хоста и прочее).

И наконец – волнующий момент правки /etc/rc.conf, главного стартового файла, из которого (в стиле FreeBSD) различные инициалиализационные скрипты получают свои параметры. Здесь можно задать раскладку клавиатуры, пользовательский экранный шрифт и, при необходимости, карту соответствия одного другому. Причем, ввиду доступности других виртуальных консолей, возможные значения можно подсмотреть в каталогах /usr/share/keymaps, /usr/share/consolefont и /usr/share/consoletrans, соответственно). И выбрать подходящие для отечественных условий – например, клавиатуру ru4 (KOI-раскладка для Windows-маркировки с переключением по CapsLock), шрифт altc-8x16, вполне приличного видом, и карту koi2alt. Опять же, прямо как во FreeBSD

Последнее, что осталось сделать – сконфигурировать загрузчик. Коим является GRUB. Делается это также просто – внутренними средствами GRUB'а и редактированием меню-листа, на чем задерживаться не буду  [3] .

Вот теперь – действительно все, размонтируем файловые системы и перезагружаемся. После чего можно продолжить знакомство с системой Gentoo.

Которое поначалу способно несколько обескуражить: в руках у пользователя, кроме обще-Unix'овых утилит, только bash и nano (даже традиционного vi нет). Попытка запустить X'ы – терпит фиаско (как и поиск какого-никакого X-сервера). «Доинсталлировались» – уныло скажет пользователь, судорожно напрягая три пальца

  И окажется неправ. Потому что внимательный взгляд обнаружит волшебный каталог /usr/portage, являющий собой не что иное, как аналог системы портов FreeBSD, даже с подкаталогом /usr/portage/distfiles для исходников. Правда, каталог этот – девственно чист, однако для исправления этого даже первородного греха не понадобится, достаточно иметь доступ (желательно постоянный) к Сети. Или заранее озаботиться скачиванием исходников с сайта Gentoo, где, как и на сайте FreeBSD, они имеются для всех «портежных» программ.

В моей деревне доступа к Сети почему-то до сих пор так и не появилось. Однако за без малого полтора года общения с FreeBSD я перетаскал к себе почти весь ее distfiles, и потому сразу ринулся в бой. Впечатление, доложу я вам, восхитительное: переходишь в подкаталог требуемого портежа, например,

$ cd /usr/portage/app-shells/zsh

обнаруживаешь там ebuild-файл, даешь команду

$ emerge zsh*.ebuild

и через некоторое время имеешь возможность запустить любимую командную оболочку, или там редактор. Единственно, что номера версий не всегда совпадают, да dist-файлы из FreeBSD подчас имеют иные имена, нежели общепринятые (например, ru-ispell, а не ispell-ru), но и то, и другое не критично: в крайнем случае все это легко собирается вручную, посредством распаковки архива и команд

$ ./configure
$ make
$ make install

Причем все программы из портежей компилируются сразу в оптимизированном (в соответствии с настройкой /etc/make.conf) виде. А результаты портежирования фиксируются в базе данных – /var/db/pkg. Где можно обнаружить и все программы, имевшиеся до начала процесса – то есть установленные из тарбаллов. Иными словами, принцип портирования в Gentoo выдерживается еще более последовательно, чем во FreeBSD (где компоненты базового набора в базу данных пакетов не попадают, и простого способа их удаления я так и не нашел).

Команда emerge имеет, как и положено, множество опций, позволяющих синхронизировать или обновить версии портежей, создать пакет вида *.tbz2, чисто удалить установленный пакет, вплоть до полной пересборки системы в соответствие с настройками, описанными в профильных файлах /etc/make.profile/. Короче говоря, все возможности создания точной конфигурации для себя, любимого.

Что еще хотелось бы отметить – так это отменное быстродействие, по крайней мере органолептически (до тестов руки у меня не дошли). Все же оптимизация под P6 всего и вся знать себя дает – раньше, для P5, такое обычно только декларировалось (Mandrake чему примером).

Единственное, что чуть испортило первое впечатление – полное наличие отстутствия на экране русских букв (хотя все необходимые для кириллизации меры я принял на стадии установки). И это при том, что никаких сообщений об ошибке в загрузке шрифтов при старте системы не поступало. И «с руки», командой

$ setfont font_name -m mapscreen_name

и шрифты, и таблицы перекодировки грузились отлично, и все отображалось правильно. Но не делать же это каждый раз перед работой с русским текстом, да еще и в каждой консоли

Поначалу я подумал, что дело в шрифтах или таблицах перекодировки. И нагло стибрил их с Altlinux Master 2, где ни малейших проблем с «русскам языкам», как известно, не имеется. Однако и это не помогло. Не дала результата даже попытка решить проблему «в лоб», с без карты соответствия (то есть с экранными шрифтами KOI8).

Однако все оказалось гораздо проще. Рассмотрение вопроса показало, что за загрузку шрифта и карты соответствия отвечает файл /etc/init.d/consolefont. При этом карта соответствия загружаться-то загружалась, но ни в одном стартовом файле я не нашел ни строчки о ее активизации. Вспомнив о своих старых упражнениях со Slackware, я изыскал файл /etc/init.d/local и вписал в него строки

for i in 1 2 3 4 5 6
 do
 echo -ne '\033(K' > /dev/vc/$i
done

после чего все пришло в норму (после реинициализации, разумеется).

Пришлось мне столкнуться и с некоторыми другими неожиданностями – отказом монтировать при загрузке некоторые дисковые разделы, например, или исчезновением CD-R/RW привода после записи диска (и перезагрузки!). Часть их вызвана была моим лишь шапочным знакомством с современными файловыми системами (типа devfs и XFS), однако внимательное чтение мемуара, упомянутого в примечании [1], помогло решить все проблемы. А отсутствие доступа к Сети помешало своевременно получить необходимые утилиты для работы с XFS – в комплект дистрибутива они не входят, и доступны только через систему портежей  [4] .

Тем не менее, впечатления от Gentoo у меня остались самые благоприятные. Конечно, это дистрибутив не для самых уж начинающих. Однако, благодаря прекрасной документации, и познаний Unix-гуру он также не требует: достаточно иметь минимальные навыки работы в командной строке (в объеме «черного DOS'а») и представления о работе fdisk. Ну и кое-как разбирать аглицкие буковки. А главное – не лениться это сделать.

А вообще-то, появление таких дистрибутивов не может не радовать. Если это и не искомая гармония между традицией и современностью, то, по крайней мере, очередной шаг в верном направлении.


[1] Стратегия разбиения диска и дисковые системы для разных разделов – тема, заслуживающая в современных условиях особого рассмотрения. И раз уж речь об этом зашла, замечу: Даниэль Роббинс, создатель Gentoo, по совместительству, автор подробного Руководства по «продвинутым» файловым системам. А на сайте IBM есть еще много его статей на разные темы – от работы в bash до создания дистрибутива (но уже – на английском). [обратно к тексту]

[2] Сборка современных ядер серии 2.4.1X – процесс весьма увлекательный, также стоящий того, чтобы о нем поговорить подробно (но – в другой раз). [обратно к тексту]

[3] О GRUB'е можно прочитать в прекрасной статье Владимира Попова. [обратно к тексту]

[4] Так, через некоторое время система возжелала при загрузке проверять мои файловые системы, а программы для XFS (fsck.xfs) не обнаружила. В результате корневой раздел с XFS все равно монтировался, но вот раздел /boot (с ext3fs) – категорически отказывался это делать. Тем не менее, система работоспособности не теряла. [обратно к тексту]



Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с правилами использования материалов сайта «Софтерра» (http://www.softerra.ru/site/rules/)