Главная | Контакты



Главная > Операционные системы > UNIX > BSD > FreeBSD

Пересборка ядра FreeBSD

Пересборка ядра FreeBSD - на мой взгляд, обязательная процедура для каждой *nix машины. Дело в том, что по-умолчанию ядро GENERIC (основное) поддерживает массу различных устройств, для того, чтобы система могла загрузиться на практически любой конфигурации "железа". Такое ядро занимает в памяти нерациональный объем оперативной памяти, потому при "заточке" системы под конкретно Вашу машину из ядра рекомендуется выбросить поддержку тех устройств, которых у Вас нет (и возможно не будет), для того чтобы элементарно сэкономить системные ресурсы. Зачем мне поддержка, например, SCSI или RAID'ов, если их нет на материнской плате?

После облегчения ядра существенно увеличивается быстродействие системы. Особенно, это хорошо заметно при загрузке. Ядро в процессе работы занимает меньше ресурсов, что отображается на всех процессах. Пересборка ядра (на Athlon 1900+) занимает максимум 10 минут. Потратив эти десять минут, а также несколько минут на чтение документации, впоследствии в процессе работы с системой Вы поймете, что потратили время незря. Ядро пересобирать нужно. И сейчас мы этим займемся.

Для начала следует убедиться, что у Вас в системе присутствуют исходные коды, из которых мы сможем собрать наше ядро. Посмотрите в папку /usr/src

# ls -la /usr/src
total 4
 drwxr-x-x 2 root wheel 512 1 фев 08:50 .
 drwxr-x-x 22 root wheel 512 28 янв 19:52 ..

Хм: Пусто. Значит исходные коды нужно получить. Для этого можно воспользоваться либо установочным компакт-диском и из меню sysinstall установить исходные коды системы. А можно воспользоваться CVSup и получить исходники с ближайшего cvsup-сервера. Второй способ больше по душе, тем более на тестовой машине нет CD привода.

Итак, создаем sup-file для получения исходных кодов. Поскольку мы будем всего лишь пересобирать ядро, то весь код FreeBSD нам не нужен. Нужна только та часть, из которой будет собрано ядро. Sup-file у меня получился такой:


testserver# cat /root/cvsup/src-sys
#
# Kernel source supfile
#
 *default host=cvsup7.ua.FreeBSD.org
 *default base=/var/db
 *default prefix=/usr
 *default release=cvs tag=RELENG_6_3_0_RELEASE
 *default delete use-rel-suffix
 *default compress
 src-sys

В итоге, по завершению работы данной команды в каталоге /usr/src появится каталог sys. Он то нам нужен. Перейдем в каталог /usr/src/sys/i386/conf. Именно в этот каталог, если у Вас как и у меня архитектура компьютера i386. Если нет, то Ваши действия могут несколько отличаться от приведенных ниже. В каталоге /usr/src/sys/i386/conf нам нужно отредактировать файл GENERIC. Это файл конфигурации дефолтного ядра. Копируем его (оригинал, желательно, оставить), с тем именем, которым будет называться наше ядро. Например: DAEMONY. И после этого редактируем. Вот пример моего конфига:


#######################################
# Daemony's kernel configuration file #
#######################################
#
# Идентификация платформы
machine i386
# Идентификация процессора. Раскомментируйте нужный тип
#cpu I486_CPU
#cpu I586_CPU
cpu I686_CPU
# Идентификация (название) ядра.
ident DAEMONY
# Файл устройств по-умолчанию
#hints "DAEMONY.hints"
# Сборка ядра с отладкой gdb(1). Обычно для того,
# чтобы ошибки ядра отправлять разработчикам.
#makeoptions DEBUG=-g
#
# Опции для поддержки фаерволла IPFW.
options IPFIREWALL
# - включаем логирование
options IPFIREWALL_VERBOSE
# - ограничение на размер лога
options IPFIREWALL_VERBOSE_LIMIT=100
# - включаем опции перенапрвления
options IPFIREWALL_FORWARD
# - дайверт - для поддержки NAT
options IPDIVERT
# - включение поддержки дамминэт -
# искусственная задержка пакетов
options DUMMYNET
#
# Если нужна поддержка фаерволла PF,
# раскомментируем опции ниже.
#device pf
# - включаем логирование
#device pflog
#device pfsync
# - включаем "очереди" - аналог dummynet
#options ALTQ
#options ALTQ_CBQ
#options ALTQ_RED
#options ALTQ_RIO
#options ALTQ_HFSC
#options ALTQ_PRIQ
#options ALTQ_NOPCC
#
# Если нужна поддержка NETGRAPH в ядре
# (мне не нужна)
#options NETGRAPH
#options NETGRAPH_ETHER
#options NETGRAPH_SOCKET
#options NETGRAPH_TEE
#options NETGRAPH_PPP
#options NETGRAPH_PPPOE
#options NETGRAPH_PPTPGRE
#
# Поддержка библиотеки iconv и libmchain в ядре.
# Когда-то было нужно:
options LIBICONV
options LIBMCHAIN
#
# Поддержка квот файловых систем
# - пригодится, если будет много юзеров
# и у каждого свой файлосборник
options QUOTA
#
# Этим можно отключить перезагрузку по ctrl-alt-del
#options SC_DISABLE_REBOOT
#
# Немного подмарафетим консоль.
options SC_PIXEL_MODE
# - подгоним "под себя" режим vga
options VGA_WIDTH90
# - сделаем обычный вывод "зеленый на черном"
options SC_NORM_ATTR=(FG_GREEN|BG_BLACK)
# - а сообщения ядра "желтый на черном"
options SC_KERNEL_CONS_ATTR=(FG_YELLOW|BG_BLACK)
options VESA
#
#
# Прочие опции
#
# - трехкнопочная мышь
options SC_MOUSE_CHAR=0?3
# - планировщик 4BSD
options SCHED_4BSD
# - что-то связано с прерываниями в ядре
options PREEMPTION
# - поддержка сети. Если сеть не нужна
# можно закоментить. 
options INET
# - поддержка протокола IPv6
# не нужен он мне
#options INET6
# - поддержка файловой системы Berkeley
# Fast Filesystem - файловой системы FreeBSD
options FFS
# - поддержка софтапдейтов FFS - повышает
# производительность.
options SOFTUPDATES
# - поддержка списков управления доступом
options UFS_ACL
# - увеличение производительности при
# использовании больших каталогов в которых
# может находиться ооочень много файликов
options UFS_DIRHASH
# - поддержка корневой файловой системы
# в памяти, например, на бездисковых терминалах
#options MD_ROOT
# - поддержка NFS - сетевой файловой системы.
# - клиент
#options NFSCLIENT
# - сервер
#options NFSSERVER
# - поддержка корневой файловой системы на другой
# машине в сети. Пригодится для бездискового терминала
# но мне оно не надо.
#options NFS_ROOT
# - поддержка файловой системы MSDOS (FAT32).
# Пригодится при монтировании виндовых разделов,
# а также дискет.
options MSDOSFS
# - поддержка файловой системы ISO 9660.
# Нужно для использования CD-ROM'ов.
options CD9660
# - поддержка псевдо файловой системы процессов
options PROCFS
# - поддержка структуры псевдо файловой системы
options PSEUDOFS
# - чего то связано с GUID'ами таблиц разделов
options GEOM_GPT
# - поддержка совместимости с BSD 4.3
# - [настоятельно рекомендуют оставить!] -
options COMPAT_43
# - поддержка совместимости с FreeBSD 4
options COMPAT_FREEBSD4
# - поддержка совместимости с FreeBSD 5
options COMPAT_FREEBSD5
# - задержка (в милисекундах) перед тестированием
# SCSI устройств - мне не нужно.
# options SCSI_DELAY=5000
# - поддержка трассировщика ядра
options KTRACE
# - поддержка разделяемой памяти в стиле SYSV
options SYSVSHM
# - поддержка очереди сообщений в стиле SYSV
options SYSVMSG
# - поддержка указателей в стиле SYSV
options SYSVSEM
# - планировщик реального времени
# для расширений стандарта POSIX P1003_1B
options _KPOSIX_PRIORITY_SCHEDULING
# - поддержка устройств ввода-вывода
# подключаемых к USB
options KBD_INSTALL_CDEV
# - вывод отладочной информации
options AHC_REG_PRETTY_PRINT
options AHD_REG_PRETTY_PRINT
# - что-то связано с большими элементами
# синхронизации событий.
options ADAPTIVE_GIANT
#
# -- Перечисляем поддержку устройств --
# I/O APIC
device apic
#
# Поддержка шин:
# isa - удалять не рекомендуется!
device isa
# раритет - ненужно.
#device eisa
# поддержка pci - куда без нее
device pci
#
# Поддержка Floppy дисковода
device fdc
#
# Поддержка устройств ATA и ATAPI
device ata
# ATA жесткие диски
device atadisk
# ATA РЭЙДы - не использую
#device ataraid
# ATAPI CD-ROM приводы
device atapicd
# ATAPI floppy дисководы
device atapifd
# ATAPI ленточные накопители (стримеры) - не водятся
#device atapist
# Статическая нумерация устройств.
options ATA_STATIC_ID
#
# Поддержка SCSI контроллеров
# За неимением таковых, отключаю ВСЕ!
# - семейство EISA AHA1742
#device ahb
# - устройства AHA2940 и "бортовые" AIC7xxx
#device ahc
# - устройства AHA39320/29320 и "бортовые" AIC79xx
#device ahd
# - AMD 53C974 (Tekram DC-390(T))
#device amd
# - семейство Qlogic
#device isp
# - "прошивка" для QLogic HBAs- в модуле
#device ispfw
# - LSI-Logic MPT-Fusion
#device mpt
# - NCR/Symbios Logic
#device ncr
# - NCR/Symbios Logic (более новые
# чипсеты, они же `ncr')
#device sym
# - Tekram DC395U/UW/F DC315U адаптеры
#device trm
# - адаптеры SCSI Advansys
#device adv
# - адаптеры SCSI Advansys wide
#device adw
# - адаптеры SCSI Adaptec 154x
#device aha
# - адаптеры SCSI Adaptec 15[012]x, AIC-6[23]60
#device aic
# - адаптеры SCSI Buslogic/Mylex MultiMaster
#device bt
# - NCR 53C500
#device ncv
# - адаптеры SCSI-3 Workbit Ninja
#device nsp
# - TMC 18C30/18C50
#device stg
#
# Поддержка SCSI переферии
# - шина SCSI (обязательна если
# используются SCSI устройства)
# Но те только SCSI. Потому нужно оставить.
device scbus
# - сменные медиа устройства SCSI
#device ch
# - прямой доступ (к дискам)
device da
# - последовательный доступ (например, для стримеров)
#device sa
# - CD-ROM'ы
#device cd
# - прямой доступ к устройствам SCSI
#device pass
# - служба поддержки SCSI окружения
#device ses
#
# RAID контроллеры прикрученные к SCSI подсистеме
# Тоже ничего из этого мне не пригодится
# - AMI MegaRAID
#device amr
# - Areca SATA II RAID
#device arcmsr
# - DPT SmartRAID V, VI и Adaptec SCSI RAID
#device asr
# - Compaq Smart RAID 5*
#device ciss
# - DPT Smartcache III, IV
#device dpt
# - Highpoint RocketRAID 182x
#device hptmv
# - Intel Integrated RAID
#device iir
# - IBM (Adaptec) ServeRAID
#device ips
# - Mylex AcceleRAID/eXtremeRAID
#device mly
# - 3ware 9000 series PATA/SATA RAID
#device twa
#
# RAID контроллеры - не пригодятся
# - Adaptec FSA RAID
#device aac
# - SCSI транзит для aac (требуется CAM)
#device aacp
# - Compaq Smart RAID
#device ida
# - Mylex DAC960 family
#device mlx
# - Promise Supertrak SX6000
#device pst
# - 3ware ATA RAID
#device twe
#
# atkbdc0 контроллер используется и для клавиатуры
# и для PS/2 мыши
# - поддержка контроллера AT'шной клавиатуры
device atkbdc
# - поддержка AT'шной клавиатуры
device atkbd
# - поддержка мыши с разъемом PS/2
device psm
#
# Поддержка драйвера видеокарты VGA
device vga
# Поддержка скринсейвера и окон приветствия
device splash
#
# Поддержка консоли. Без данного "девайса" на экране
# ничего не будет отображаться, хотя система будет
# вполне нормально работать
device sc
#
# Поддержка VT220 совместимой консоли pcvt
#device vt
# Поддержка ИКСов на vt консоли
#options XSERVER
# Опция для "жирного" курсора на экране 
#options FAT_CURSOR
#
# Поддержка шины AGP
device agp
#
# Поддержка службы управления питанием.
#device apm
# Поддержка "ждущего" режима для i8254
device pmtimer
#
# Поддержка PCCARD карточек. Они же PCMCIA.
# Обычно для ноутбуков сгодится, а мне оно не надо.
# Карточки PCMCIA и поддержка моста шины
# - cardbus (yenta) bridge
#device cbb
# - PC Card (16-bit) bus
#device pccard
# - CardBus (32-bit) bus
#device cardbus
#
# Поддержка COM портов
# - последовательные порты на основе 8250, 16[45]50
device sio
#
# Поддержка параллельных портов
#device ppc
# - поддержка шины параллельного порта
# - обязательна для всех остальных пунктов
#device ppbus
# - поддержка LPT принтера
#device lpt
# - поддержка протокола TCP/IP посредством
# параллельного порта
#device plip
# - интерфейс параллельного порта
#device ppi
# - этого пункта не описано в комментах, но
# сказано что ему нужны scbus и da
#device vpo
#
# Для "бестолковой" параллельной или
# последовательной PCI карты, которая
# поддерживается драйвером puc(4),
# можно раскоментировать следующую строку.
#device puc
#
# Поддержка PCI'ных сетевых карточек.
# Рекомендуется оставлять только те, что есть у Вас в системе.
# - DEC/Intel DC21?4x ("Tulip")
#device de
# - Intel PRO/1000 adapter Gigabit Ethernet Card
#device em
# - Intel PRO/10GbE Ethernet Card
#device ixgb
# - 3Com 3cR990 ("Typhoon")
#device txp
# - 3Com 3c590, 3c595 ("Vortex")
#device vx
#
# Поддержка PCI'ных сетевых карт, которые
# используют основной код контроллера шины MII.
# Обязательно наличие 'device miibus'
# для всех нижепреведенных карт!
# - поддержка контроллера MII
device miibus
# - Broadcom BCM440x 10/100 Ethernet
#device bfe
# - Broadcom BCM570xx Gigabit Ethernet
#device bge
# - DEC/Intel 21143 and various workalikes
#device dc
# - Intel EtherExpress PRO/100B (82557, 82558)
# - есть у меня такая карта в запасе, потому на
# всякий случай оставим пунктик.
device fxp
# - Level 1 LXT1001 gigabit Ethernet
#device lge
# - NatSemi DP83820 gigabit Ethernet
#device nge
# - nVidia nForce MCP on-board Ethernet Networking
#device nve
# - AMD Am79C97x PCI 10/100 (precedence over 'lnc')
#device pcn
# - RealTek 8139C+/8169/8169S/8110S
#device re
# - RealTek 8129/8139
# - Моя карта - оставляю
device rl
# - Adaptec AIC-6915 ("Starfire")
#device sf
# - Silicon Integrated Systems SiS 900/SiS 7016
#device sis
# - SysKonnect SK-984x & SK-982x gigabit Ethernet
#device sk
# - Sundance ST201 (D-Link DFE-550TX)
#device ste
# - Alteon Networks Tigon I/II gigabit Ethernet
#device ti
# - Texas Instruments ThunderLAN
#device tl
# - SMC EtherPower II (83c170 "EPIC")
#device tx
# - VIA VT612x gigabit Ethernet
#device vge
# - VIA Rhine, Rhine II
# - "бортовые" езернет карты на материнках VIA
#device vr
# - Winbond W89C840F
#device wb
# - 3Com 3c90x ("Boomerang", "Cyclone")
# - и такая карта есть в запасе. Пусть будет и в ядре.
device xl
#
# Поддержка ISA'шных сетевых карт,
# а так же карточек pccard
# - Crystal Semiconductor CS89?0 NIC
#device cs
# - NE[12]000, SMC Ultra, 3c503, DS8390 cards
# Данное устройство требует наличия 'device miibus'
# Карта такая в системе имеется. Оставляем в ядре.
device ed
# - Intel EtherExpress Pro/10 and Pro/10+
#device ex
# - Etherlink III based cards
#device ep
# - Fujitsu MB8696x based cards
#device fe
# - EtherExpress 8/16, 3C507, StarLAN 10 и т.д.
#device ie
# NE2100, NE32-VL Lance Ethernet cards
# - а такие карты всегда "создает" VMWare
# в среде виртуальной машины
#device lnc
# - SMC's 9000 series of Ethernet chips
#device sn
# - Xircom pccard Ethernet
#device xe
#
# Поддержка устройств ISA на основе "старой" ISA.
# (перевел как получилось :))
#device le
#
# Поддержка беспроводных сетевых карточек.
# У меня такие не водятся, потому убираем.
# - поддержка протокола 802.11
#device wlan
# - Aironet 4500/4800 802.11 wireless NICs
#device an
# - BayStack 660 and others
#device awi
# - Ralink Technology RT2500 wireless NICs
#device ral
# - WaveLAN/Intersil/Symbol 802.11 wireless NICs
#device wi
# - Старые (Wavelan) беспроводные карты без поддержки 802.11
#device wl
#
# Поддержка псевдоустройств.
# - сетевой интерфейс типа "loopback",
# он же 127.0.0.0/8, он же localhost
device loop
# - устройство, запоминающее изменения в системе
device random
# - поддержка ethernet
device ether
# - поддержка ядром протокола SLIP
device sl
# - поддержка ядром протокола PPP
device ppp
# - поддержка ядром различного
# рода тунельных соединений
device tun
# - поддержка псевдотерминалов (ttys)
# нужно будет для удаленной работы с системой
# по ssh или telnet
device pty
# - поддержка "дисков" в оперативной памяти
device md
# - поддержка тунелирования IPv6 и IPv4
#device gif
# - поддержка трансляции адресов
# сетей IPv6 в сети IPv4
#device faith
#
# Устройство bpf активирует фильтр пакетов Беркли.
# На его основе работают программы по прослушиванию
# сетевого трафика: счетчики, сниферы, прочие анализаторы.
# Учтите, что поддержка 'bpf' требуется для работы DHCP.
device bpf
#
# Поддержка USB устройств
# - поддержка драйвера USB шины - требуется обязательно.
device usb
# - UHCI PCI->USB интерфейс
device uhci
# - OHCI PCI->USB интерфейс
device ohci
# - EHCI PCI->USB интерфейс (USB 2.0)
device ehci
# - USB Double Bulk Pipe devices
#device udbp
# Все то, что фряха не может распознать,
# но видит что это "что-то" воткнуто в USB, она обычно
# обзывает как ugen :). Шутка, конечно, но на практике
# очень часто такое встречал.
# Не стоит коментить данный девайс.
device ugen
# - "Human Interface Devices"
device uhid
# - USB клавиатура
#device ukbd
# - USB принтер
device ulpt
# Флешки, карты памяти и прочие флеш-накопители.
# Требуется для этого дела scbus и da
device umass
# - USB мышь
#device ums
# - Ralink Technology RT2500USB wireless NICs
#device ural
# - Diamond Rio 500 MP3 player
#device urio
# - USB сканеры (у меня его нет)
#device uscanner
# - USB сетевые карточки
# - ADMtek USB Ethernet
#device aue
# - ASIX Electronics USB Ethernet
#device axe
# - Generic USB over Ethernet
#device cdce
# - CATC USB Ethernet
#device cue
# - Kawasaki LSI USB Ethernet
#device kue
# - RealTek RTL8150 USB Ethernet
#device rue
#
# Поддержка высокопроизводительной
# последовательной шины IEEE 1394 - ненужно.
# - поддержка шины
#device firewire
# - поддержка SCSI через FireWire.
# Нужно scbus и da
#device sbp
# - поддержка ethernet посредством firewire
# Данная технология не является стандартом.
#device fwe

После редактирования файла оставляем его в папке /usr/src/sys/i386/conf/ и можно приступить к компиляции:

# cd /usr/src
# make buildkernel KERNCONF=DAEMONY
# make installkernel KERNCONF=DAEMONY
# shutdown -r now

По окончании процесса компиляции и установки ядра, перезагружаем машину и проверяем что все работает. Какие могут проблемы возникнуть после пересборки? Ну, обычно самая распространенная ошибка, на которую я сам когда-то тоже напоролся - отключение в ядре поддержки жизненноважного для Вашего сервера устройства. Когда-то, к примеру, я отключил нечаянно поддержку своей сетевой карты, из-за чего машина осталась без сети и пришлось заново пересобирать ядро.

Если после пересборки и установки ядра машина не грузится вообще, то есть после загрузчика выпадают какие-либо ошибки, или вообще ничего не происходит, повода для паники нет. Достаточно просто загрузить систему со старым работоспособным ядром, потому что оно после установки нового не удаляется, а перемещается в папку /boot/kernel.old. Чтобы загрузиться с этим ядром, на стадии появления меню загрузчика нажимаем Esc. Перед нами предстанет командная строка загрузчика. Наберем в ней:

boot kernel.old

или

boot GENERIC

и система начнет грузиться с работоспособным ядром. А после этого можно искать причину почему не загрузилось новое ядро и устранять ошибки. Вот, собственно, и все.

Напоследок, добавлю, что если необходимо включить в ядро поддержку чего-то такого, что еще в нем нет, его не обязательно пересобирать. Достаточно подгрузить в ядро соответствующий модуль. Например, для включения поддержки IPFW в ядро можно выполнить команду:

# kldload ipfw.ko

(Примечание: выполнять этот пример на машине, которой Вы управляете удаленно не рекомендуется!)

Для того, чтобы выгрузить из ядра какой-либо модуль нужно выполнить:

# kldunload ipfw.ko

Просмотреть список загруженных модулей в ядре можно следующей командой:

# kldstat

 Id Refs Address Size Name
 1 9 0xc0400000 4fc984 kernel
 2 1 0xc08fd000 5c304 acpi.ko
 3 1 0xc244d000 19000 linux.ko
 4 1 0xc25e9000 4000 logo_saver.ko

Автозагрузку необходимых модулей при старте можно прописать в файле /boot/loader.conf. Кроме этого файла существует еще один - дефолтовый /boot/defaults/loader.conf. Настройки в /boot/loader.conf перекрывают аналогичные в дефолтном файле. Редактировать дефолтный файл настоятельно нерекомендуется! Лучше его просто почитать, и выбрав для себя нужные опции, прописать их в /boot/loader.conf.

Подробнее о файле /boot/defaults/loader.conf можно будет почитать в одной из следущих статей.


Главная > Операционные системы > UNIX > BSD > FreeBSD