Ядро Linux — сердце каждого дистрибутива. В этой главе описывается, как его настроить. 5 2012-11-12
Часовой пояс

Сначала необходимо выбрать часовой пояс (time zone), чтобы система знала, где вы находитесь. Найдите подходящий пояс в /usr/share/zoneinfo. Затем скопируйте его в /etc/localtime. Постарайтесь, пожалуйста, избегать использования часовых поясов /usr/share/zoneinfo/Etc/GMT*, т. к. их названия не соответствуют ожидаемым поясам. Например, GMT-8 фактически является поясом GMT+8.

# ls /usr/share/zoneinfo
(допустим, вы хотите использовать Europe/Brussels)
# cp /usr/share/zoneinfo/Europe/Brussels /etc/localtime
(Далее, установим часовой пояс)
# echo "Europe/Brussels" > /etc/timezone
Установка исходных кодов ядра Выбор ядра

Ядро Linux — это то, вокруг чего формируются все дистрибутивы. Это слой между пользовательскими программами и вашим оборудованием. Пользователи Gentoo могут выбирать из нескольких типов ядра. Их полный список и описание находится в руководстве по выбору ядра Gentoo (англ.).

Для систем есть такое ядро, как gentoo-sources (ядро с заплатками для дополнительных возможностей).

С помощью команды emerge выберите и установите ядро.

# emerge gentoo-sources

Просмотрев содержимое каталога /usr/src, вы увидите символьную ссылку linux, которая указывает на каталог с исходными кодами ядра. В данном случае, установленный исходный код ядра указывает на gentoo-sources-. Имейте в виду, что ваша версия может отличаться.

# ls -l /usr/src/linux
lrwxrwxrwx    1 root     root           12 Oct 13 11:04 /usr/src/linux -> linux-

Теперь настало время настройки и компиляции ядра. Можно использовать сценарий genkernel, который сформирует стандартное ядро, аналогичное используемому на установочном компакт-диске. Однако сначала мы расскажем о «ручной» настройке ядра, так как это лучший из способов оптимизации системы.

Если вы собираетесь настроить ядро вручную, то переходите к разделу по умолчанию: ручная настройка. Если вы хотите использовать genkernel, то читайте альтернатива: использование genkernel.

По умолчанию: ручная настройка Введение

Ручная настройка ядра считается одним из самых сложных вопросов для пользователей Linux. Зато после настройки нескольких вариантов ядра вы и не вспомните, что это когда-то было трудно ;)

Однако есть одна непреложная истина: запуская ручную настройку ядра, следует знать состав аппаратуры своего компьютера. Большую часть информации можно собрать, установив пакет pciutils (emerge pciutils), в который входит lspci. lspci можно использовать, находясь в среде с временным корневым каталогом. Можно не обращать внимания на предупреждения, касающиеся pcilib (например: pcilib: cannot open /sys/bus/pci/devices [pcilib: не могу открыть /sys/bus/pci/devices]), которые выводит на экран lspci. Можно запустить lspci и вне временной среды установки. Результат тот же. Вы также можете запустить lsmod для просмотра модулей ядра, используемых установочным компакт-диском (это даст хорошую подсказку, какие параметры включать).

Теперь войдите в каталог с исходными кодами ядра и введите команду make menuconfig. Этой командой вы вызовете меню настройки, использующее ncurses.

# cd /usr/src/linux
# make menuconfig

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

Включение нужных пунктов

Удостоверьтесь, что каждый драйвер, жизненно необходимый для загрузки системы (например, SCSI-контроллера), собран внутри ядра, а не как модуль, иначе система вообще не сможет загрузиться.

Затем нам необходимо выбрать точный тип процессора. Человек, который занимается поддержкой x86_64 ядер настоятельно рекомендует пользователям включить возможности MCE, чтобы они могли узнать о любых проблемах с оборудованием. На x86_64 данные ошибки не пишутся в dmesg, как на других архитектурах, а пишутся в /dev/mcelog. Для этого необходим пакет app-admin/mcelog. Удостоверьтесь, что вы выбрали опцию IA32 Emulation, если вы хотите запускать 32-битные программы. По умолчанию, Gentoo установит систему multilib (для смешанных 32/64 битных вычислений), поэтому данная опция необходима.

Если вы хотите использовать профиль без multilib (для полностью 64-битной системы), вам не обязательно выбирать поддержку IA32 Emulation. Однако вам также нужно будет выполнить инструкции для переключения на не-multilib профиль, а также выбрать правильный начальный загрузчик.
Processor type and features --->
    [ ] Machine Check / overheating reporting 
    [ ] Intel MCE Features
    [ ] AMD MCE Features
  Processor family (AMD-Opteron/Athlon64) --->
    ( ) Opteron/Athlon64/Hammer/K8
    ( ) Intel P4 / older Netburst based Xeon
    ( ) Core 2/newer Xeon
    ( ) Intel Atom
    ( ) Generic-x86-64
Executable file formats / Emulations --->
  [*] IA32 Emulation

Далее выберите нужное семейство процессоров:

Processor type and features --->
  (измените в соответствии со своей системой)
  (Athlon/Duron/K7) Processor family 

Далее выберите Maintain a devtmpfs file system to mount at /dev, чтобы критические файлы устройств уже существовали во время процесса загрузки.

Device Drivers --->
  Generic Driver Options --->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [ ] Automount devtmpfs at /dev, after the kernel mounted the rootfs

Теперь войдите в File Systems и выберите поддержку всех нужных файловых систем. Не компилируйте их как модули, иначе система Gentoo не сможет смонтировать дисковые разделы. Также выберите Virtual memory и /proc file system.

File systems --->
(выберите одну или более опций, в зависимости от вашей системы)
  <*> Second extended fs support
  <*> Ext3 journalling file system support
  <*> The Extended 4 (ext4) filesystem
  <*> Reiserfs support
  <*> JFS filesystem support
  <*> XFS filesystem support
  ...
  Pseudo Filesystems --->
    [*] /proc file system support
    [*] Virtual memory file system support (former shm fs)

(Включите поддержку меток GPT, если вы ее использовали)
-*- Enable the block layer --->
  ...
  Partition Types --->
    [*] Advanced partition selection
      ...
      [*] EFI GUID Partition support

Если вы используете PPPoE или коммутируемого соединения для соединения с интернетом, потребуется включить в ядре следующие функции:

Device Drivers --->
  Networking device Support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports

Два параметра сжатия данных не являются обязательными, но и не повредят. То же относится и к параметру PPP over Ethernet который нужен только для ppp, для поддержки PPPoE в режиме ядра.

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

Если у вас процессор Intel с поддержкой HyperTreading или многопроцессорная система, следует включить «симметричную многопроцессорную обработку»:

Если у вас система с несколькими процессорами (Operton) или несколько ядер (например, AMD64 X2), вам следует включать «симметричную многопроцессорную обработку»:

Processor type and features  --->
  [*] Symmetric multi-processing support
В многоядерных системах каждое ядро считается отдельным процессором

Если у вас более 4 Гб ОЗУ, вам нужно включить опцию "High Memory Support (64G)"

Если вы пользуетесь устройствами ввода на шине USB, (например, мышью или клавиатурой), не забудьте включить их поддержку:

Device Drivers --->
  [*] HID Devices --->
    <*>   USB Human Interface Device (full HID) support

Если вы хотите поддержку PCMCIA для своего ноутбука, не забудьте включить поддержку моста PCMCIA своей системы:

Bus options (PCI etc.)  --->
  PCCARD (PCMCIA/CardBus) support  --->
    <*> PCCard (PCMCIA/CardBus) support
(если нужно (обычно нужно), включите поддержку старых 16-битных карт PCMCIA)
    <*>   16-bit PCMCIA support
    [*]   32-bit CardBus support
(выберите наиболее подходящий мост)
    *** PC-card bridges ***
    <*> CardBus yenta-compatible bridge support (NEW)
    <*> Cirrus PD6729 compatible bridge support (NEW)
    <*> i82092 compatible bridge support (NEW)

Закончив настройку ядра, приступайте к компиляции и установке.

Компиляция и установка

Теперь, когда ядро настроено, настало время его скомпилировать и установить. Выйдите из настройки и запустите процесс компиляции:

# make && make modules_install

По завершении компиляции, скопируйте образ ядра в каталог /boot. Используйте любое имя, которое вам покажется подходящим для избранного ядра, и запомните его, так как позже при настройке начального загрузчика оно потребуется. Не забудьте заменить на имя и версию своего ядра.

# cp arch//boot/bzImage /boot/
Альтернатива: использование genkernel

Если вы читаете эти строки, значит, вы собираетесь использовать наш сценарий genkernel для настройки ядра за вас.

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

Рассмотрим, как использовать genkernel. Сначала установите его:

# emerge genkernel

Теперь скомпилируйте исходный код ядра, запустив genkernel all. Имейте в виду, что компиляция займет приличное время, поскольку genkernel собирает ядро, поддерживающее практически любое оборудование.

Если в загрузочном разделе не используется файловая система ext2 или ext3, то вам придется вручную настроить ядро, запустив genkernel --menuconfig all, добавив поддержку используемой файловой системы в ядро (т.е. не модулем). Пользователям LVM2, вероятно, захочется также добавить параметр командной строки --lvm2.

# genkernel all

В итоге работы genkernel будет создано ядро, полный набор модулей и начальный RAM-диск (initramfs). Ядро и initrd будут использоваться в процессе настройки загрузчика системы, которая описана далее в руководстве. Запишите имена ядра и начального корневого диска, так как они понадобятся при составлении конфигурационного файла загрузчика. initrd запускается сразу при начальной загрузке, выполняя автоматическое определение устройств (точно так же, как при запуске установочного диска), до запуска «настоящей» системы.

# ls /boot/kernel* /boot/initramfs*
Модули ядра