Rebuilding “world”

  • CVSup: синхронизация (обновление) локального дерева исходных текстов, портов и документации.
  • Читаем руководство: Пересборка world;
  • Удалите /usr/obj

При перестроении частей системы они помещаются в каталоги, которые (по умолчанию) находятся в /usr/obj. Структура повторяет структуру /usr/src. Вы можете ускорить выполнение процесса make buildworld и, возможно, избавить себя от некоторой головной боли, связанной с зависимостями, удалив этот каталог. На некоторых файлах из /usr/obj могут быть установлены специальные флаги (обратитесь к chflags(1) за дополнительной информацией), которые сначала должны быть сняты.

# cd /usr/obj
# chflags -R noschg *
# rm -rf *
  • Файл /usr/src/UPDATING

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

  • Файл /etc/make.conf

Проверьте содержимое /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) (обновление 2018.08).

  • VLAN параметры ядра:
# 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

Из ядра можно исключить:

  • SCTP протокол мало где используется - Windows его не поддерживает.
    options         SCTP                    # Stream Control Transmission Protocol
  • Поддержка IPV6
    options         INET6                   # IPv6 communications protocols
PQ VPS сервера в 28+ странах.