При перестроении частей системы они помещаются в каталоги, которые (по умолчанию) находятся в /usr/obj. Структура повторяет структуру /usr/src. Вы можете ускорить выполнение процесса make buildworld и, возможно, избавить себя от некоторой головной боли, связанной с зависимостями, удалив этот каталог. На некоторых файлах из /usr/obj могут быть установлены специальные флаги (обратитесь к chflags(1) за дополнительной информацией), которые сначала должны быть сняты.
# cd /usr/obj # chflags -R noschg * # rm -rf *
Для обновления вашей системы вы должны прочесть /usr/src/UPDATING для выяснения шагов, которые нужно предпринять перед построением системы из вашей версии исходных текстов.
Проверьте содержимое /etc/make.conf. Просмотрите файлы /usr/share/examples/etc/make.conf и /etc/make.conf.
Первый содержит некоторые предопределенные по умолчанию значения - большинство из них закомментировано. Чтобы воспользоваться ими при перестроении системы из исходных текстов, добавьте их в файл /etc/make.conf. Имейте в виду, что все, добавляемое вами в /etc/make.conf, используется также каждый раз при запуске команды Использование make на примерах, так что полезно задать здесь значения, подходящие вашей системе. Вероятно стоит скопировать строки CFLAGS и NO_PROFILE, расположенные в /usr/share/examples/etc/make.conf, в файл /etc/make.conf и раскомментировать их. Посмотрите на другие определения (COPTFLAGS, NOPORTDOCS и так далее) и решите, нужны ли они вам.
Система перед обновлением:
ns# uname -a FreeBSD ns.vip.com.ua 7.2-RELEASE FreeBSD 7.2-RELEASE #0: Fri May 1 08:49:13 UTC 2009 root@walker.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
Вы должны находиться в каталоге /usr/src:
# cd /usr/src
(если, конечно, ваш исходный код не находится в другом месте, в случае чего вам нужно перейти в соответствующий каталог). следующую последовательность действий:
# make buildworld # make buildkernel # make installkernel # reboot
Замечание: Есть несколько редких случаев, когда перед выполнением buildworld необходимо дополнительно запустить mergemaster -p. Они описаны в файле UPDATING. В общем случае вы можете без ущерба пропустить этот шаг, если не выполняете обновление с одной большой версии FreeBSD на другую.
После успешного выполнения installkernel вам необходимо загрузить систему в однопользовательском режиме (заданной в приглашении загрузчика). После этого выполните:
# mount -a # cd /usr/src # mergemaster -p
эта команда позволяет сравнить только те файлы, которые понадобятся при запуске make installworld, например /etc/make.conf ). Выводы команды mergemaster нужно просмотреть очень тщательно. Вам будут предлагаться для сравнения по две версии файлов, если вы уверены что обновленный файл это то что нужно, жмите i, если вы видите что программа mergemaster предлагает удалить нужные вам данные, то необходимо выбрать m - изображение на экране разделится на правую и левую части, необходимо сравнить старый и новый файл, после чего оставить те строки, которые вы считает нужными, по окончании объединения строк старого и нового файлов нажмите i, для того чтобы установить получившийся файл.
# make installworld # mergemaster
ключ -i включает полностью ручной режим для mergemaster, то есть придется подтверждать каждое действие утилиты. Проще не использовать.
# reboot
Система после обновления:
# uname -a FreeBSD ns.vip.com.ua 7.2-RELEASE-p4 FreeBSD 7.2-RELEASE-p4 #0: Sat Oct 24 18:32:43 EEST 2009 root@ns.vip.com.ua:/usr/obj/usr/src/sys/GENERIC i386
Примеры параметров конфигурации ядра находится в /usr/src/sys/conf/NOTES
В ядре нужна поддержка VLAN (Virtual Local Area Network) и Packet Filter Firewall (PF) межсетевой экран FreeBSD.
# man vlan ... NAME vlan -- IEEE 802.1Q VLAN network interface SYNOPSIS To compile this driver into the kernel, place the following lines in your kernel configuration file: device miibus device vlan Alternatively, to load the driver as a module at boot time, place the following line in loader.conf(5): if_vlan_load="YES" ...
Пример параметров конфигурации ядра для включения PF находится в /usr/src/sys/conf/NOTES и показан здесь:
device pf device pflog device pfsync
Включение ALTQ
ALTQ может быть включен только путем компилирования ядра FreeBSD с соответствующими параметрами. ALTQ поддерживается не всеми существующими драйверами сетевых карт. Для просмотра списка поддерживаемых устройств в вашем релизе FreeBSD обратитесь к странице справочника altq(4). Следующие параметры включат ALTQ и добавят дополнительную функциональность.
options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build
options ALTQ включает подсистему ALTQ.
options ALTQ_CBQ включает Class Based Queuing (CBQ). CBQ позволяет распределять пропускную способность соединений по классам или очередям для выставления приоритетов трафика на основе правил фильтрации.
options ALTQ_RED включает Random Early Detection (RED). RED используется для предотвращения перегрузки сети. RED вычисляет длину очереди и сравнивает ее с минимальной и максимальной границей очереди. Если очередь превышает максимум, все новые пакеты отбрасываются. В соответствии со своим названием, RED отбрасывает пакеты из различные соединений в произвольном порядке.
options ALTQ_RIO включает Random Early Detection In and Out.
options ALTQ_HFSC включает Hierarchical Fair Service Curve Packet Scheduler. Дополнительная информация о HFSC находится по адресу: http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html.
options ALTQ_PRIQ включает Priority Queuing (PRIQ). PRIQ всегда пропускает трафик из более высокой очереди первым.
options ALTQ_NOPCC включает поддержку SMP для ALTQ. Эта опция необходима для SMP систем.
Файл LINT очищенный от комментариев файл /usr/src/sys/conf/NOTES
# cd /usr/src/sys/i386/conf # grep NETGRAPH /usr/src/sys/conf/NOTES # make LINT cat ../../conf/NOTES NOTES | sed -E -n -f ../../conf/makeLINT.sed > LINT # mkdir /root/kernels # cp GENERIC /root/kernels/PFVLAN # ln -s /root/kernels/PFVLAN
Редактируем файл конфигурации нового ядра PFVLAN:
cpu I486_CPU # удаляем поддержу устаревших процессоров cpu I586_CPU # удаляем поддержу устаревших процессоров ident GENERIC # Заменяем на название нашего ядра, т.е. PFVLAN
Дальше нужно в ядре включить нужные опции для VLAN и PF, предварительно проверив PFVLAN на наличие нужных нам опций. Сделав такой запрос
# cat GENERIC | grep -i miibus # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs! device miibus # MII bus support # 'device ed' requires 'device miibus' # USB Ethernet, requires miibus
видим, что опция miibus уже включена в ядро и нам дополнительно ее прописывать не надо. Ниже показан PFVLAN, только с изменениям, которые отличают его от ядра GENERIC:
# ee /root/kernels/PFVLAN ... # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.474.2.17.2.1 2009/04/15 03:14:26 kensmith Exp $ cpu I686_CPU ident PFVLAN ... # New kernel PFVLAN # for Vlan device vlan # for PF device pf device pflog device pfsync #for ALTQ options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build # IPSEC for FreeBSD 7.0 and above # for IPsec options IPSEC options IPSEC_FILTERTUNNEL device crypto
Опции ядра для использования netgraph в программах mpd, Как работает PPPoE, Протокол PPP.
# NETGRAPH MPD - необходимо и достаточно этих 3-х опций options NETGRAPH options NETGRAPH_MPPC_COMPRESSION options NETGRAPH_MPPC_ENCRYPTION #PPPoE options NETGRAPH_ETHER options NETGRAPH_SOCKET options NETGRAPH_TEE options NETGRAPH_BPF options NETGRAPH_IFACE options NETGRAPH_KSOCKET options NETGRAPH_PPP options NETGRAPH_PPTPGRE options NETGRAPH_TCPMSS options NETGRAPH_VJC options NETGRAPH_ONE2MANY options NETGRAPH_RFC1490 options NETGRAPH_TEE options NETGRAPH_TTY options NETGRAPH_UI
Собираем ядро
# cd /usr/obj # chflags -R noschg * # rm -rf * # cd /usr/src # make buildkernel KERNCONF=PFVLAN # make installkernel KERNCONF=PFVLAN
Новое ядро будет скопировано в каталог /boot/kernel как /boot/kernel/kernel, а старое ядро будет перемещено в /boot/kernel.old/kernel. Теперь перезагрузите систему для того, чтобы использовать новое ядро.
Если ядро не загружается, читаем здесь: Руководство FreeBSD Глава 8. Настройка ядра FreeBSD
Система после установки нового ядра PFVLAN:
# uname -a FreeBSD ns.vip.com.ua 7.2-RELEASE-p4 FreeBSD 7.2-RELEASE-p4 #0: Sat Oct 24 20:01:31 EEST 2009 root@ns.com.ua:/usr/obj/usr/src/sys/PFVLAN i386
Из ядра можно исключить:
options SCTP # Stream Control Transmission Protocol
options INET6 # IPv6 communications protocols