Алексей Федорчук
[email protected]
Gentoo Linux - один из типичных представителей т.н. Source Based дистрибутивов. То есть систем, основанных не на прекомпилированных бинарных пакетах, подобно Red Hat или Debian (которые можно отнести к классу пакетных дистрибутивов), а собираемых непосредственно из исходных текстов. Он очень удачно интегрирует в себе как традиционные качества Unix-систем, так и новейшие достижения разработчиков Linux. А ряд его особенностей, как станет ясным из дальнейшего, делает его едва ли не идеальным объектом для углубленного изучения устройства Linux вообще. Именно поэтому он, не смотря на относительно малую известность, заслуживает подробного рассмотрения, каковое и будет предметом настоящей статьи.
Дистрибутив Gentoo Linux относительно молод - он был создан около двух лет назад Дэниелем Роббинсом, бывшим до того одним из участников проекта Linux Srampade. Ныне дистрибутив поддерживается интернациональной командой разработчиков, насчитывающей более 80 человек из США, Канады, Германии, Скандинавских стран, Норвегии, Латинской Америки (наших соотечественников среди них как-будто не просматривается). Официальный сайт проекта - http://www.gentoo.org/.
С самого начала (и это явным образом признает Дэниел - см. Дополнительные источники) Gentoo являл собой синтез наиболее передовых технологий Linux с традиционными достижениями BSD-систем (в первую очередь - FreeBSD). В частности, в нем приняты сценарии начальной загрузки системы в BSD-стиле - большинство популярных дистрибутивов Linux, за исключением Slackware, наследуют схему инициализации системы, унаследованную от Unix System V (именно она была принята за основу Линусом Торвальдсом при создании своего ядра).
Главная особенность Gentoo также идейно унаследована FreeBSD. В последней, как известно, только базовые компоненты (т.н. Distribution) устанавливаются из прекомпилированных пакетов. Для установки же пользовательских приложений предназначена т.н. система портов. Это - набор средств для автоматизированного получения из Сети (с мастер-сайтов разработчиков или их официальных зеркал) исходных текстов программ, их конфигурирования, компиляции, установки и регистрации в специальной базе данных. Конечно, и FreeBSD поставляется с наборами прекомпилированных пакетов (packages), однако это - лишь вспомогательное средство. И - не самостоятельное, потому как пакеты генерируются посредством все той же системы портов.
В Gentoo концепция портов (именуемых здесь портежами - Portages) проводится еще более последовательно, чем во FreeBSD. Поскольку здесь этим путем можно установить (или - обновить) не только прикладные программы, но и все базовые компоненты системы, вплоть до ядра, компилятора gcc и главной системной библиотеки glibs.
Система портежей Gentoo позволяет, во-первых, очень гибкое конфигурирование системы, с подбором только необходимых (и осознанно выбираемых) приложений. Во-вторых, она открывает путь для практически идеальной оптимизации системы не только под различные архитектуры (а на данный момент дистрибутивом поддерживаются, кроме i86, также архитектуры Sparc, PowerPC и Alpha), но и под конкретные типы процессоров. Кроме того, в ней предусмотрены средства генерации бинарных пакетов (аналог packages FreeBSD), которые могут быть установлены на целевую платформу, отличную от host-машины. И, более того, пакеты эти также могут быть оптимизированы с учетом особенностей целевой (например, более слабой) машины.
Дополнительным плюсом дистрибутива Gentoo является его прекрасная документированность. На сайте проекта доступны:
Кроме этого, Дэниел Роббинс - автор многочисленных статей на сайте IBM - developerWorks - см. дополнительные источники), посвященных описанию новейших технологий Linux. Они основаны, как нетрудно догадаться, в первую очередь на опыте его работы с собственным дистрибутивом и потому очень удачно дополняют документацию проекта.
Название дистрибутива (произносится как "джен-ту") может показаться несколько странным. Но объясняется просто - это один из видов пингвина (научное название Pygoscelis papua), обитающий на Циркум-Антарктических островах (Фолклендских, Кергелен, Южная Георгия - где именно, можно видеть на рис. 1). А как он выглядит - демонстрирует рис. 2.
Рис. 1. Здесь живет пингвин джен-ту
Рис. 2. А это он и есть
В специальной литературе можно прочитать, что джен-ту отличается небольшим размером и стремительностью. Именно эти его качества и воплощены в дистрибутиве Дэниела Роббинса сотоварищи.
На момент написания этих строк последняя стабильная версия Gentoo - 1.2. Кроме этого, доступен также пре-релиз (т.н. release candidad) следующей версии - 1.4. Это - абсолютно работоспособная и устойчивая система, вполне пригодная к повседневному использованию. И к тому же именно в нем реализованы самые современные Linux-технологии. Поэтому ниже речь пойдет в основном именно о пре-релизном варианте.
Все версии дистрибутива Gentoo доступны на основном сервере проекта и на ряде его зеркал (полный список которых - на этой странице). Скачивание - по протоколам http и ftp, разумеется, свободно и бесплатно. Конечно, за некоторую сумму можно заказать и CD-вариант, но в наших условиях это не актуально.
Процесс получения Gentoo имеет некоторые особенности, отличающие его от получения (приобретения) любого пакетного дистрибутива. Если для последнего достаточно скачать iso-образы CD-дисков и записать их на соответствующие носители, продуктивное использование Gentoo требует выхода в Интернет. Правда, не обязательно с той же машины, на которую он устанавливается - вполне допустима ситуация, когда необходимые компоненты получаются, например, по рабочему каналу, а сама система устанавливается дома.
И так, первое, что необходимо для установки - скачать образ инсталляционного диска. Объемы образов - достаточно скромны: для стабильной версии чуть больше 100 Мбайт, для пре-релиза (в зависимости от варианта) - 180 или 220 Мбайт. Подчеркну, что в обоих последних случаях речь идет о т.н. Live CD - то есть фактически полноценной Linux-системе, запускаемой с компакт-диска. И включающей большой набор не только системных утилит, но и пользовательских приложений. А в более объемном варианте - даже и демо-версию игры Unreal Tournament (и все средства, необходимые для ее запуска).
Образ инсталляционного диска стабильной версии содержит все необходимое для установки. Однако в случае пре-релиза его окажется недостаточно - потребуется еще три архива (*.tar.bz2), содержащие (в прекомпилированном виде) компоненты базовой системы. Первый из них (файл stage1-*, объемом около 10 Мбайт - он содержится и на установочном диске в каталоге nocompress) специфичен для архитектуры (i86, PowerPC, Sparc). Два других тарбалла (stage2-* и stage3-*, 50 и 80 Мбайт, соответственно), кроме этого, для PC-архитектуры представлены в нескольких вариантах, оптимизированных под конкретные процессоры: от i486 до Pentium-4 (включая и Athlon). Файлы эти обнаруживаются на сервере Gentoo в каталоге ~/gentoo/releases/x86/1.4_XX). Ясно, что скачиванию подлежат только тарбаллы, соответствующие реалиям пользователя.
Далее, для установки пре-релиза потребуется скачать архив системы портежей - один из файлов вида portage-200XXXXX.tar.bz2, расположенных в каталоге ~/gentoo/snapshots (в стабильной версии текущий архив портежей размещен на установочном диске). Как легко понять, цифры в имени файла соответствуют дате создания архива (а обновляется система портежей чуть ли не ежедневно), и лучше выбирать последний по времени.
И наконец, при установке на машину без выхода в сеть неплохо заблаговременно скачать архивы исходных текстов базовых компонентов системы - об их составе я скажу несколько позже. И не обязательно с сайта разработчика: исходники всех портированных в Gentoo программ можно найти на сайте проекта в каталоге ~/gentoo/distfiles (или ~/gentoo/gentoo-sources, содержание их идентично). Наличие их очень упростит жизнь, однако, как будет показано ниже, обойтись без них можно.
А вот без чего никак не обойтись - это без одного из дополнительных носителей, на котором будут размещены скачанные компоненты. При установке на "чистую" машину ими могут быть: второй CD (при наличии двух приводов, например, пишущего и читающего) или Zip (как нетрудно подсчитать - желательно 250-мегабайтного объема, иначе их придется менять в процессе установки). Можно также временно подцепить дополнительный винчестер с уже существующим разделом и какой-либо файловой системой на нем. Ну и заблаговременно переписать на эти носители все требуемые файлы - тарбаллы stage2-*, stage3-* и portage-* - обязательно, прочие - по возможности и желанию.
К слову сказать, на тот же носитель хорошо поместить и инструкцию по установке с сайта Gentoo (добавлю, и все прочие файлы документации - тоже, отнюдь не повредят). Или, по крайней мере, держать ее распечатку под рукой - зело способствует. И можно приступать к установке.
Помещать тарбаллы базовой системы и системы портежей, а также документацию, можно где угодно - хоть в корне файловой системы дополнительного накопителя. А вот под архивы исходников лучше создать на нем отдельный каталог, например, src - ниже будет ясно, почему.
Редкий инсталляционный диск Linux-дистрибутива ныне не является загрузочным. И Gentoo тут - не исключение: чтобы загрузиться с любого из вышепоименованных образов, достаточно поместить диск в привод, нажать на Reset, выставить соответствующие опции в Setup BIOS и подождать некоторое время, по возможности вникая в появляющиеся сообщения об имеющемся оборудовании (впрочем, все эти сведения можно будет получить и потом - командой dmesg.
Ожидание завершается выводом приглашения на ввод пользовательского имени (login), ответом на что служит волшебное слово root, а затем и пароля - на это отвечаем просто нажатием клавиши Enter. За этим появляется приглашение командной строки - и можно приступить к дальнейшим действиям.
Они не вполне тривиальны. Еще одна отличительная особенность дистрибутива Gentoo, о которой я не упомянул ранее - полное отсутствие какого-либо инсталлятора, все манипуляции по установке осуществляются прямыми директивами из командной строки и прямым редактированием конфигурационных файлов в текстовом редакторе. Что начинающего (да и не очень начинающего) пользователя может просто обескуражить.
Однако все не так страшно. Во-первых, в нашем распоряжении - вышеупомянутая подробная, буквально пошаговая, инструкция по установке. А во-вторых (и об этом также говорилось ранее), установочный диск Gentoo - не просто загрузочный, а так называемый Live CD. То есть просто-напросто загружающий полноценную рабочую Linux-среду с корневой файловой системой в оперативной памяти (способной монтировать в себя файловые системы любых устройств). И потому в процессе установки в руках пользователя - вся мощь ОС Linux, включая командную оболочку bash и 6 виртуальных консолей (авторизоваться в любой из них можно точно так же, как и в первой - вводом имени root без пароля). Ну а в третьих - загружаемое с CD Linux-ядро собрано с поддержкой абсолютно всех опций, которые могут потребоваться при установке (встроенной в ядро или модульной).
И потому первое действие после старта системы - загрузка всех необходимых модулей. Это будут модули поддержки:
При этом возможно, что многие из перечисленных устройств (в частности, сетевые карты) будут корректно определены при загрузке системы и соответствующие модули загрузятся автоматически, что проверяется командой
$ modprobe имя_модуля
В остальных случаях это придется сделать вручную, командой
$ insmod имя_модуля
Имена поддерживаемых модулей можно посмотреть (авторизовавшись в следующей виртуальной консоли) в соответствующих подкаталогах каталога /lib/modules/2.4.19-xfs-r1/kernel/ - ведь наша корневая система пока находится в оперативной памяти.
Следующий шаг - настройка сетевого соединения (при постоянном подключении). Если машина использует динамически выделяемый IP-адрес, назначаемый через DHCP-сервер (а в большинстве случаев это так и есть), делается это элементарно просто, командой
$ dhcpcd eth0
Все остальное происходит почти автоматически. При статическом IP-адресе потребуется ручная настройка, но на этом я останавливаться не буду (все вопросы конфигурирования сети очень подробно рассмотрены в руководстве).
При отсутствии постоянного подключения необходимо смонтировать носитель со скачанными ранее архивными файлами. Для этого в каталоге /mnt создаем соответствующую ситуации точку монтирования, например,
$ mkdir /mnt/zip
для Zip-диска, или
$ mkdir /mnt/cd2
для второго CD (каталог для установочного CD - /mnt/cdrom, - там уже имеется, и диск этот в него уже смонтирован). А теперь даем команду монтирования. Для zip-диска "из коробки" она будет выглядеть так:
$ mount /dev/hdd4 -t msdos /mnt/zip
где, кроме явного указания файловой системы, обращаю внимание, что файл устройства - именно /dev/hdd4: при фабричной разметке на zip-дисках создается один, но четвертый, первичный раздел. И еще одна тонкость: вследствие особенностей реализации файловой системы devfs в дистрибутиве Gentoo, zip-диск должен находиться в приводе в момент старта системы - иначе соответствующий файл устройства просто не будет создан.
Аналогичны и действия по монтированию второго CD или дискового раздела. Единственно, что в этом случае может не потребоваться явного указания на тип файловой системы (хотя и вреда от него, конечно, не будет).
Завершив монтирование носителя установочных файлов, следует перво-наперво активизировать еще одну виртуальную консоль и вывести на нее инструкцию по инсталляции - дабы сверять с ней все дальнейшие шаги, как со Священным писанием:
$ lynx /mnt/mount_point/build.html
При наличии модемного подключения к Сети можно настроить и его - даже если все требуемые файлы, включая исходники базовой системы, размещены на смонтированном носителе, не исключено, что в процессе их синхронизации может потребоваться какой-либо специфичный для Gentoo патч, скачать который по модему - дело пары минут, а то и секунд. Хотя должен предупредить, что установить базовую систему чисто по модему (что вполне реально, скажем, для FreeBSD) - не то что невозможно, но, скажем так, весьма долго и накладно для кармана.
Для настройки модемного соединения проще всего использовать программу wvdial, находящуюся на Live CD (в каталоге /usr/bin). Подгрузив модули поддержки протокола ppp (общий, ppp_generic, и асинхронного соединения, ppp_async), запускаем программу
$ wvdialconf /etc/wvdial.conf
Она автоматически определит порт, к которому подключен модем, определит его скорость и создаст строку инициализации, занеся все эти сведения в файл, указанный в качестве аргумента. В результате содержание его примет вид, подобный следующему:
[Dialer Defaults] Modem = /dev/ttyS0 Baud = 115200 Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 ISDN = 0 Modem Type = Analog Modem
Пользователю остается только добавить туда строку, определяющую способ дозвона. По умолчанию он - тоновый, тогда как в наших условиях, скорее всего, потребуется импульсный дозвон:
Dial Command = ATDP
Остальное же - обычная информация: телефон провайдера
Phone =
имя пользователя и его пароль
Username = Password =
Теперь, проследив, чтобы в файле /etc/hostname наличествовала единственная строка
localhost
подкорректируем содержимое файла /etc/resolv.conf: значение строки nameserver должно соответствовать реальному IP-адресу DNS-сервера провайдера. И теперь при необходимости для дозвона можно использовать команду
$ wvdial
А больше на этапе установки нам ничего и не требуется - все остальное сделает система портежей. А для ускорения сетевых
Возникает вопрос: а каким образом редактировать все вышепоименованные конфигурационные файлы (и те файлы, которые потребуется редактировать в дальнейшем)? Этой цели в дистрибутиве Gentoo штатно служит текстовый редактор nano - очень простой в освоении и обращении, снабженный встроенной справкой и обеспечивающий достаточные базовые функции редактирования. Нужно только не забывать запускать его в форме
$ nano -w имя_файла
где опция -w отключает режим переноса строк - конфигурационные файлы на это, как правило, реагируют болезненно. Поскольку редактор понадобится нам за время установки неоднократно, резонно было бы сразу определить псевдоним:
$ alias nano='nano -w'
благо, как уже говорилось, в нашем распоряжении полнофункциональная оболочка bash.
Вот теперь подготовительные мероприятия закончены - можно начинать собственно установку, начальный этап которой происходит внутри корневой файловой системы Live CD. Первый шаг на этом этапе - создание дисковых разделов и файловых систем на них. Эти вопросы были предметом детального рассмотрения в моей статье, подготовленной к печати (Открытые системы, #11, 2002) и потому здесь я на них остановлюсь лишь вкратце.
Для первой операции можно использовать одну из программ - fdisk, cfdisk, parted, все они имеются на Live CD. А созданию файловых систем служат специфичные для них утилиты: mkefs для ext2fs, mkfs.xfs - для XFS, mkswap - для раздела подкачки, и так далее. Рекомендуемая в руководстве схема разбиения для одного диска (первого на первом IDE-канале) приведена в табл. 1.
Таблица 1. Рекомендуемая схема разбиения диска для установки Gentoo
Раздел | Размер | Тип | Устройство |
Загрузочный | 100 Мбайт | ext2fs или ext3fs | /dev/hda1 |
Раздел подкачки | 128 Мбайт=<2*RAM=<2 Гбайт | Linux swap | /dev/hda2 |
Корневой раздел | 1,5 Гбайт минимум | XFS, ext3 - рекомендуются | /dev/hda3 |
Разумеется, эта рекомендация - приблизительна. Так, 1,5 Гбайт для корневого раздела - лишь абсолютно необходимый минимум. При интенсивном использовании системы портежей цифру эту нужно увеличить в два-три раза, а то и более. Или выделить файловую систему /usr в отдельный раздел. Кроме того, на мой взгляд, абсолютно необходимо создать отдельный раздел под файловую систему /home - для домашних каталогов пользователей. А в некоторых случаях целесообразно выделение и каталогов /var и /tmp.
Если под установку Gentoo предполагается задействовать более одного физического диска, можно прибегнуть к таким современным технологиям, как программные RAID-массивы или система управления логическими томами (LVM - Logical Volumes Manager). Рассмотрение их далеко выходит за рамки настоящей статьи. Скажу только, что первая технология способствует повышению быстродействия дисковых операций или (иногда - и) сохранности данных. А система LVM позволяет достичь непревзойденной гибкости в управлении уже созданными и смонтированными файловыми системами (в частности, динамического перераспределения занимаемого ими дискового пространства). И, разумеется, на установочном Live CD содержится весь необходимый инструментарий для работы с программными RAID-массивами и системой LVM. Впрочем, нет препятствий и к использованию дисков, подключенных к аппаратному контроллеру IDE-RAID, хотя это потребует некоторых дополнительных действий (детали - в руководстве по установке).
Следующий шаг - монтирование созданных файловых систем в структуру корневой системы (напомню, она - в оперативной памяти). Но сначала - активизируем раздел подкачки:
$ swapon /dev/hda2
что будет способствовать быстродействию при всех дальнейших манипуляциях, особенно при не очень большом объеме ОЗУ.
Теперь необходимо создать точку монтирования для той файловой системы, которая в дальнейшем станет корневой:
$ mkdir /mnt/gentoo
и смонтировать в нее соответствующий раздел:
$ mount /dev/hda3 /mnt/gentoo
Если создавались отдельные разделы под каталоги /boot, /usr, /home - они тоже потребуют своих точек монтирования, теперь уже относительно каталога /mnt/gentoo:
$ mkdir /mnt/gentoo{/boot,/usr,/home}
и выполнить для них команды монтирования:
$ mount /dev/hda1 /mnt/gentoo/boot
и так далее. Теперь командой
$ cd /mnt/gentoo/
переходим в будущий корневой каталог Gentoo и вспоминаем наконец о наших архивных файлах. Разворачиваем тарбалл первой очереди, находящий на инсталляционном CD:
$ tar -xvjpf /mnt/cdrom/nocompress/stage1-x86-*.tar.bz2
Здесь и далее следует обратить внимание на опцию -p в командной строке: она необходима для сохранения оригинальных атрибутов доступа к файлам, извлекаемым из архива. По самой же команде разворачивается иерархия каталогов в дереве /mnt/gentoo (/mnt/gentoo/etc, /mnt/gentoo/proc и т.д.) и устанавливается некий минимум прекомпилированных программ, необходимых для дальнейшей инсталляции, в том числе и ftp-клиент wget. И действительно, при постоянном подключении к Сети более ничего не потребуется - можно переходить к подготовке смены корневого каталога. Однако тем, кто не может им похвастаться, предварительно придется распаковать два оставшихся тарбалла, stage2* и stage3*.
Делается это точно так же, как и развертывание первого, только пути к соответствующим файлам нужно указать те, что соответствуют их реальному расположению, например:
$ tar -xvjpf /mnt/zip/stage2*.tar.bz2
и так далее. После этого мы имеем в каталоге /mnt/gentoo тот самый набор прекомпилированных библиотек, утилит и приложений, который объединяется понятием base Linux. И, соответственно, морально готовы к тому, чтобы сделать каталог /mnt/gentoo корневым.
Однако этот ответственный шаг требует некоторых подготовительных мероприятий - ведь после него все остальные ветви нынешнего корневого каталога станут недоступными. Правда, только с текущей, первой, консоли - во всех прочих сеансах корневым останется каталог в оперативной памяти.
Для начала, чтобы не делать двойную работу, скопируем настроенные нами конфигурационные файлы - ведь и они пока существуют только виртуально:
$ cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf $ cp /etc/hostname /mnt/gentoo/etc/hostname $ cp /etc/wvdial.conf /mnt/gentoo/etc/wvdial.conf
Теперь воспользуемся замечательным свойством современных ядер Linux - возможностью доступа к одной и той же файловой системе через разные точки монтирования. И смонтируем таким образом файловую систему процессов (она, как ясно из названия, представляет протекающие в системе процессы в виде файлов):
$ mount -o bind /proc /mnt/gentoo/proc
К слову сказать, таким же образом можно поступить и с тем носителем, на котором у нас размещены архивы системы портежей и исходников (если последние мы туда помещали). А можно, просто размонтировав его (доступ к ним из виртуального корня Live CD больше не обязателен), смонтировать заново - но уже относительно будущего нового корня:
$ mount /dev/hdd4 /mnt/gentoo/mnt
Ведь в нем развернута собственная корневая система, имеющая все положенные компоненты. Правда, в этом случае мы потеряем доступ к инструкции по установке - а она нам еще потребуется. Вообще говоря, обойтись с этим носителем можно самыми разными способами - например, не перемонтируя его, просто обращаться с других виртуальных консолей. Я опишу самый, на мой взгляд, удобный.
Не предпринимая никаких размонтировочных действий, переходим в каталог /mnt/gentoo/usr (таковой ведь у нас тоже имеется). И из него разворачиваем архив портежей, точно так же, как мы это делали для основных тарбаллов:
$ tar -xvjpf /mnt/zip/portage*.tar.bz2
Если исходников на вспомогательном носителе нет - можно оставить его в покое, нужды в нем больше не возникнет. Если же исходники имеются - создаем в новообразованном каталоге /mnt/gentoo/usr/portage подкаталог distfiles и копируем в него все наши архивы исходных текстов:
$ cp /mnt/zip/src/* /mnt/gentoo/usr/portage/distfiles
Теперь они находятся именно там, где их ожидает встретить система портежей, прежде чем обращаться к Сети (и выдавать сообщение об ошибке при отсутствии подключения). А дополнительный носитель оставляем смонтированным - чтобы подсматривать в документацию через другой виртуальный терминал.
Теперь все готово к волнующему моменту - смене корневого каталога. Итак, командой
$ chroot /mnt/gentoo /bin/bash
объявляем каталог /mnt/gentoo корнем, одновременно запуская новый экземпляр командной оболочки (уже из нового источника). Теперь пересчитываем пути к системным библиотекам
$ env-update
ответом на что будет сообщение
Regenerating /etc/ld.so.cache...
И устанавливаем для нового экземпляра оболочки переменные окружения:
$ source /etc/profile
Все, мы - внутри системы Gentoo Linux, причем уже очень даже реальной, не имеющей никакого отношения к виртуальной системе, загруженной с Live CD. И далее все пути к файлам в абсолютной форме (типа /usr/portage) будут указываться с учетом того, что отныне наш / - это не что иное, как /mnt/gentoo.
Итак, мы уже как бы установили операционную систему Gentoo Linux (без перезагрузки, прошу обратить внимание). И вот тут-то и начинается самый охмурежь - рядом планомерных и последовательных действий мы можем после перезагрузки (ну куда же без нее) получить не просто полнофункциональную и аккуратно настроенную, но, не побоюсь громких слов, - идеально оптимизированную систему.
Требуемые к тому действия описываются в предположении: а) установки всех трех тарбаллов и системы портежей, б) помещения в каталог /usr/portage/distfiles (уже относительно нового корня - /mnt/gentoo) некоторого набора минимально необходимых исходников, и в) хоть какого-то соединения с Интернетом (на крайний случай). Без последнего можно, как я неоднократно говорил, и обойтись - но тут уж потребуется ювелирная точность в выборе предварительно скачанных (и ныне помещенных в /usr/portage/distfiles) архивов исходников.
В чем смысл этих действий? Да ни много, ни мало, как в полной пересборке базовой системы (те, кто имел дело с FreeBSD, неизбежно вспомнят тут make world) и доустановке необходимых компонентов. Поскольку это - не apt-get, и не установка прекомпилированных пакетов, все требуемое извлекается непосредственно из исходников. И потому первое, что нам потребуется - настройка условий компиляции.
Глобальные параметры сборки посредством системы портежей описываются в файле /etc/make.conf. Вызываем его в редакторе nano (не забыв про опцию -w, если не решили этот вопрос разом - определением псевдонима) и начинаем действовать.
Первое, что бросается в глаза после открытия вышеупомянутого файла - переменная USE. Смысл ее - в определении условий предкомпиляционного конфигурирования исходников. То есть, она эквивалента опциям --enable/disable или --with/without скрипта ./configure, с исполнения которого начинается ручная сборка любой программы. И, задав значения этой переменной (несложно догадаться, что указав
USE="gpm"
мы включаем поддержку службы консольной мыши во всех собираемых через портежи программах (разумеется, тех, где это имеет физический смысл). А задав значение
USE="-gpm"
таковую отключаем раз и навсегда (на самом деле - не совсем навсегда, но это тема отдельной беседы).
Список включенных по умолчанию значений переменной USE можно подсмотреть в файле /usr/portage/profiles/default-x86-1.4/make.defaults. А полный (и логично классифицированный) список доступных значений можно найти в файле документации - use-howto.html. Мы ведь списали его на дополнительный носитель? Да? - тогда можем вызвать с очередной виртуальной консоли...
Следующая переменная файла /etc/make.conf -
CHOST='i686-pc-linux-gnu'
Она указывает на архитектуру машины, на которой будут собираться программы. И ее, при необходимости, нужно будет привести в соответствие с реалиями оной. Правда, ныне такая необходимость возникнет редко - разве что поменять первую шестерку на пятерку в случае Pentium-просто...
А вот следующая строка,
CFLAGS="*"
очень важна. Ею задаются именно те флаги оптимизации, передаваемые компилятору (в данном конкретном случае - gcc версии 3.2) для оптимизации под конкретный процессор. Вдаваться в детали опять же не буду - и это тема особого, и очень подробного, разговора. Достаточно помнить, что флаг -O3 (а именно он указан здесь по умолчанию) устанавливает самый высокий уровень оптимизации, а оба флага -mcpu=* и -march=* указывают, под какой именно процессор оптимизировать следует. Различие между ними - в том, что программа, собранная с флагом -mcpu=i686, будучи оптимизирована под класс процессоров Pentium Pro и выше (а с формальной точки зрения, и P-II, и P-III, и даже P-4 принадлежат к нему), теоретически способна запуститься и на Pentium-100, тогда как флаг -march=athlon-xp потребует именно того процессора, который указан - даже на просто Athlon'е скомпилированная с ним программа работать не будет.
Короче говоря, к указанию значений CFLAGS= следует относиться внимательно. В частности - проверено на собственном опыте, - глобальное задание значения
CFLAGS="-march=pentium4 -O3"
при наличии соответствующего процессора (и, повторяю, именно версии 3.2 gcc) дает просто научно-фантастическое повышение интегрального быстродействия системы: именно тут-то я впервые понял, что мой P-4/1,9 Гц (даже с памятью SDRAM PC-133) стоит тех денег, которые я отдал за него год назад.
Смысл переменной
CXXFLAGS=
аналогичен - только для программ, написанных не на Си, а на Си++. И ее имеет смысл определить просто, через переменную CFLAGS=
CXXFLAGS="${CFLAGS}"
как это и сделано в example-файле. Остальные строки которого определяют условия скачивания (в частности, ftp-клиента по умолчанию). Менять их на данном этапе - оснований не вижу, кроме разве что идиосинкразии к wget, используемому по умолчанию.
Определившись с условиями, можно начинать перестройку. Для этого меняем каталог
$ cd /usr/portage
и запускаем сценарий
$ scripts/bootstrap.sh
Он производит сборку пакетов binutils, gcc, gettext и glibc (замещая установленные из тарбаллов прекомпилированные их варианты), а после сборки glibc - пересборку binutils, gcc и gettext. Достигая, таким образом, их идеальной оптимизации... Хотя и ценой временных затрат - процесс даже на мощной машине вполне может занять часок-другой.
Теперь можно полюбоваться на список пакетов, установленных в нашей системе - ибо это и есть тот самый base Linux с очень небольшими коррективами. Для этого даем команду
$ emerge -p system
Если есть желание, время, а главное - полный набор исходников в /usr/portage/distfiles, можно завершить пересборку базовой системы /командой
$ emerge system
Здесь без постоянного коннекта с очень большой вероятностью рано или поздно последует сообщение об ошибке - о невозможности получить пакет имя_рек с такого-то адреса. Если имеется модем, к подбору исходников мы подошли ответственно, - не беда: активизируем еще одну виртуальную консоль (а на ней будет жить наша первозданная Live-система с CD) и прозваниваемся до провайдера через программу wvdial (а она у нас пока существует только в той самой виртуальной Live-системе), а потом повторяем последнюю команду. И, скорее всего, дело было в каком-нибудь исконно Gentoo'ском патчике объемом в пару килобайт, так что процедура эта нас не разорит. Если же обуяет приступ жадности, можно просто продолжить, а к emerge system вернуться в другой раз - после полного зеркалирования каталога distfiles с сайта Gentoo, и за казенный счет, разумеется :-)
На предыдущем этапе были перестроены все компоненты базовой системы, кроме одного - зато самого главного: ядра системы. Перекомпиляция ядра - процедура, рано или поздно неизбежная для пользователя любого дистрибутива Linux, даже самого user-ориентированного. Перед пользователем же Source Based дистрибутива она встает с неотвратимостью рока уже при установке системы.
Gentoo - опять не составляет исключения. Хотя в заключительных разделах я расскажу, как при крайней необходимости можно обойти этот этап, однако по хорошему к тому нет никаких причин. И потому, хотя тема пересборки ядра - совершенно отдельная, и нам придется еще не раз к ней возвращаться, применительно случаю постараюсь осветить ее здесь в минимально возможном объеме.
Чтобы пересобрать ядро, для начала нужно иметь его исходники. Ни на инсталляционном диске, ни в составе тарбаллов stage2-3 мы их не найдем. Что делать?
При подключении к Сети - все просто: к нашим услугам система портежей. Отправляемся в каталог /usr/portage, просматриваем содержимое подкаталога sys-kernel - и остается только дивиться свалившемуся на голову богачеству: даже отметая классово чуждые портежи ядер для Sparc, PPC, Alpha, на выбор предоставляется чуть не дюжина вариантов. Подчеркну, речь идет не о прекомпилированных ядрах, а именно о вариантах исходников, снабженных патчами, обеспечивающими дополнительные опции относительно ядра первозданного.
Разумеется, и последнее, каноническое ядро от Линуса Торвальдса - тоже доступно (под известным именем vanilla-sources) для тех, кто хочет быть святее папы римского. Далее - фирменная коронка, gentoo-sources - всем оно хорошо, но не поддерживает файловой системы XFS (однако если в последней нет необходимости, это - лучший выбор с точки зрения функциональности). Но и это не проблема - есть ядро, само название которого (xfs-sources) такую поддержку явным образом обещает. Ну и ac-sources - ядро от Алана Кокса, в патчах которого обычно воплощены новейшие достижения ядреной науки и техники.
Прочие варианты более специфичны: development-sources - ядро разрабатываемой, 2.5-й, ветки (слабонервным к употреблению не рекомендуется; как впрочем, и тем, кому нужно просто работать); usermode-sources - ядро для запуска Linux в Linux, в т.н. пользовательской моде (предназначается обычно для тестирования); openmosix-sources - ядро с поддержкой одноименной (openMosix) кластерной технологии. О прочих доступных вариантах говорить даже затрудняюсь за незнанием их особенностей.
Так что в этих условиях главное - определиться с выбором (для меня он ныне однозначен - см. следующую строку). А потом - простая команда
$ emerge sys-kernel/xfs-sources
некоторый период ожидания, пока скачиваются сами исходники ядра (последней стабильной версии - 2.4.19) и все необходимые патчи (для ядра xfs-sources, например, требуются оригинальные патчи от SGI), еще чуть-чуть времени на развертывание архивов - и вперед, в каталог /usr/src/linux для конфигурирования.
При наличии предусмотрительно скачанных исходников ядра, наиболее явно необходимых патчей и модемного подключения - сложнее, но не намного. Выполняем ту же команду. Если повезет - все по прежней схеме, но предупреждаю, шансов на это мало: почти наверняка при предварительном скачивании какой-то Gentoo-специфичный патч будет пропущен (учтем также наше пока еще очень ограниченное знакомство с системой портежей вообще - в дальнейшем такой ситуации можно и избежать). Но не беда: получив сообщение об ошибке, соединяемся с Сетью и либо скачиваем недостающий патч вручную (хоть через браузер lynx - полный адрес к недостающему компоненту будет выведен), либо (и это, товарищи, правильнее) запускаем процедуру по новой. Разорвав соединение по завершении установки исходников ядра.
И не нужно бояться, что это больно ударит по карману: при соединении по линии, способной вынести протокол V90, скачивание большинства патчей занимает минуты. И wget при обрыве коннекта способен к докачке - так что непроизводительные расходы сведены к минимуму.
Хуже, если нет ни полного комплекта исходников, ни модема. И это не смертельно, но придется кое-чем поступиться (надеюсь, не принципами). То есть: просто тупо распаковываем архив исходников ядра в каталог /usr/src, распаковываем и накладываем минимально необходимые патчи, далее - обычным порядком, как описано ниже. Можно и просто ограничиться каноническим ядром Линуса. Недостаток - кроме возможных потерь некоторых функций, эти действия не будут зафиксированы в базе дынных портежей (имеющей место пребывания в каталоге /var/db/pkg), то есть система портежей о них как-бы и не узнает (на самом деле - не совсем, но все равно - этот способ может рассматриваться как временное решение).
И еще одно временное решение - вообще отказаться от пересборки ядра. А как при этом получить возможность загрузить систему - я расскажу под занавес (если вы к тому времени сами не догадаетесь).
В любом случае, кроме последнего, исходники ядра мы получили, так что можно отправляться в вышеупомянутый каталог /usr/src/linux (или /usr/src/linux-номер_версии-имя_варианта, без разницы, - первый лишь символическая на него ссылка). И давать команду
$ make menuconfig
которая сгенерирует меню настройки опций ядра. Отвечать черному экрану могут выбрать и make config - но я к ним не принадлежу.
Сам процесс конфигурирования описывать не буду - это совсем другая история. Отмечу только обязательные опции. Первая из них - поддержка экспериментальных и разрабатываемых опций: большинство продвинутых возможностей ядра Linux описываются именно этими терминами (что не мешает большинству функционировать вполне справно). В секции файловых систем необходимо отметить поддержку файловых систем процессов (procfs), файловой системы виртуальной памяти (Virtual Memory Filesystem) и файловой системы устройств (devfs). И, конечно же, тех файловых систем, которые были размещены на созданных разделах (например, XFS или ext3fs - про поддержку ext2fs, надеюсь, не забудет ни один линуксоид). Ну и учесть поддержку требуемых устройств - сами знаете, что у вас вкручено в машине.
Закончив с конфигурированием, выходим из системы меню (не забыв сохранить изменения) и даем последовательность команд:
$ make dep $ make clean $ make bzImage $ make modules $ make modules_install
Разумеется, не обязательно последовательно, можно и одной строкой, разделяя символом ; (или, правильнее, &&). А то и вообще в форме, рекомендованной руководством:
$ make dep && make clean bzImage modules modules_install
Теперь остается только скопировать образовавшийся образ ядра в загрузочный каталог
$ cp /usr/src/linux/arch/i386/boot/bzImage /boot
И ядерный вопрос можно считать закрытым. Хотя остается еще вопрос, косвенным образом с ним связанный - программы поддержки файловых систем. Их, в соответствие с выбором и предпочтениями, устанавливаем через систему портежей, например, команда
$ emerge sys-apps/xfsprogs
установит все необходимое для работы с файловой системой XFS. Напомню, что архив исходников пакета xfsprogs должен иметься в каталоге distfiles.
Попутно через систему портежей можно установить и другие программы, однако я пока ограничился бы только тем, что облегчит завершение конфигурирования, а именно - службой консольной мыши:
$ emerge sys-libs/gpm
А теперь активизируем ее. Если мы имеем наиболее типичного ныне грызуна с колесиком и под разъем PS/2, это будет выглядеть так:
$ gpm -t imps2 -m /dev/psaux
И на следующих этапах гораздо проще будет выделять нужные фрагменты и вставлять их щелчком средней клавиши, нежели набрать вручную.
Собственно установка на этом закончена. Осталось довести систему до идеала не только изнутри, но и снаружи. И первый шаг здесь - настройка часового пояса: для Source Based дистрибутивов это не последнее дело (утилита управления компиляцией make обращает внимание на даты создания файлов). Реализуем просто: созданием символической ссылки
$ ln -sf /usr/share/zoneinfo/path/timezonefile /etc/localtime
Рискну предположить, что компонент пути path/timezonefile для большинства моих читателей окажется в диапазоне от Europe/Kaliningrad до Asia/Kamchatka (наличие Анадыря в нашей стране почему-то упорно игнорируется - но, слава богу, хоть о Петропавловске-Камчатском знают). Если системное время в BIOS установлено на не время по Гринвичу, дополнительно потребуется внести коррективы в файл /etc/rc.conf (но об этом - позднее).
Теперь увековечим монтирование новых файловых систем. Как - очень просто, лобовым редактированием ответственного за сие файла /etc/fstab. Вызываем его:
$ nano -w /etc/fstab
И видим, если исключить комментарии, следующую картину:
/dev/BOOT /boot ext2 noauto,noatime 1 1 /dev/ROOT / xfs noatime 0 0 /dev/SWAP none swap sw 0 0 /dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0 proc /proc proc defaults 0 0 #tmpfs /dev/shm tmpfs defaults 0 0
Если мы следовали рекомендациям инструкции, остается только заменить символы верхнего регистра конкретными реалиями, как то: /dev/hda1, /dev/hda3, /dev/hda2. Или, что будет более корректно, /dev/discs/disc0/part1 и т.д., сняв при этом комментарий со строки #tmpfs. Если же использовалась какая-либо иная схема разбиения - можно в одной из ранее активизированных консолей с помощью команды mount без аргументов подсмотреть, какой раздел с какой файловой системой куда монтировался. И просто перетащить мышью (не зря же мы ее запускали) соответствующие значения в наш /etc/fstab. Ну и всякого рода коррективы (типа монтирования FAT-разделов, флоппи-дисков, zip-накопителей и еще чего требуется) также никто не запрещает.
Внимательный читатель обратил внимание - в строке /dev/BOOT по умолчанию стоит значение noauto, предписывающее не монтировать соответствующий раздел автоматически при старте системы. Именно так рекомендуется делать при использовании GRUB - он принят в Gentoo в качестве загрузчика по умолчанию. Так вот, настало время обеспечить загрузку системы. Для этого даем команду grub и после появления одноименного приглашения последовательно вводим:
grub> root (hd0,0) grub> setup (hd0)
вслед за чем выходим из программы:
grub> quit
Начальный загрузчик установлен в первый раздел первого диска, тот самый, который в текущий момент смонтирован у нас как /boot. И который в дальнейшем не будет монтироваться автоматически - дополнительная защита, в первую очередь от человеческого фактора. Так что в дальнейшем не следует удивляться, если, собрав новое ядро системы, вы не сможете его сразу скопировать в каталог /boot - предварительно оный придется смонтировать вручную.
Теперь остается GRUB настроить. Для этого посредством того же редактора создаем файл его меню:
$ nano -w /boot/grub/menu.lst
и записываем в него две секции. Строки первой относятся к GRUB в целом:
default 0 timeout [значение_в_секундах] splashimage=(hd0,0)/boot/grub/splash.xpm.gz
Она указывает на ОС, загружаемую по умолчанию, время ожидания выбора в секундах и описывает путь к файлу графической заставки. Последняя штатно - нечто вроде аметиста с морионовым оттенком. Не нравится - заставку можно убрать (стерев или закомментировав третью строку). Или - изготовить собственную соответствующем формате.
Вторая секция описывает непосредственно загрузку Gentoo.
title=My Love Gentoo Linux root (hd0,0) kernel /boot/имя_образа root=/dev/hda3
Первая строка - произвольное название пункта меню. Вторая определяет имя устройства, с которого будет загружаться система. Имя это дается в нотации GRUB, отличной от принятой в Linux: дело в том, что GRUB способен загрузить ядро с несмонтированной файловой системы, относящейся к незагруженной операционке. И это распространяется не только на Linux, но на практически любую ОС из клана свободных Unix'ов (например, на FreeBSD или OpenBSD).
В третьей строке определяется имя образа ядра, подлежащего загрузке, и устройство, на котором после этого будет располагаться корневая файловая система. Если мы собирали собственное ядро, в качестве образа будет выступать тот самый файл /boot/bzImage, который был скопирован в каталог /boot после компиляции. Если же ядро не собиралось, значение kernel, как будет показано ниже, проще всего определить как /boot/linux. А имя устройства с корневым каталогом на этот раз дается в нотации Linux - ведь соответствующее ядро уже загружено, и оно знает, что такое /dev/hda?.
Напомню еще раз, что все действия по редактированию меню GRUB можно выполнить, просто перетаскивая мышью соответствующие фрагменты руководства (там приведены все необходимые примеры) в наш /boot/grub/menu.lst и редактируя их в соответствии с собственными реалиями.
Настройкой загрузчика можно считать завершенной официальную часть инсталляции. Однако для полного счастья не хватает еще некоторых штрихов. Так, руководство рекомендует (и это - более чем резонно) оптимизировать режим работы жесткого диска на предмет использования DMA - что весьма способствует его быстродействию. Для такого рода штук предназначен файл /etc/conf.d/local.start. Открываем его в редакторе и после комментария (по умолчанию там больше ничего нет) приписываем строку
hdparm -d 1 /dev/hda
Если физических дисков больше одного - повторяем ее для каждого устройства. А затем, воспользовавшись случаем, обеспечим здесь же и загрузку консольной мыши при старте системы:
gpm -t imps2 -m /dev/psaux
Впрочем, это - лишь один из способов включения поддержки мыши. Другой, идеологически более правильный, описан в статье про rc-скрипты.
Теперь обратимся к локализации. Не смотря на свое исходно американское происхождение, Gentoo - дистрибутив интернациональный (это ясно из состава команды его разработчиков). И потому в нем есть все базовые средства для работы с языками, отличными от американского. Нужно только немного потрудиться для их активизации.
Достигается это можно редактированием файла /etc/rc.conf. Что может показаться необычным для пользователей Linux. Но мы помним, что в Gentoo принят порядок начальной загрузки в стиле BSD (а не в стиле Sysem V, как в большинстве распространенных дистрибутивов Linux, за исключением Slackware и его сородичей). Впрочем, вдаваться в подробности пока не буду - это тема для отдельной беседы. Пока же - голая практика: все, что мы хотим видеть загруженным при старте машины, должно быть явным образом указано в файле /etc/rc.conf. И именно в том порядке, в каком требуется.
Так что открываем этот универсальный файл
$ nano -w /etc/rc.conf
отыскиваем в начале его строку
KEYMAP="us"
и заменяем чуждую нам Америку на что-нибудь родное, от братчиков Кирилла и Мефодия. Что именно - определяем в какой-либо из иных виртуальных консолей командой
$ ls /usr/share/keymaps/i386/qwerty/ru*
В ответ она выведет на экран такой список:
/usr/share/keymaps/i386/qwerty/ru1.map.gz /usr/share/keymaps/i386/qwerty/ru2.map.gz /usr/share/keymaps/i386/qwerty/ru3.map.gz /usr/share/keymaps/i386/qwerty/ru4.map.gz /usr/share/keymaps/i386/qwerty/ru-cp1251.map.gz /usr/share/keymaps/i386/qwerty/ru.map.gz /usr/share/keymaps/i386/qwerty/ru-ms.map.gz /usr/share/keymaps/i386/qwerty/ru_win.map.gz /usr/share/keymaps/i386/qwerty/ru-yawerty.map.gz
Можно видеть, что в нем присутствуют кириллические раскладки на все случаи жизни (а пути к ним, хотя и взяты с Live CD, соответствуют тем, что будут в инсталлированной системе). Дело, конечно, сугубо личное (я бы даже сказал, интимное), но по мне предпочтительна ru4: это раскладка для кодировки KOI8-R с Windows-маркировкой клавиш (не путать с собственно раскладкой для Windows-кодировки - ее, как видно из списка, тоже можно использовать) и переключением с латиницы на кириллицу по нажатию CapsLock. Так что вписываем
KEYMAP="ru4"
и переходим к следующей строке, определяющей экранный шрифт консоли - CONSOLEFONT. Очевидно, что умолчальное ее значение описывает шрифт без символов кириллицы. Но - их у нас есть, в чем легко убедиться, просмотрев каталог /usr/share/consolefonts. Шрифтов там немерянно, и среди них легко отыскиваются семейства alt-*.psf.gz и cp866-*.psf.gz. И то, и другое нам (почти) подходит - это экранные шрифты с символами кириллицы в кодировке CP866 (она же - альтернативная, кодировка DOS или IBM). Почему так - ведь мы только что установили раскладку KOI8-R для клавиатуры, да и шрифты (семейства koi8r-*.gz), имеются? Распространяться не буду, ограничившись словами: это лучше, Леня.
А слово "почти" я добавил потому, что все имеющиеся стандартно кириллические шрифты далеки от совершенства как эстетически, так и медицински. Так что в дальнейшем лучше будет воспользоваться шрифтами из пакета Виктора Вагнера console-tools-cyrillic - там есть очень симпатичные экземпляры, но об этом - как-нибудь в другой раз. Пока же просто вписываем, например,
CONSOLEFONT="cp866-8x16"
И начинаем рассуждать логически: как же так, раскладка клавиатуры KOI8, а кодировка экранного шрифта - CP866. Ясно, что без загрузки карты трансформации одного в другое не обойтись. И такая карта у нас есть тоже - в каталоге /usr/share/consoletrans обнаруживаем файл koi2alt. Имя которого и вписываем в строку
CONSOLETRASLATION="koi2alt"
сняв с нее предварительно стоящий по умолчанию комментарий. Откладываем в уме, что таким образом карта соответствия будет загружена только на одной, первой, из виртуальных консолей (она же - консоль системная) - к этому мы еще вернемся. А пока, дабы покончить с файлом /etc/rc.conf, вспоминаем, что системные часы нашей машины установлены по местному часовому поясу (скорее всего - хотя в последнее время я осознал преимущества времени гринвичского) - тому самому, который мы определили через файл-ссылку /etc/localtime. И обращаем внимание, что строка
CLOCK="UTC"
указывает у нас, напротив, именно на время по Гринвичу (UTC=GMT). Заменяем UTC на localtime - и файл /etc/rc.conf можно закрывать (прочие его строки, описывающие различные протоколы, можно оставить без изменений, если вам лично не известны веские причины их сделать).
А вот теперь пора довести до конца дело с картами соответствия. Открываем файл /etc/init.d/local: как явствует из названия, он предназначен для всякой всячины местного значения (и исполняется после всех остальных конфигурационных файлов). И вставляем в его конец с помощью редактора (или перетаскиваем мышью из данного руководства) простенький скрипт (оператор цикла):
for i in 1 2 3 4 5 6 do echo -ne '(K' > /dev/vc/$i done
В первой его строке определяется значение переменной i (ее можно обозвать любым другим образом) как диапазона цифр от 1 до 6 (по умолчанию у нас именно шесть виртуальных консолей), вторая - указывает, что следующей строкой будет тело цикла. А тело цикла - вывод "магической последовательности" ESC-(K (именно она и обеспечивает активизацию карты соответствия) и ее перенаправление на виртуальные консоли, номера которых заданы переменной i, то есть /dev/vc/1 - /dev/vc6. Это - если используется файловая система устройств (devfs), в противном случае (если не был снят комментарий со строки tmpfs в файле /etc/fstab) имена консолей будут обычными - /dev/tty0 - /dev/tty5.
Тот же скрипт для активизации магической последовательности можно сделать и самостоятельным, как это показано в статье об rc-скриптах.
Отступление для любовников (или невольников) кодировки CP1251. Все сказанное о русификации применимо и к ней. Нужно только определить в файле /etc/fstab загрузку соответствующих раскладки клавиатуры (они, как уже говорилось, имеются) и карты соответствия CP1251->CP866. А вот ее придется поискать (где - за ненадобностью не помню) или просто слямзить из любого отечественного дистрибутива - Altlinux или ASPLinux.
Все же открою секрет - почему в консоли в любом случае предпочтительны экранные шрифты в кодировке DOS. Так уж исторически сложилось: вследствие аппаратных особенностей VGA-адаптеров (а в консоли мы имеем дело именно с режимом VGA, сколь бы крутой GeForce не стоял в машине) только они обеспечивают нормальный вывод на экран символов псевдографики. Кроме того, их просто больше, и некоторые среди них, как я говорил, лучше. Так что есть резон загружать именно их, даже если программы с псевдографикой не используются совсем. В том числе и Midnight Commander - но какой же русский не любит детей командира Нортона!
Мы же пока завершим русификацию. Для чего установим собственно локаль последней строкой в файле /etc/init.d/local (опять прекрасный каламбур, господа!):
export LANG="ru_RU.KOI8-R"
Она обеспечит установку всех локально-зависимых переменных (не только страны, языка, набора символов, но и формата даты, времени, денежной единицы, и так далее) в значения, принятые для нашей многострадальной Отчизны. Тем не менее, для представления чисел я сделал бы исключение, добавив строку
export LC_NUMERIC="POSIX"
Ведь в любых программах, связанных со счетом, удобнее оперировать с десятичной точкой, а не запятой (а говорят, что некоторые такие программы этого просто требуют).
В итоге, выполнив несложную последовательность действий, мы получили корректно русифицированную систему - русифицированную ничуть не хуже, чем те дистрибутивы, кириллической поддержкой в которых гордятся (и - справедливо гордятся) именитые отечественные разработчики - Altlinux и ASPLinux. А поскольку мы сделали все это своими руками и с полным пониманием сути действий, у нас тоже есть основание для гордости. Так что с установкой Gentoo пора завязывать, дабы отметить это радостное событие.
Можно, конечно, активизировав внесенные в конфигурацию изменения командой etc-update, продолжать устанавливать программы (Иксы, например). Или даже начинать обычную работу - установленная система, внутри которой мы находимся, это вполне уже позволяет. Однако для полной проверки лучше все-таки сначала перезагрузиться.
Итак, временно расстаемся с нашим новым Gentoo командой exit, после чего вновь оказываемся в системе Live CD, той же командой зарываем все виртуальные консоли, кроме первой (а у нас их могло расплодиться немало) и готовимся к выходу.
Хотя - стоп. А собирали ли мы при установке ядро системы. Если да - все в порядке, тотальный unmount:
$ umount /mnt/gentoo/boot $ umount /mnt/gentoo
и что было смонтировано руками, а затем - reboot (или halt, если есть желание прерваться - при первой загрузке хорошо бы внимательно следить за ее ходом по сообщениям на экране).
Если же ядро не собиралось (за отсутствием каких-то исходников - другого оправдания такому разгильдяйству нет), то совершаем последнее установочное действие: просто тупо копируем ядро с Live CD (оно, как мы уже убедились, не только работоспособно, но и поддерживает большинство жизненно необходимых функций):
$ cp /cdroot/boot/linux /mnt/gentoo/boot/
Правда, у нас не собиралось не только ядро, но и модули. И это не беда, их тоже копируем с CD:
cp -R /cdroot/lib/modules /mnt/gentoo/lib/modules
А далее - все то же, размонтирование и перезагрузка. Конечно, в ходе ее мы рискуем получить кое-какие сообщения об ошибках, но, по моему опыту - ни одна из них не критична. И загрузившаяся система будет вполне пригодной к использования. По крайней мере, до тех пор, пока не разживемся всеми необходимыми архивами и все-таки ядро не пересоберем - от этого все равно не уйти.
У терпеливого читателя, добравшегося до этих строк, может возникнуть три совершенно законных вопроса: не слишком ли все это сложно, на кой все это нужно, и кому все это нужно. Постараюсь ответить последовательно.
Относительно сложности - могу заверить, что это из той самой оперы, когда глаза боятся, а руки делают. Проверено на собственном опыте - причем первый из них проводился в подмосковной деревне, где не то что постоянного подключения к Сети - и телефона-то с модемом не было. И все исходники скачивались на службе (в полутора часах езды) и таскались домой на CD и съемном винчестере. И если праведно выполнять все заветы инструкции по установке, то сложностей возникнет не много (надеюсь, что и настоящий мемуар поспособствует их преодолению). Я, например, в итоге не смог победить одно: нормальную совместную работу USB-мыши в консоли, Иксах и с SVGAlib-приложениями - сдавшись, поставил переходник на PS/2. Ну и с аппаратным RAID'ом была напряженка - но тут уж виноват был он сам (вернее, lite-версия его BIOS'а). Все прочие трудности преодолевались.
Второй вопрос - а зачем их было преодолевать, когда можно легко и быстро развернуть любой пакетный дистрибутив, разработчики которого уже решили все мои проблемы. Отвечаю: решить-то они решили, но - не скажу плохо, просто в меру своих представлений, как это нужно народу (и конкретно мне, как его представителю). Gentoo же позволяет не просто поставить систему, идеально оптимизированную под железо, но и настроить ее тоже в соответствие именно со своим представлением об идеале. Причем - с полным осознанием, что и зачем делается, немало способствующим общему образованию.
Ну а третий ответ очевиден из второго. Дистрибутив Gentoo нужен пользователю, которому требуется система, настроенная на максимальную производительность для конкретной тяжелой задачи - счетной, графической, GIS или CAD. Разработчику, которому надоело проводить время компиляции тысяч и тысяч строк кода за игрой в тетрис. Сисадмину, у которого в системе не должно быть ничего лишнего, но все необходимое должно быть. Изучающему Linux, которого не устраивают готовые рецепты, предлагаемые руководствами пакетных дистрибутивов. И наконец, тому, кто просто стремится к идеалу - путь идеал этот и недостижим...
Основной источник информации о дистрибутиве Gentoo - документация на официальном сайте проекта.
Сведения о дисковых разделах, файловых системах и их
монтировании, необходимые для подготовки к инсталляции Gentoo,
можно найти в моих статьях:
На чем размещается Linux.
Upgrade, 2002#36(74), с. 30-33 (версия
on line).
Установка Linux. Шаг первый. Открытые
системы, 2002#11 (в печати).
Множество полезных сведений, относящихся к файловым системам, - в цикле статей Дэниела Роббинса "Руководство по продвинутым файловым системам" (русский перевод.
Подробные сведения о загрузчике GRUB - в статье Владимира Попова GRUB... действительно гранд!(Софтерра on line). Он же - автор статьи Init...etc., из которой можно узнать о различии стилей начальной загрузки. Правда, обе они, в связи с реконструкцией сайта, временно недоступны - но попробовать поискать их можно среди old.softerra.ru/freeos.
История создания дистрибутива Gentoo была описана его автором в цикле Making the distribution: Part 1, Part 2, Part 3.
А узнать подробнее о замечательной птице-эпониме
дистрибутива и посмотреть на него самого можно на многих
сайтах, например:
Gentoo
penguin
Wildlife
Photography: The Gentoo Penguin
BBC
- Nature Wildfacts - Gentoo penguin