Сборка ядра в 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
[cut]
Пример моего 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
Комментариев: 3
А что делать если /usr/src/sys такой директории не существует?
вывожу uname -a
вижу что файл GENERIC храниться по /usr/src/sys/i386/conf/GENERIC пути
Значит исходники у вас не установлены. Если делать всё по статье, то такая директория будет после выполнения cvsup.
Спасибо! Сборка прошла успешно