This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Настройка ядра Linux
Установка исходного кода
Все дистрибутивы строятся вокруг ядра Linux. Ядро является прослойкой между пользовательским программным обеспечением и физическим оборудованием. Gentoo предоставляет несколько вариантов исходного кода ядра. Полный список с описанием доступен в статье общие сведения о ядре.
Для систем, основанных на amd64 архитектуре, рекомендуется пакет sys-kernel/gentoo-sources.
Выберем подходящий исходный код ядра и установим с помощью emerge:
root #
emerge --ask sys-kernel/gentoo-sources
Данная команда установит исходный код ядра Linux в /usr/src/, в котором символьная ссылка linux будет указывать на установленную версию:
root #
ls -l /usr/src/linux
lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-3.16.5-gentoo
Теперь следует настроить и собрать ядро. Здесь существует два основных подхода:
- Ядро настраивается и собирается вручную.
- Утилита genkernel собирает и устанавливает его автоматически.
В данной инструкции мы расскажем, как провести настройку вручную, поскольку это лучший способ оптимизировать окружение.
Основной вариант: Ручная настройка
Введение
Согласно расхожему мнению, настройка ядра- наиболее сложная процедура, с которой сталкивается пользователь Линукса. Это сильное преувеличение и собрав пару-тройку ядер никто и не вспомнит, что это было сложно.
Но один факт учитывать стоит. Для ручной настройки ядра необходимо иметь представление о том, из чего собран компьютер. Большую часть можно узнать, установив sys-apps/pciutils и выполнив команду lspci:
root #
emerge --ask sys-apps/pciutils
Если находитесь внутри chroot, то можете спокойно игнорировать предупреждения о pcilib (навроде pcilib: cannot open /sys/bus/pci/devices), которая может появляться в выводе lspci.
Другой источник информации о системе можно получить, выполнив lsmod и посмотрев, какие модули ядра подгрузились на установочном носителе.
Остаётся перейти в директорию с ядром и выполнить make menuconfig. Нас поприветствует экран конфигурации.
root #
cd /usr/src/linux
root #
make menuconfig
В конфигурации ядра Linux есть много-много секций. Сначала пройдёмся по опциям, которые должны быть включены (иначе Gentoo будет работать неправильно или же вовсе не запустится). Для более глубокого ознакомления стоит посетить гайд по настройке ядра Gentoo.
Включаем обязательные опции
Убедитесь, что драйверы, необходимые для загрузки системы (например, контроллер SCSI и так далее) собраны прямо в ядре, а не как модуль. В противном случае, система может не загрузиться.
Следует выбрать тип процессора, а так же рекомендуется включить опции MCE, чтобы получать информацию о проблемах с "железом". На некоторых архитектурах (например, x86_64) подобные ошибки выводятся не в dmesg, а /dev/mcelog. Так что понадобится пакет app-admin/mcelog.
Активируйте опцию Maintain a devtmpfs file system to mount at /dev, тогда критичные для устройств файлы будут подгружаться как можно раньше (CONFIG_DEVTMPFS и CONFIG_DEVTMPFS_MOUNT):
Device Drivers ---> Generic Driver Options ---> [*] Maintain a devtmpfs filesystem to mount at /dev [ ] Automount devtmpfs at /dev, after the kernel mounted the rootfs
Удостоверьтесь, что поддержка SCSI-дисков была включена (CONFIG_BLK_DEV_SD):
Device Drivers ---> SCSI device support ---> <*> SCSI disk support
Дальше стоит включить поддержку используемых Вами файловых систем. Рутовая ФС должна быть включена в ядро, а не подгружена в качестве модуля, иначе Gentoo не сможет примонтировать данный раздел. Не забудьте также включить Virtual memory и /proc file system. По необходимости выберете один или несколько параметров из списка (CONFIG_EXT2_FS, CONFIG_EXT3_FS, CONFIG_EXT4_FS, CONFIG_MSDOS_FS, CONFIG_VFAT_FS, CONFIG_PROC_FS и CONFIG_TMPFS):
File systems ---> <*> Second extended fs support <*> The Extended 3 (ext3) filesystem <*> The Extended 4 (ext4) filesystem <*> Reiserfs support <*> JFS filesystem support <*> XFS filesystem support <*> Btrfs filesystem support DOS/FAT/NT Filesystems ---> <*> MSDOS fs support <*> VFAT (Windows-95) fs support Pseudo Filesystems ---> [*] /proc file system support [*] Tmpfs virtual memory file system support (former shm fs)
Если для подключения к сети интернет используется PPPoE или dial-up модем, то тогда включите следующие параметры (CONFIG_PPP, CONFIG_PPP_ASYNC и CONFIG_PPP_SYNC_TTY):
Device Drivers ---> Network 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 режима ядра.
Не забудьте настроить поддержку сетевых карт (кабельных и беспроводных).
Поскольку большинство современных систем являются многоядерными, нам понадобится Symmetric multi-processing support (CONFIG_SMP):
Processor type and features ---> [*] Symmetric multi-processing support
Во многоядерных системах каждое ядро считается за один процессор.
Если используются USB-устройства ввода (например клавиатуру и мышь) или другие USB-устройства, то не забудьте включить и эти параметры (CONFIG_HID_GENERIC, CONFIG_USB_HID, CONFIG_USB_SUPPORT, CONFIG_USB_XHCI_HCD, CONFIG_USB_EHCI_HCD, CONFIG_USB_OHCI_HCD):
Device Drivers ---> HID support ---> -*- HID bus support <*> Generic HID driver [*] Battery level reporting for HID devices USB HID support ---> <*> USB HID transport layer [*] USB support ---> <*> xHCI HCD (USB 3.0) support <*> EHCI HCD (USB 2.0) support <*> OHCI HCD (USB 1.1) support
Настройка ядра, специфичная для архитектуры
Если необходимо поддерживать 32-битные программы, убедитесь, что выбран пункт IA32 Emulation (CONFIG_IA32_EMULATION). Gentoo устанавливает систему multilib (смешанные 32/64 битные вычисления) по умолчанию, поэтому данная опция необходима, если конечно не выбран профиль no-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
Включите поддержку меток GPT, если использовали их ранее при разбиении диска (CONFIG_PARTITION_ADVANCED и CONFIG_EFI_PARTITION):
-*- Enable the block layer ---> Partition Types ---> [*] Advanced partition selection [*] EFI GUID Partition support
Включите поддержку EFI stub и EFI variables в ядре Linux, если для загрузки системы используется UEFI (CONFIG_EFI, CONFIG_EFI_STUB, CONFIG_EFI_MIXED и CONFIG_EFI_VARS):
Processor type and features ---> [*] EFI runtime service support [*] EFI stub support [*] EFI mixed-mode support Firmware Drivers ---> EFI (Extensible Firmware Interface) Support ---> <*> EFI Variable Support via sysfs
Компиляция и установка
Когда настройка закончена, настало время скомпилировать и установить ядро. Выйдите из настройки и запустите процесс компиляции:
root #
make && make modules_install
Можно включить параллельную сборку, используя make -jX, где
X
это число параллельных задач, которые может запустить процесс сборки. Это похоже на инструкции, которые были даны ранее относительно файла /etc/portage/make.conf в части переменной MAKEOPTSПо завершении компиляции, скопируйте образ ядра в каталог /boot/. Это делается командой make install:
root #
make install
Данная команда скопирует образ ядра в каталог /boot/ вместе с файлом System.map и файлом настройки ядра.
Опционально: Собираем initramfs
В некоторых случаях необходимо включить поддержку initramfs - an initial ram-based file system (файловая система, основанная на оперативной памяти). Наиболее распространённая причина это нахождение различных системных путей (вроде /usr/ или /var/) на различных разделах. При наличии initramfs эти разделы могут быть подгружены средствами initramfs.
Без initramfs существует вероятность неправильной загрузки, так как для запуска некоторых ФС может потребоваться информация на этих самых разделах. Initramfs подгружает всю информацию в небольшой архив, который читается сразу после загрузки ядра, но до передачи управления службам инициализации. Таким образом набор скриптов initramfs проследит, чтобы все разделы были примонтированы верно перед продолжением процесса загрузки.
Для установки initramfs, сперва нужен sys-kernel/genkernel, который его сгенерирует:
root #
emerge --ask sys-kernel/genkernel
root #
genkernel --install initramfs
Если необходима поддержка LVM или RAID, то следует указать это как опцию genkernel. Для более подробной информации взгляните на genkernel --help. В следующем примере включена поддержка LVM и программного RAID (mdadm):
root #
genkernel --lvm --mdadm --install initramfs
Initramfs будет расположен в /boot/. Можно посмотреть файлы, начинающиеся с "initramfs":
root #
ls /boot/initramfs*
Продолжим в Модули ядра.
Альтернативно: Используя genkernel
Если ручная установка кажется слишком сложной, то следует воспользоваться утилитой genkernel, которая настроит и соберёт ядро автоматически.
genkernel конфигурирует ядро примерно так же, как в установочном носителе. Таким образом, ядро, сконфигурированное genkernel постарается определить всё оборудование в процессе загрузки. Поскольку genkernel не требует самостоятельной настройки ядра, он рекомендован для тех, кто не готов собирать собственное ядро.
Приступим. Сперва, нужно установить sys-kernel/genkernel:
root #
emerge --ask sys-kernel/genkernel
Затем отредактируйте файл /etc/fstab, где следует указать в строке /boot/ правильное устройство во втором поле. Если следовали примеру из данной инструкции, то, скорее всего, это устройство /dev/sda2 с файловой системой ext2 и строка должна выглядеть следующим образом:
root #
nano -w /etc/fstab
/dev/sda2 /boot ext2 defaults 0 2
В процессе настройки Gentoo /etc/fstab еще будет изменён. На данный момент мы правим лишь /boot, так как genkernel использует эту настройку.
Осталось скомпилировать ядро, выполнив genkernel all. Учтите, что поскольку genkernel включает поддержку как можно большего диапазона оборудования, процесс сборки может занять некоторое время!
Если для загрузочного раздела не используется ext2 или ext3, то возможно придётся вручную настроить ядро, выполнив genkernel --menuconfig all и добавив поддержку нужной ФС (не как модуля). Пользователям LVM2 следует также добавить
--lvm
в качестве аргумента.root #
genkernel all
По завершению мы получим полный набор модулей и initramfs. Ядро и initrd нам ещё понадобятся при настройке загрузчика. Запишите название файлов ядра и initrd, так как они нам ещё понадобятся. Initrd запускается сразу после ядра для определения оборудования, перед запуском самой системы.
root #
ls /boot/kernel* /boot/initramfs*
Модули ядра
Настройка модулей
Hardware modules are optional to be listed manually. udev will normally load all hardware modules that are detected to be connected in most cases. However, it is not harmful for automatically detected modules to be listed. Sometimes exotic hardware requires help to load their drivers.
Укажите модули, которые должны подгружаться автоматически в /etc/modules-load.d/*.conf файлах. Один модуль на строку. Дополнительные опции для модулей при необходимости нужно указывать в файлах /etc/modprobe.d/*.conf.
Чтобы посмотреть доступные модули, выполните команду find, не забыв заменить "<kernel version>" на собранную в предыдущем шаге версию:
root #
find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' | less
Например, чтобы автоматически подгрузить модуль 3c59x.ko (драйвер для определённой семьи интернет-карт от 3Com), отредактируйте файл /etc/modules-load.d/network.conf добавив имя модуля. Фактическое имя файла несущественно для загрузчика.
root #
mkdir -p /etc/modules-load.d
root #
nano -w /etc/modules-load.d/network.conf
3c59x
Продолжим установку в Настройка системы.
Опционально: Установка файлов прошивки
Для корректной работы некоторых драйверов требуется установка дополнительных файлов прошивки. Часто подобное требуется для сетевых интерфейсов, особенно беспроводных. Также, современные видео чипы, от вендоров AMD, NVidia и Intel, при использовании отрытых драйверах, часто нуждаются во внешних файлах firmware. Большинство файлов прошивки поставляется в пакете sys-kernel/linux-firmware:
root #
emerge --ask sys-kernel/linux-firmware