Gentoo Linux: установка и настройка

Алексей Федорчук
2002-2003 гг

Вступление: это сборник моих заметок про Gentoo, написанных в то время, когда я был пользователем этого дистрибутива. Кое-что из приводимого ниже безнадежно устарело, но кое-что может помочь и ныне. — 2006.03.07

О Gentoo Linux

Gentoo Linux — один из типичных представителей т.н. Source Based дистрибутивов. То есть систем, основанных не на прекомпилированных бинарных пакетах, а собираемых непосредственно из исходных текстов. Gentoo относительно молод, но известностью сравнялся с такими ветеранами дистростроения, как Red Hat или Debian.

Gentoo создан в 2001 г. Дэниелем Роббинсом, бывшим до того одним из участников проекта Linux Stampade, а ныне пошедшим на службу классовому врагу. Однако сам дистрибутив от этого не пострадал, так как поддерживается интернациональной командой разработчиков из самых разных стран. Официальный сайт проекта — gentoo.org.

С самого начала Gentoo являл собой синтез наиболее передовых технологий Linux с традиционными достижениями BSD-систем (в первую очередь — FreeBSD). В частности, в нем приняты сценарии начальной загрузки системы в BSD-стиле — большинство популярных дистрибутивов Linux наследуют схему инициализации системы, унаследованную от Unix System V (именно она была принята за основу Линусом Торвальдсом при создании своего ядра).

Главная особенность Gentoo также идейно унаследована от FreeBSD. В последней, как известно, только базовые компоненты (т.н. Distribution) устанавливаются из прекомпилированных пакетов. Для установки же пользовательских приложений предназначена т.н. система портов. Это — набор средств для автоматизированного получения из Сети (с мастер-сайтов разработчиков или их официальных зеркал) исходных текстов программ, их конфигурирования, компиляции, установки и регистрации в специальной базе данных. Конечно, и FreeBSD поставляется с наборами прекомпилированных пакетов (packages), однако роль их сугубо вспомогательная.

В Gentoo концепция портов (именуемых здесь портежами — Portages) проводится еще более последовательно, чем во FreeBSD. Поскольку здесь этим путем можно установить (или — обновить) не только прикладные программы, но и все базовые компоненты системы, вплоть до ядра, компилятора gcc и главной системной библиотеки glibs.

Система портежей Gentoo позволяет, во-первых, очень гибкое конфигурирование системы, с подбором только необходимых (и осознанно выбираемых) приложений. Во-вторых, она открывает путь для оптимизации системы не только под различные архитектуры (а на данный момент дистрибутивом поддерживаются, кроме i86, также Sparc, PowerPC и Alpha), но и под конкретные типы процессоров. Кроме того, в ней предусмотрены средства генерации бинарных пакетов (аналог packages FreeBSD), которые могут быть установлены на целевую платформу, отличную от host-машины. И, более того, пакеты эти также могут быть оптимизированы с учетом особенностей целевой (например, более слабой) машины.

Дополнительным плюсом дистрибутива Gentoo является его прекрасная документированность. На сайте проекта доступны Gentoo Handbook и множество более частных источников информации, ряд из которых переведен на русский язык.

Название дистрибутива (произносится как «джен-ту») может показаться несколько странным. Но объясняется просто — это один из видов пингвина (научное название Pygoscelis papua), обитающий на Циркум-Антарктических островах (Фолклендских, Кергелен, Южная Георгия).

В специальной литературе можно прочитать, что джен-ту отличается небольшим размером и стремительностью. Именно эти его качества и воплощены в дистрибутиве Gentoo.

Получение дистрибутива

Все версии дистрибутива Gentoo доступны на основном сервере проекта и на ряде его зеркал. Скачивание — по протоколам http и ftp, разумеется, свободно и бесплатно. Конечно, за некоторую сумму можно заказать и CD-вариант, но в наших условиях это не актуально.

Процесс получения Gentoo имеет некоторые особенности, отличающие его от получения (приобретения) любого пакетного дистрибутива. Если для последнего достаточно скачать iso-образы CD-дисков и записать их на соответствующие носители, продуктивное использование Gentoo требует выхода в Интернет. Правда, не обязательно с той же машины, на которую он устанавливается — вполне допустима ситуация, когда необходимые компоненты получаются, например, по рабочему каналу, а сама система устанавливается дома.

И так, первое, что необходимо для установки — скачать образ инсталляционного диска. Объемы образов — достаточно скромны, обычно около 200 Мбайт (в зависимости от версии). Образы эти являют собой Live CD — то есть фактически полноценную Linux-систему, запускаемую с компакт-диска. И включающую набор не только системных утилит, но и пользовательских приложений.

Образ инсталляционного диска обычно содержит все необходимое для установки. Однако в некоторых версиях его оказывается недостаточно — потребуется еще три архива (*.tar.bz2), содержащие (в прекомпилированном виде) компоненты базовой системы. Первый из них (файл stage1-*, объемом около 10 Мбайт) специфичен для архитектуры (i86, PowerPC, Sparc и т.д.). Два других тарбалла (stage2-* и stage3-*, около 50 и 80 Мбайт, соответственно), кроме этого, для PC-архитектуры представлены в нескольких вариантах, оптимизированных под конкретные процессоры: от i486 до Pentium-4 (включая и Athlon). Ясно, что скачиванию подлежат только тарбаллы, соответствующие реалиям пользователя.

Далее, для установки пре-релиза потребуется скачать архив системы портежей — один из файлов вида 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-ядро собрано с поддержкой абсолютно всех опций, которые могут потребоваться при установке (встроенной в ядро или модульной).

И потому первое действие после старта системы — загрузка всех необходимых модулей. Это будут модули поддержки:

  • устройств хранения данных — SCSI-адаптеров, контроллеров IDE-RAID, Zip-приводов (atapi-floppy, в терминологии Linux), короче, всего, на что мы собираемся устанавливать систему или считывать устанавливаемые компоненты;
  • файловых систем: это потребуется, только если устанавливаемые тарбаллы и архивы исходников размещены на разделе с файловой системой FATxx — поддержка всех родных (native) файловых систем Linux, включая XFS, встроена в установочное ядро);
  • сетевого адаптера — если таковой, вместе с постоянным подключением к Сети, имеется;
  • соединения ppp — это даст возможность использовать при установке модемное подключение к Сети.

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

 $ modprobe имя_модуля

В остальных случаях это придется сделать вручную, командой

 $ insmod имя_модуля

Имена поддерживаемых модулей можно посмотреть (авторизовавшись в следующей виртуальной консоли) в соответствующих подкаталогах каталога /lib/modules/2.6.XX.X/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

Итак, мы уже как бы установили операционную систему 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-XX/make.defaults. А полный (и логично классифицированный) список доступных значений можно найти в файле документации — use-howto.html. Мы ведь списали его на дополнительный носитель? Да? — тогда можем вызвать с очередной виртуальной консоли…

Следующая переменная файла /etc/make.conf —

 CHOST='i686-pc-linux-gnu'

Она указывает на архитектуру машины, на которой будут собираться программы. И ее, при необходимости, нужно будет привести в соответствие с реалиями оной. Правда, ныне такая необходимость возникнет редко — разве что поменять первую шестерку на пятерку в случае Pentium-просто…

А вот следующая строка,

 CFLAGS="*"

очень важна. Ею задаются именно те флаги оптимизации, передаваемые компилятору для оптимизации под конкретный процессор. Вдаваться в детали опять же не буду — и это тема особого, и очень подробного, разговора. Достаточно помнить, что флаг -O3 (а именно он указан здесь по умолчанию) устанавливает самый высокий уровень оптимизации, а оба флага -mcpu=* и -march=* указывают, под какой именно процессор оптимизировать следует. Различие между ними — в том, что программа, собранная с флагом -mcpu=i686, будучи оптимизирована под класс процессоров Pentium Pro и выше (а с формальной точки зрения, и P-II, и P-III, и даже P-4 принадлежат к нему), теоретически способна запуститься и на Pentium-100, тогда как флаг -march=athlon-xp потребует именно того процессора, который указан — даже на просто Athlon’е скомпилированная с ним программа работать не будет.

Смысл переменной

 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, это — лучший выбор с точки зрения функциональности). Ну и ac-sources — ядро от Алана Кокса, в патчах которого обычно воплощены новейшие достижения ядреной науки и техники.

Есть и более специфичные варианты: usermode-sources — ядро для запуска Linux в Linux, в т.н. пользовательской моде (предназначается обычно для тестирования); openmosix-sources — ядро с поддержкой одноименной (openMosix) кластерной технологии, и т.д..

Так что в этих условиях главное — определиться с выбором. А потом — простая команда

 $ emerge sys-kernel/name-sources

некоторый период ожидания, пока скачиваются сами исходники ядра и все необходимые патчи , еще чуть-чуть времени на развертывание архивов — и вперед, в каталог /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

Теперь обратимся к локализации. Не смотря на свое исходно американское происхождение, 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.

Отступление для любовников (или невольников) кодировки 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 и съемном винчестере. И если праведно выполнять все заветы инструкции по установке, то сложностей возникнет не много (надеюсь, что и настоящий мемуар поспособствует их преодолению).

Второй вопрос — а зачем их было преодолевать, когда можно легко и быстро развернуть любой пакетный дистрибутив, разработчики которого уже решили все мои проблемы. Отвечаю: решить-то они решили, но — не скажу плохо, просто в меру своих представлений, как это нужно народу (и конкретно мне, как его представителю). Gentoo же позволяет не просто поставить систему, идеально оптимизированную под железо, но и настроить ее тоже в соответствие именно со своим представлением об идеале. Причем — с полным осознанием, что и зачем делается, немало способствующим общему образованию.

Ну а третий ответ очевиден из второго. Дистрибутив Gentoo нужен пользователю, которому требуется система, настроенная на максимальную производительность для конкретной тяжелой задачи — счетной, графической, GIS или CAD. Разработчику, которому надоело проводить время компиляции тысяч и тысяч строк кода за игрой в тетрис. Сисадмину, у которого в системе не должно быть ничего лишнего, но все необходимое должно быть. Изучающему Linux, которого не устраивают готовые рецепты, предлагаемые руководствами пакетных дистрибутивов. И наконец, тому, кто просто стремится к идеалу — пусть идеал этот и недостижим…