Переход к предыдущей публикации Обновление системы FreeBSD 6.2 до версии 6.3 MySQL backup с доставкой по e-mail Переход к следущей публикации

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

Четверг, 31 января, 2008 13:32:26 EET

Исправления от 14 апреля, 2009 16:42:46

UNIX Kernel Пересборка ядра 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. И после этого редактируем. Вот пример моего конфига:


Эта часть публикации доступна только зарегистрированным посетителям!
Пожалуйста, войдите [Login] или зарегистрируйтесь [Register].

После редактирования файла оставляем его в папке /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.

Похожие публикации

Комментариев 4

Sayver 15 марта, 2010 13:30:30 EET .:. ID #26073 .:.

Подскажите, а где можно посмотреть все параметры задаваемые в конф.файле для компиляции ядра именно для нужной версии FreeBSD.

А то в хендбуке как правило для старых версий, и еще не все опции.

strom 31 января, 2010 19:26:55 EET .:. ID #24649 .:.

подскажите как можно из огромного ядра в 100-120 МБ сделать 4-6 Мб, может есть способы его архивации?

Daemony 14 апреля, 2009 14:33:56 EEST .:. ID #7835 .:.

Вообще, это “икс”:

# cat /usr/src/sys/i386/conf/DAEMONY-ORG_2009  | grep SC_MOUSE_CHAR
options         SC_MOUSE_CHAR=0x3

Как туда вкрался тот непонятный символ :???: хз.

kyle 14 апреля, 2009 14:27:41 EEST .:. ID #7834 .:.

че за знак у параметра трехкнопочной мыши чет не понятно это знак умножения или чтото особенное

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)