пʼятниця, 5 листопада 2010 р.

Сборка ядра в FreeBSD

Зачем нужно пересобирать ядро (kernel)?

При инсталляции FreeBSD мы сразу же имеем вполне работоспособное ядро. Зачем его переделывать? Дело в том, что это ядро (GENERIC конфигурация) предназначено для того, чтобы система успешно развернулась на "железе" любой конфигурации (из поддерживаемых, конечно). В эту конфигурацию встроена поддержка ВСЕХ типов накопителей (HDD и CD) и БОЛЬШИНСТВА сетевых карт, которые на данный момент поддерживаются FreeBSD. Это вполне логично - вы должны иметь возможность поставить свой Unix и дополнительные программы на тот HDD, который имеется у вас в машине и суметь войти в сеть, какой бы сетевой карточкой вы ни пользовались, хотя на новом железе это далеко не всегда так даже на FreeBSD 7.1 (могу привести кучу примеров тому в подтверждение).

Наряду с этим, в ядро не включены полезные опции, которые обязательно вам понадобятся в дальнейшем, если вы хотите использовать вашу машину в качестве сервера. (Например - поддержка firewall, PPP, VPN и т.п.).

Итак, первым делом обновим или установим дерево портов и исходные коды операционной системы (если их не ставили во время первичной установки FreeBSD). Для поддержания дерева портов в актуальном состоянии, FreeBSD использует утилиту cvsup. Посредством CVSup можно обновлять не только порты, исходные коды в каталоге /usr/src, но и документацию в каталоге /usr/share/doc.

Устанавливаем CVSup:

# cd /usr/ports/net/cvsup-without-gui
# make install clean

Далее создаем sup-файл, в котором описываем: что обновлять, откуда и какую версию использовать. Пример такого можно посмотреть в директории /usr/share/examples/cvsup

Пример моего supfile для стабильной ветки FreeBSD 7.0:

cat /etc/cvsupfile
*default host=cvsup2.ru.freebsd.org
*default base=/usr
*default prefix=/usr
*default release=cvs
*default tag=RELENG_7_0
*default delete use-rel-suffix
*default compress
src-all
*default tag=.
ports-all

выполняем само обновление:

cvsup -g -L 2 /etc/cvsupfile

Параметр -g указывает CVSup не использовать GUI. Он действует автоматически, если вы не работаете под X11, но иначе вам потребуется его указать.

Параметр -L 2 указывает CVSup выводить информацию о каждом производимом обновлении. Есть три уровня протоколирования, от -L 0 до -L 2. Уровень по умолчанию 0, что означает полное отсутствие сообщений, за исключением сообщений об ошибках.

Процесс обновления требует некоторого времени, зависящего от вашего канала связи с Internet.

Сборка ядра:

Переходим в каталог с файлами конфигурации ядра и берем за основу ядро GENERIC. GENERIC копируем в XXXXX, где XXXXX название нашего нового ядра

cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/XXXXX
vi /usr/src/sys/i386/conf/XXXXX
#оставляем только свою архитектуру 
#cpu            I486_CPU
#cpu            I586_CPU
cpu             I686_CPU
ident меняем на XXXXX
#включаем FIREWALL
options         IPFIREWALL
options         IPFIREWALL_FORWARD
#по умолчанию делать Firewall открытым
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=1
options         IPDIVERT
options         IPFILTER
options         IPFILTER_LOG
если машина поддерживает SMP
options         SMP #Symmetric MultiProcessor Kernel
#комментируем все устройства, которых нет в вашей системе, но с умом - не перестарайтесь.
#Например если выключить `#device  miibus`, то сеть работать не будет

После того, как все изменения внесены и сохранены, перейдите в каталог /usr/src и соберите ядро:

# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL

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

# make installkernel KERNCONF=MYKERNEL

Дополнительные материалы:
Сборка ядра FreeBSD. Если что-то пошло не так...

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments