Где хранится файл ядра freebsd 11. Анализ сетевой активности в freebsd с помощью iftop. Дополнительные материалы по Freebsd

Дистрибутив фрюхи часто называют самым подходящим для решения прикладных сетевых задач в локальной сети. Сегодня мы займемся решением одной из сетевых задач — настройкой шлюза на Freebsd 10 для доступа в интернет из локалки. Это простой, популярный и востребованный функционал сервера, который можно расширять дополнительными возможностями.

Будем использовать следующую версию системы для решения нашей задачи по настройке шлюза:

# uname -v FreeBSD 10.2-RELEASE-p8 #0 r292756M: Sat Dec 26 22:49:34 MSK 2015 root@freebsd:/usr/obj/usr/src/sys/GENERIC

На сервере установлены 2 сетевые карты:

  • hn0 — внешний интерфейс, получает интернет от провайдера, настройки по dhcp
  • hn1 локальная сеть, адрес 10.20.30.1, установлен вручную

В нашу задачу по настройке программного freebsd роутера будет входить настройка маршрутизации на сервере, установка и настройка ipfw, включение nat, настройка локального dhcp и dns сервера.

Подготовка сервера к настройке шлюза

Информацию о выданных leases dhcp сервера dnsmasq можно посмотреть в файле /var/db/dnsmasq.leases .

Анализ сетевой активности в freebsd с помощью iftop

Иногда хочется посмотреть, что происходит на роутере и кто использует интернет в данный момент. По-умолчанию, в системе нет готового средства для получения этой информации. На помощь нам придет простая программа iftop, которая позволяет в режиме реального времени посмотреть активность на сетевом интерфейсе.

Устанавливаем iftop на настроенный Freebsd шлюз:

# pkg install iftop

Запускаем iftop с указанием интерфейса и отображением используемых портов:

# iftop -i hn1 -P

Видим любопытную картину — кто, куда, по какому порту и с какой скоростью лезет.

Я для примера на одном из компьютеров запустил генератор трафика интернета. Он занял почти весь канал и это стало отлично видно на роутере с помощью iftop. Конечно, эта простая утилита не решает всех вопросов по мониторингу сетевой активности, но для представления текущей картины подходит, если вам не нужно что-то большее.

Заключение

Подведем итог того, что сделали. За короткое время настроили полноценный шлюз (по сути программный роутер) на базе Freebsd 10 для обеспечения выхода в интернет клиентов за сервером. При этом обеспечили автоматическое получение настроек. Даже на скромном виртуальном сервере такой шлюз способен переварить достаточно большой траффик.

Вся настройка занимает буквально 10-15 минут. Основное время уходит на сборку ядра. Чем выше версия Freebsd, тем дольше оно собирается, несмотря на то, что скорости железа существенно возрастают.

Пройдемся по пунктам и разберемся с тем, что конкретно мы сделали:

  1. Подготовили сервер к настройке шлюза.
  2. Пересобрали ядро с необходимыми параметрами.
  3. Настроили ipfw и nat, включили маршрутизацию.
  4. Установили и настроили dnsmasq для раздачи сетевых настроек по dhcp и dns сервера.
  5. Установили iftop для простейшего анализа сетевой активности на внешнем интерфейсе.

Этого достаточно для полноценной работы шлюза на Freebsd 10. Если есть необходимость подсчета пользовательского траффика или ограничения доступа к определенным ресурсам, можно к нему.

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

src — Source for everything but encryption

и потом выбрать

sys — /usr/src/sys (FreeBSD kernel)

.
Доставить можно через /stand/sysinstall.
Считаем, что исходники ядра вы установили.
Под пользователем root идем в папку /usr/src/sys/i386/conf.
Копируем файл GENERIC, например в mykernel. Полученный файл и будем править.
Если у вас машина Pentium4, то советую сразу закоментировать строки:

cpu I386_CPU
cpu I486_CPU
cpu I586_CPU

пусть наша машина будет настроена на определенный процессор и не распыляется на всякую фигню 😉
Можно отключить не используемы устройства, что уменьшит размер ядра и соответсвенно нагрузку на процессор. Посмотреть какие у вас устройства можно коамандой dmesg, после загрузки компьютера.
Так же можно добавить устройства, которые по умолчанию не поддерживаются в ядре. Более подробно устройства описаны в файл LINT для FreeBSD ветки 4.х, и в файле NOTES для FreeBSD ветки 5.х.

После того как мы отредактировали наш файл, можно приступить к его компиляции.
Нам надо будет выполнить следующие команды:

config mykernel - конфигурим ядро
cd ../../compile/mykernel
make depend
make
make install - устанавливаем ядро

Если все прошло удачно, то все что нам надо это перезагрузиться.

P.S. Советую перед эксперементами сохранить нормальное ядро, например под именем kernel.good и тогда если не загрузилось наше новое ядро, мы вместо kernel.old указажем boot kernel.good. Это предлагаю сделать, потмоу что при новом собирании ядра наш kernel.old перезапишется например не рабочим ядром и мы вообще не сможем загрузиться.

P.P.S. Сохранение хорошего рабочего ядра:
Для FreeBSD 4.x — команда cp /kernel /kernel.good
Для FreeBSD 5.x — команда cp -R /boot/kernel /boot/kernel.good

Второй способ обновления ядра:
Перейдите в каталог /usr/src.
# cd /usr/src

Соберите ядро.
# make buildkernel KERNCONF=MYKERNEL

Установите новое ядро.
# make installkernel KERNCONF=MYKERNEL

Замечание: Этот способ построения требует наличия всех исходных файлов систем. Если вы только установили исходные файлы ядра, то используйте традиционный способ, как описано выше.

MYKERNEL — конфигурационный файл вашего ядра, который для i386 находится в папке /usr/src/sys/i386/conf. Если не указывать параметр KERNCONF, то соберется ядро GENERIC.

дМС УВПТЛЙ СДТБ ОЕПВИПДЙНП ОБМЙЮЙЕ ЧУЕИ ЙУИПДОЩИ ЖБКМПЧ FreeBSD.

чП-РЕТЧЩИ, ДБЧБКФЕ УДЕМБЕН ЛТБФЛЙК ПВЪПТ ЛБФБМПЗБ, Ч ЛПФПТПН ВХДЕФ РТПЙУИПДЙФШ УВПТЛБ СДТБ. чУЕ ЛБФБМПЗЙ, ЛПФПТЩЕ ВХДХФ ХРПНЙОБФШУС, ВХДХФ ПФОПУЙФЕМШОЩНЙ РП ПФОПЫЕОЙА Л ПУОПЧОПНХ ЛБФБМПЗХ /usr/src/sys , ЛПФПТЩК ФБЛЦЕ ДПУФХРЕО ЛБЛ ЛБФБМПЗ /sys . ьФПФ ЛБФБМПЗ УПДЕТЦЙФ НОПЦЕУФЧП РПДЛБФБМПЗПЧ, РТЕДУФБЧМСАЭЙИ УПВПК ТБЪМЙЮОЩЕ ЮБУФЙ СДТБ, ОП ОБЙВПМЕЕ ЧБЦОЩН ДМС ОБУ ВХДЕФ ЛБФБМПЗ arch /conf , Ч ЛПФПТПН ЧЩ ВХДЕФЕ ТЕДБЛФЙТПЧБФШ ЛПОЖЙЗХТБГЙПООЩК ЖБКМ СДТБ Й Ч ЛПФПТПН ОБИПДЙФУС ЛБФБМПЗ compile , ЗДЕ ВХДЕФ УПВЙТБФШУС ЧБЫЕ СДТП. arch НПЦЕФ ВЩФШ i386 , amd64 , ia64 , powerpc , sparc64 ЙМЙ pc98 (БМШФЕТОБФЙЧОБС ЧЕФЧШ БРРБТБФОПЗП ПВЕУРЕЮЕОЙС, РПРХМСТОБС Ч сРПОЙЙ). чУЕ, ЮФП ОБИПДЙФУС ЧОХФТЙ ЛБФБМПЗБ ПРТЕДЕМЕООПК БТИЙФЕЛФХТЩ, ПФОПУЙФУС ФПМШЛП Л ЬФПК БТИЙФЕЛФХТЕ; ПУФБМШОПК ЛПД СЧМСЕФУС НБЫЙООП ОЕЪБЧЙУЙНЩН Й ПВЭЙН ДМС ЧУЕИ РМБФЖПТН, ОБ ЛПФПТЩЕ FreeBSD НПЦЕФ ВЩФШ РПФЕОГЙБМШОП РПТФЙТПЧБОБ. пВТБФЙФЕ ЧОЙНБОЙЕ ОБ МПЗЙЮЕУЛХА УФТХЛФХТХ ЛБФБМПЗПЧ, Ч ЛПФПТПК ЛБЦДПЕ РПДДЕТЦЙЧБЕНПЕ ХУФТПКУФЧП, ЛБЦДБС ЖБКМПЧБС УЙУФЕНБ Й ЛБЦДБС ПРГЙС ТБЪНЕЭБЕФУС Ч УЧПЈН УПВУФЧЕООПН ЛБФБМПЗЕ.

ч РТЙНЕТБИ ЬФПК ЗМБЧЩ РПДТБЪХНЕЧБЕФУС, ЮФП ЧЩ ЙУРПМШЪХЕФЕ БТИЙФЕЛФХТХ i386. еУМЙ БТИЙФЕЛФХТБ ЧБЫЕК УЙУФЕНЩ ПФМЙЮБЕФУС ПФ ЙУРПМШЪХЕНПК Ч РТЙНЕТБИ, ФП ЧБН ОЕПВИПДЙНП ВХДЕФ УППФЧЕФУФЧЕООП ЙЪНЕОЙФШ ЙНЕОБ ЛБФБМПЗПЧ.

рТЙНЕЮБОЙЕ:

еУМЙ ЛБФБМПЗ /usr/src/ ПФУХФУФЧХЕФ Ч ЧБЫЕК УЙУФЕНЕ (ЙМЙ ЬФПФ ЛБФБМПЗ РХУФ), ФП ЬФП ЪОБЮЙФ, ЮФП ЙУИПДОЩЕ ФЕЛУФЩ ОЕ ВЩМЙ ХУФБОПЧМЕОЩ. оБЙВПМЕЕ РТПУФПК УРПУПВ ХУФБОПЧЙФШ ЙИ - ЧПУРПМШЪПЧБФШУС , ЛБЛ ПРЙУБОП Ч тБЪДЕМљ21.5, > . дБМЕЕ, УПЪДБКФЕ УЙНЧПМЙЮЕУЛХА УУЩМЛХ ОБ /usr/src/sys/ :

# ln -s /usr/src/sys /sys

ъБФЕН, РЕТЕКДЙФЕ Ч ЛБФБМПЗ arch /conf Й УЛПРЙТХКФЕ ЖБКМ ЛПОЖЙЗХТБГЙЙ GENERIC Ч ЖБКМ У ЧЩВТБООЩН ЧБНЙ ЙНЕОЕН. оБРТЙНЕТ:

# cd /usr/src/sys/ i386 /conf # cp GENERIC MYKERNEL

рП ФТБДЙГЙЙ ЙНС УПУФПЙФ ЙЪ ВХЛЧ Ч ЧЕТИОЕН ТЕЗЙУФТЕ, Й ЕУМЙ ЧЩ РПДДЕТЦЙЧБЕФЕ ОЕУЛПМШЛП ЛПНРШАФЕТПЧ FreeBSD ОБ ТБЪМЙЮОПН ПВПТХДПЧБОЙЙ, ИПТПЫБС ЙДЕС ДПВБЧМСФШ ЬФП ЙНС Л ЙНЕОЙ ИПУФБ. нЩ ОБЪЧБМЙ СДТП MYKERNEL Ч ЬФПН РТЙНЕТЕ.

рПДУЛБЪЛБ:

рПНЕЭЕОЙЕ ЖБКМБ ЛПОЖЙЗХТБГЙЙ СДТБ Ч /usr/src НПЦЕФ ВЩФШ РМПИПК ЙДЕЕК. еУМЙ ЧЩ ЙУРЩФЩЧБЕФЕ РТПВМЕНЩ, ЙИ НПЦОП ТЕЫЙФШ ХДБМЙЧ /usr/src Й ОБЮБЧ ЧУЕ У ОБЮБМБ. рПУМЕ ЬФПЗП ПВЩЮОП ФТЕВХЕФУС ОЕУЛПМШЛП УЕЛХОД, ЮФПВЩ РПОСФШ, ЮФП ЧЩ ХДБМЙМЙ УПВУФЧЕООЩК ЖБКМ ОБУФТПКЛЙ СДТБ. оЕ ТЕДБЛФЙТХКФЕ ОЕРПУТЕДУФЧЕООП GENERIC , ПО НПЦЕФ ВЩФШ ФБЛЦЕ РЕТЕЪБРЙУБО Й РТЙ УМЕДХАЭЕН ПВОПЧМЕОЙЙ ДЕТЕЧБ ЙУИПДОЩИ ФЕЛУФПЧ , Й ЙЪНЕОЕОЙС СДТБ ВХДХФ РПФЕТСОЩ.

чЩ НПЦЕФЕ УПИТБОЙФШ ЖБКМ ЛПОЖЙЗХТБГЙЙ СДТБ Ч ДТХЗПН НЕУФЕ, Б ЪБФЕН УПЪДБФШ УЙНЧПМЙЮЕУЛХА УУЩМЛХ ОБ ЬФПФ ЖБКМ Ч ЛБФБМПЗЕ i386 .

оБРТЙНЕТ:

# cd /usr/src/sys/ i386 /conf # mkdir /root/kernels # cp GENERIC /root/kernels/ MYKERNEL # ln -s /root/kernels/ MYKERNEL

фЕРЕТШ ПФТЕДБЛФЙТХКФЕ ЖБКМ MYKERNEL Ч УЧПЈН МАВЙНПН ФЕЛУФПЧПН ТЕДБЛФПТЕ. еУМЙ ЧЩ ФПМШЛП ОБЮЙОБЕФЕ, ЕДЙОУФЧЕООЩН ДПУФХРОЩН ТЕДБЛФПТПН УЛПТЕЕ ЧУЕЗП ВХДЕФ vi , ЛПФПТЩК УМЙЫЛПН УМПЦЕО ДМС ФПЗП, ЮФПВЩ ПРЙУБФШ ЕЗП ЪДЕУШ, ОП Ч ВЙВМЙПЗТБЖЙЙ РЕТЕЮЙУМЕОП НОПЦЕУФЧП ЛОЙЗ, Ч ЛПФПТЩИ ЕЗП ЙУРПМШЪПЧБОЙЕ ИПТПЫП ПУЧЕЭЕОП. пДОБЛП FreeBSD РТЕДПУФБЧМСЕФ ВПМЕЕ РТПУФПК ТЕДБЛФПТ ee , ЛПФПТЩК, ЕУМЙ ЧЩ - ОПЧЙЮПЛ, РПДПКДЈФ ЧБН ВПМШЫЕ ЧУЕЗП. оЕ УФЕУОСКФЕУШ ЙЪНЕОСФШ УФТПЛЙ ЛПННЕОФБТЙЕЧ Ч ОБЮБМЕ ЖБКМБ, У ФЕН, ЮФПВЩ ПФПВТБЪЙФШ ЧБЫХ ЛПОЖЙЗХТБГЙА ЙМЙ ЙЪНЕОЕОЙС, ЛПФПТЩЕ ЧЩ УДЕМБМЙ РП УТБЧОЕОЙА У GENERIC .

еУМЙ ЧБН РТЙИПДЙМПУШ УПВЙТБФШ СДТП ДМС SunOS TM ЙМЙ ЛБЛПК-МЙВП ДТХЗПК ПРЕТБГЙПООПК УЙУФЕНЩ ФЙРБ BSD, НОПЗПЕ ЙЪ ФПЗП, ЮФП УПДЕТЦЙФУС Ч ЬФПН ЖБКМЕ ВХДЕФ ПЮЕОШ ЪОБЛПНП ЧБН. еУМЙ ЦЕ ЧЩ, ОБРТПФЙЧ, ЙУРПМШЪПЧБМЙ ДТХЗХА ПРЕТБГЙПООХА УЙУФЕНХ, ФБЛХА ЛБЛ DOS, ЖБКМ ЛПОЖЙЗХТБГЙЙ GENERIC НПЦЕФ РПЛБЪБФШУС ЧБН ЛТБКОЕ УМПЦОЩН, РПЬФПНХ УМЕДХКФЕ ЙОУФТХЛГЙСН Ч ТБЪДЕМЕ лПОЖЙЗХТБГЙПООЩК ЖБКМ НЕДМЕООП Й ЧОЙНБФЕМШОП.

оПЧПЕ СДТП ВХДЕФ УЛПРЙТПЧБОП Ч ЛБФБМПЗ /boot/kernel ЛБЛ /boot/kernel/kernel , Б УФБТПЕ СДТП ВХДЕФ РЕТЕНЕЭЕОП Ч /boot/kernel.old/kernel . фЕРЕТШ РЕТЕЪБЗТХЪЙФЕ УЙУФЕНХ ДМС ФПЗП, ЮФПВЩ ЙУРПМШЪПЧБФШ ОПЧПЕ СДТП. еУМЙ ЮФП-ФП РПКДЈФ ОЕ ФБЛ, ЧЩ НПЦЕФЕ ПВТБФЙФШУС Л ТБЪДЕМХ тЕЫЕОЙЕ РТПВМЕН Ч ЛПОГЕ ЬФПК ЗМБЧЩ, ЛПФПТЩК НПЦЕФ ПЛБЪБФШУС РПМЕЪЕО. оЕ ЪБВХДШФЕ РТПЮЙФБФШ ТБЪДЕМ, ЛПФПТЩК ПВЯСУОСЕФ ЛБЛ ЙУРТБЧЙФШ УЙФХБГЙА, ЛПЗДБ СДТП ОЕ ЪБЗТХЦБЕФУС .

рТЙНЕЮБОЙЕ:

дТХЗЙЕ ЖБКМЩ, ПФОПУСЭЙЕУС Л РТПГЕУУХ ЪБЗТХЪЛЙ, ФБЛЙЕ ЛБЛ ЪБЗТХЪЮЙЛ () Й ЕЗП ЛПОЖЙЗХТБГЙПООЩЕ ЖБКМЩ, ТБЪНЕЭБАФУС Ч /boot . нПДХМЙ УФПТПООЙИ РТПЙЪЧПДЙФЕМЕК НПЗХФ ВЩФШ РПНЕЭЕОЩ Ч /boot/kernel , ИПФС РПМШЪПЧБФЕМЙ ДПМЦОЩ ЪОБФШ, ЮФП ПЮЕОШ ЧБЦОП, ЮФПВЩ НПДХМЙ ВЩМЙ УЙОИТПОЙЪЙТПЧБОЩ У УПВТБООЩН СДТПН. нПДХМЙ, ОЕ ТБУУЮЙФБООЩЕ ОБ ТБВПФХ У УПВТБООЩН СДТПН, НПЗХФ ЧЩЪЧБФШ ОЕУФБВЙМШОПУФШ Й ОЕЛПТТЕЛФОПУФШ ТБВПФЩ.

статей в инете завались как хочешь так ядро и собирай, я напишу чем пользуюсь я и почему так, кто не согласен пишем ниже:)

1. Копируем наше хорошее ядро, вдруг че..(да я в курсе что при инстале старое переместиться в kernel.old)

# cp -R kernel/ kernel.good/

2. Собираем инфу: что у нас на маме за контролеры и что за железо

# cat /var/run/dmesg.boot Смотрите какие контролеры, что нам пригодиться # pciconf -lv

3. Проверяем на месте ли исходные коды

# ls /sys

3.0 Если их там не оказалось, забираем или с диска или с инета:
3.0а С диска

Mount /cdrom cd /cdrom ls ; должны увидеть папочки на диске cd src/ ./install.sh all cd /usr/src/ umount /cdrom

3.0b Если же у нас случайно есть инет, а диска нет то(в моем случае Фря 8.3):

Cd /usr/ports/devel/subversion make config-recursive svn checkout http://svn.freebsd.org/base/releng/8.3/ /usr/src grep -A 2 "TYPE="" /usr/src/sys/conf/newvers.sh Должно показать что-то типа такого TYPE="FreeBSD" REVISION="8.3" BRANCH="RELEASE-p4"

Если захотим обновить еще когда либо исходные коды то:

Svn update /usr/src/

Нам нужен еще и впн, пппое сервер со сжатием и шифрованием MPPE, то
3.1 тянем http://mavhome.dp.ua/MPPC/mppc-1.0.tgz

Wget http://mavhome.dp.ua/MPPC/mppc-1.0.tgz

3.2 Распаковываем в /usr/src/sys/net

Cd /usr/src/sys/net tar -xvf /usr/home/username/mppc-1.0.tgz

4. Копируем конфиг дженерика(его перепишемс и будет у нас свое ядро)
Кусочек теории
Конфигурационные файлы можно найти в каталоге /sys/»arch»/conf. В каталоге находятся несколько файлов, из которых наиболее важными являются:
DEFAULTS Это список параметров и устройств, поддержка которых включена по умолчанию для данной архитектуры.
GENERIC Этот файл содержит конфигурацию стандартного ядра.
GENERIC.hints Это файл с указаниями, который впоследствии устанавливается как /boot/device.hints. В данном файле содержится конфигурационная информация, необходимая для настройки устаревших аппаратных устройств.
MAC Этот конфигурационный файл ядра обеспечивает поддержку обязательного контроля доступа (Mandatory Access Controls) — системы многоуровневого управления доступом, используемой в средах с высокой степенью защиты. Этот конфигурационный файл требуется только в случае использования MAC.
NOTES Это комплексная конфигурация ядра для заданной аппаратной архитектуры, включены все особенности, характерные для той или иной платформы. Платформонезависимые особенности можно найти в файле /usr/src/sys/conf/NOTES.

# cd /usr/src/sys/i386/conf # mkdir /root/kernels # cp GENERIC /root/kernels/MYKERNEL # ln -s /root/kernels/MYKERNEL

5. Смотрим из чего наше ядро состоит и попутно правим дженерик
Параметры ядра:
cpu Данная метка указывает, какие типы процессоров поддерживаются ядром. Конфигурация ядра для аппаратной платформы amd64/EM64T включает в себя единственную запись с указанием типа процессора.
ident содержит имя ядра, произвольная строка
makeoptions Данная строка содержит инструкции для программного обеспечения, выполняющего сборку ядра. Наиболее распространенный параметр — DEBUG=-g, который сообщает компилятору о необходимости включения в ядро отладочной информации.
options Записи этого типа описывают функции ядра, которые непосредственно не связаны с аппаратным обеспечением. Сюда входят файловые системы, сетевые протоколы и отладчики, встроенные в ядро.
devices Записи этого типа описывают устройства или драйверы устройств, они содержат инструкции, которые описывают, как ядро должно взаимодействовать с определенными устройствами.

Ядро которое будет поддерживать пеньки первые нам не нужно поэтому оставляем:

Cpu I686_CPU ident MYKERNEL # опции отладки ядра (в жизни, вероятно не пригодится, но если поймаете глюк # и захотите сообщить об этом разработчикам - то пригодится) makeoptions DEBUG=-g #4Crypt_and_compress options NETGRAPH_MPPC_ENCRYPTION options NETGRAPH_MPPC_COMPRESSION #4PF: device pf device pflog device pfsync options ALTQ options ALTQ_CBQ options ALTQ_RED options ALTQ_RIO options ALTQ_HFSC options ALTQ_CDNR options ALTQ_PRIQ options ALTQ_NOPCC options ALTQ_DEBUG #4MPD options NETGRAPH 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 #polling НЕ делайте это, сейчас 2012год!! #options DEVICE_POLLING #options HZ=1000 # или 2000 или 4000 чем больше тем шустрее буит ходить траф #Multiple routing tables options ROUTETABLES=3 # # Определяет количество дескрипторов в системе # (0 - значит определяет "автопилот" :))) maxusers 0 # ULE планировщик(распределяет потоки) options SCHED_ULE # Возможность вытеснения (preemption) повышает эффективность FreeBSD # в многозадачном режиме. options PREEMPTION # InterNETworking IPv4 options INET # IPv6 communications protocols IPv6 options INET6 # без этого ипв6 не пашет options SCTP # файловая система FreeBSD options FFS # Этот параметр включает в ядре технологию Soft Updates, которая повышает # скорость записи на диски. Несмотря на то, что эта технология включена # в ядре, она должна быть включена для отдельных дисков. options SOFTUPDATES # позволяют определять подробные права доступа к файлам options UFS_ACL # обеспечивает поддержку индексирования каталогов, что повышает скорость # работы с каталогами, содержащими тысячи файлов. options UFS_DIRHASH # включает gjournal-based UFS журналирование options UFS_GJOURNAL # можем сделать корнем / мемори диск options MD_ROOT # Этот параметр (и все остальные параметры, оканчивающиеся на _R00T) # позволяет использовать в качестве дискового устройства для корневого раздела # другие файловые системы, отличные от FFS. Инсталлятор использует в качестве # корневой файловой системы устройство памяти (MD). Если вы используете # бездисковые системы, вам потребуется поддержка NFS в качестве корневого # раздела. Если вы устанавливаете FreeBSD на стандартный компьютер - # с жестким диском и клавиатурой, то все эти параметры вам не потребуются. #options NFSCLIENT # Network Filesystem Client #options NFSSERVER # Network Filesystem Server # Эти два параметра обеспечивают поддержку сетевой файловой системы (NFS). # Параметр NFSCLIENT позволит монтировать разделы, которые обслуживаются # другим компьютером в сети, а параметр NFSSERVER позволит обеспечить доступ # к своим разделам для других компьютеров. # Network Lock Manager #options NFSLOCKD # NFS usable as /, requires NFSCLIENT #options NFS_ROOT # MSDOS Filesystem поддержка фат разделов options MSDOSFS # ISO 9660 Filesystem поддержка разделов CD options CD9660 # Process filesystem (requires PSEUDOFS) файловая система процессов options PROCFS # Pseudo-filesystem framework options PSEUDOFS # GUID Partition Tables. options GEOM_PART_GPT # Provides labelization options GEOM_LABEL #совместимость со старыми версиями # BSD 4.3 TTY compat (sgtty) options COMPAT_43TTY options COMPAT_FREEBSD4 options COMPAT_FREEBSD5 options COMPAT_FREEBSD6 options COMPAT_FREEBSD7 # Delay (in ms) before probing SCSI # Задержка при загрузке для того, чтобы SCSI-контроллер успел # обнаружить все подключенные к нему устройства. #options SCSI_DELAY=5000 #options KTRACE # ktrace(1) support options STACK # stack(9) support # Эти параметры обеспечивают поддержку разделяемой памяти и межпроцессных # взаимодействий в стиле System V. На эту возможность опираются многие # программы управления базами данных. #Этот параметр предоставляет поддержку разделяемой памяти System V. #Наиболее распространенное применение этого - расширение XSHM в X, которое #многие приложения, интенсивно работающие с графикой, будут автоматически #использовать для повышения скорости работы. Если вы используете X, эта опция #будет необходима. options SYSVSHM # SYSV-style shared memory # Поддержка сообщений System V. Этот параметр добавляет в ядро # всего лишь несколько сотен байт. options SYSVMSG # SYSV-style message queues # Поддержка семафоров System V. Не настолько часто используемая # возможность, но в ядро добавляет всего несколько сотен байт. options SYSVSEM # SYSV-style semaphores options P1003_1B_SEMAPHORES # POSIX-style semaphores # Расширения реального времени, добавленные 1993 POSIX®. # Определенные приложения из коллекции используют их, например StarOffice™. options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed. #options KBD_INSTALL_CDEV # inst a CDEV entry in /dev для клав USB-овых options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4) options AUDIT # Security event auditing options MAC # TrustedBSD MAC Framework options FLOWTABLE # per-cpu routing cache #options KDTRACE_HOOKS # Kernel DTrace hooks options INCLUDE_CONFIG_FILE # Include this file in kernel # параметры для отладки options KDB # Kernel debugger related code options KDB_TRACE # Print a stack trace for a panic # To make an SMP kernel, the next two lines are needed options SMP # Symmetric MultiProcessor Kernel device apic # I/O APIC (i386 only) # активируют симметричную многопроцессорную обработку (Symmetric # Multiprocessing, SMP) в ядрах, предназначенных для работы в архитектуре i386: # Параметр SMP предписывает ядру производить планирование работы процессов # на нескольких CPU, а параметр apic обеспечивает поддержку ввода/вывода для # ядер SMP. FreeBSD распространяется с поддержкой SMP, вкл по умолчанию. # Устройство apic разрешает использование набора I/O APIC для распределения прерываний. Оно может быть использовано как с однопроцессорными, так и с многопроцессорными ядрами (для последних наличие apic является обязательным). # CPU frequency control device cpufreq # Bus support. device acpi device eisa device pci # Убирать их следует в том случае, если в системе действительно нет таких шин. # Велико количество систем «без поддержки традиционных устройств» (legacy-free), # в которых шина ISA скрыта где-то внутри. # Floppy drives #device fdc # ATA and ATAPI devices device ata device atadisk # ATA disk drives device ataraid # ATA RAID drives device atapicd # ATAPI CDROM drives #device atapifd # ATAPI floppy drives #device atapist # ATAPI tape drives options ATA_STATIC_ID # Static device numbering # В статическом режиме контролер рассматривается как железяка соответственно # мы имеем 2 канала по 2 устройства 0-1 и 2-3 соответственно PrMaster PrSlave # и SecMaster SecSlave для фрюхи ad0 ad1 ad2 ad3. и если переставить винт с # PriMaster на SecMaster то тома на нем из ad0 станут ad2. # Если выключить ATA_STATIC_ID, то получаем динамическую нумерацию не по # каналам и устройствам, а по устройствам, т. е. винтам. Проще сказать так, # если у нас стоял один винт PriMaster и мы выключили эту опцию, то после # запуска нового ядра номер разделов не изменится. Теперь если переключить, # кабелем или перемычками, винт на место любого другого, например SecSlave, # он всеравно останется ad0! Он один в машине;) # Соответственно добавив второй винт, система будет определять их старшинство # по порядку подключения # Например мы включим 2 винта на PriSlave и SecMaster # Получим PriSlave - ad0 и SecMaster - ad1. # SCSI Controllers (закоментил весь раздел) #device ahb # EISA AHA1742 family #device ahc # AHA2940 and onboard AIC7xxx devices #options AHC_REG_PRETTY_PRINT # Print register bitfields in debug # output. Adds ~128k to driver. #device ahd # AHA39320/29320 and onboard AIC79xx devices #options AHD_REG_PRETTY_PRINT # Print register bitfields in debug # output. Adds ~215k to driver. #Строки вида *_REG_PRETTY_PRINT включают режим отладки для соответствующих драйверов. # SCSI peripherals оставил ибо нужно для USB) device scbus # SCSI bus (required for SCSI) device ch # SCSI media changers device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access) device ses # SCSI Environmental Services (and SAF-TE) # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc # AT keyboard controller device atkbd # AT keyboard device psm # PS/2 mouse device kbdmux # keyboard multiplexer device vga # VGA video card driver device splash # Splash screen and screen saver support # syscons is the default console driver, resembling an SCO console # системная консоль - без этого пункта всё работает, но на # локальном мониторе ничего не показывает:)) device sc device agp # support several AGP chipsets # Power management support (see NOTES for more options) #device apm # Add suspend/resume support for the i8254. device pmtimer # PCCARD (PCMCIA) support # PCMCIA and cardbus bridge support на всяк случай #device cbb # cardbus (yenta) bridge #device pccard # PC Card (16-bit) bus #device cardbus # CardBus (32-bit) bus # Serial (COM) ports device uart # Generic UART driver # Parallel port device ppc # Интерфейс параллельного порта на ISA. device ppbus # Parallel port bus (required) device lpt # Printer #device plip # TCP/IP over parallel #device ppi # ввода/вывод общего назначения (""geek port"") + IEEE1284 ввод/вывод. #device vpo # Драйвер привода Iomega Zip. Требует наличия scbus и da. # PCI Ethernet NICs. Оставил только одну:) device em # Intel PRO/1000 Gigabit Ethernet Family # Pseudo devices. # Это петлевой интерфейс, позволяющий системе взаимодействовать с самой # собой через сетевые сокеты, с использованием сетевых протоколов. device loop # Network loopback # Это устройство обеспечивает генерацию псевдослучайных чисел, необходимых в # операциях шифрования и таких важных программах, как игры. FreeBSD # обеспечивает поддержку разнообразных источников случайных чисел, и все они # объединяются в виде устройств псевдослучайных чисел # /dev/random /dev/urandom. device random # обладает массой особенностей, характерных для устройств, и потому FreeBSD # представляет его как устройство. Оставьте эту строку! device ether # Ethernet support device vlan # 802.1Q VLAN support # логический пакетный канал (logicalpacket tunnel). Используется различными # программами для обмена пакетами с ядром. Такое псевдоустройство необходимо # для поддержки РРР средствами, не входящими в ядро (userland PPP), - # обычными коммутируемыми соединениями. device tun # Packet tunnel. # это псевдотерминал. Когда вы подключаетесь к системе по протоколам telnet или # SSH, FreeBSD должна иметь возможность отслеживать терминальные сеансы, # выводить символы на экран и читать ввод с клавиатуры. Система обслуживает # удаленное соединение как обычный физический монитор и клавиатуру. # Псевдотерминал - это псевдоустройство, напоминающее терминал, # связанное с соединением. device pty # BSD-style compatibility pseudo ttys # позволяет хранить файлы в памяти. Это очень удобно для организации очень # быстрых хранилищ временных данных. Для большинства (но не для всех) # серверов Интернета диски в памяти - это просто непродуктивное # растрачивание оперативной памяти. Кроме того, диски в памяти могут # использоваться для монтирования и доступа к образам дисков. device md # Memory "disks" device gif # IPv6 and IPv4 tunneling device faith # IPv6-to-IPv4 relaying (translation) device firmware # firmware assist module # The `bpf" device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! # Note that "bpf" is required for DHCP. device bpf # Berkeley packet filter # USB support все что мне потребовалось options USB_DEBUG # enable debug msgs device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device ehci # EHCI PCI->USB interface (USB 2.0) device usb # USB Bus (required) #device udbp # USB Double Bulk Pipe devices device uhid # "Human Interface Devices" device ukbd # Keyboard device ulpt # Printer device umass # Disks/Mass storage - Requires scbus and da device ums # Mouse #device urio # Diamond Rio 500 MP3 player # USB Serial devices device u3g # USB-based 3G modems (Option, Huawei, Sierra)

6. Переходим к сорцам

# cd /usr/src

7. Собираем ядро

# make buildkernel KERNCONF=MYKERNEL

8. Ставим ядро

# make installkernel KERNCONF=MYKERNEL

10. Если собирали удаленно то ждем, или делаем одноразовую загрузку нового ядра

App0. Дополнение о железе
Если у вас имеется аппаратное устройство, которое не поддерживается ядром GENERIC, загляните в файл NOTES. Некоторые из перечисленных в этом файле особенностей имеют неясное назначение, но если у вас имеется определенное Включения, исключения и расширения ядра устройство, то вы сможете разобраться, какая запись ему соответствует.
Механизм конфигурирования ядра FreeBSD обладает двумя интересными возможностями, которые способны упростить обслуживание ядра: ключевые слова с префиксом nо и включения. Возможность подключения позволяет добавить отдельный файл в конфигурацию ядра. Например, если имеется конфигурация ядра, которая описана как «GENERIC с парой дополнительных настроек», к ней можно было бы подключить конфигурацию GENERIC с помощью оператора include: include GENERIC Так, например, если необходимо собрать ядро, которое обладает функциональностью GENERIC, но кроме того поддерживает микропроцессор Soekris, можно было бы создать конфигурацию, составленную из следующих строк:
ident MYKERNEL
include GENERIC
options CPU_SOEKRIS
также можно использовать
nodevice
nooption

App1. Одноразовая загрузка нового ядра:
1. Копируем собраное ядро в тестовую папку хорошее ядро в папку ядра

# mv /boot/kernel /boot/kernel.test # mkdir /boot/kernel # cp /boot/kernel.good/* /boot/kernel/

2. При след запуске единожды будет загружено тестовое, если понравилось делаем его основным

Nextboot -k kernel.test

3. Если все прошло гладко

# mv /boot/kernel /boot/kernel.previous # mv /boot/kernel.test /boot/kernel

Если нет просите обслуживающий персонал выключить и включить:)

App2. ПРОБЛЕМЫ:
Когда система извергает страшное проклятие: «lock order reversals» (аннулирован запрос на блокировку), Основные источники проблем — это ACPI, РАЕ(не отключается), SMP и аннулирование запроса на блокировку.
http://ipv4.sources.zabbadoz.net/freebsd/lor.html

hint. apic. 0. disabled=1. отключение в уже собраном ядре
kern. smp. disabled=1 отключение в уже собраном ядре
hint. acpi. 0. disabled=1 отключение в уже собраном ядре

App3. ОТЛАДКА при панике
1.Ядро должно быть с
makeoptions DEBUG=-g
options KDB
options KDB_TRACE
options DDB # отказ от автоматической перезагрузки
2.Получение обратной трассировки
cd /boot/kernel.panicked/
# kgdb kernel.symbols /var/crash/vmcore.0
Backtrace
3.Повтор паники в однопользовательском режиме
mount -аr
# /etc/rc.d/dumpon start

App4. LOADER
Если же чтото напутали, и сервак не стартует, то с помощью лоадера мы можем загрузить старое ядро
lsdev - список устройств доступных для загрузки
show - значение переменных загрузки из конф файла
set - изменение параметра загрузки
lsmod - модули и ядро загруженные в память
unload - полностью выгрузить из памяти ядро и модули
boot – продолжить загрузку
Загрузка альтернативного ядра
unload
load /boot/kernel.good/kernel
load /boot/kernel.good/acpi.ko все остальное по желанию
boot

App5. Модули ядра
kldstat список загруженых модулей

Kldload wlan_wep или kldload /boot/kernel/wlan_wep.ko

kldunload выгрузка модуля

Kldunload wlan_wep.ko

прописав в /boot/kernel/loader.conf нужный модуль, он будет автоматически загружаться при запуски системы

Procfs_load="YES"

App6. Выборочная пересборка модулей
По умолчанию, при построении ядра, все модули ядра так же будут пересобраны. Если вы хотите обновить ядро быстрее или построить только определённые модули, то вам нужно отредактировать файл /etc/make.conf перед началом процесса сборки ядра:

MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
Эта переменная устанавливает список модулей, которые нужно построить вместо построения всех модулей.

WITHOUT_MODULES = linux acpi sound ntfs
В этой переменной перечисляются основные модули, которые необходимо исключить из процесса сборки. За другими переменными, которые вы можете посчитать полезными в процессе сборки ядра, обращайтесь к странице справочника make.conf(5).


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

Для того, чтобы скомпилировать свое ядро необходимо установить исходники ядра (src- Source for everything but encryption). Если они уже установлены то заходим в каталог /usr/src/sys (FreeBSD kernel).Если же у вас не установлены исходники ядра, установить их можно через sysinstall. Считаем, что исходники ядра вы установили.

Под пользователем root идем в папку /usr/src/sys/i386/conf.

# cd /usr/src/sys/i386/conf

Копируем файл GENERIC, например в mykernel. Полученный файл и будем править.

Если у вас машина Pentium4, то советую сразу закоментировать строки:

Цитата
cpu I386_CPU
cpu I486_CPU
cpu I586_CPU

пусть наша машина будет настроена на определенный процессор и не распыляется на всякую фигню;)

Можно отключить не используемые устройства, что уменьшит размер ядра и соответсвенно нагрузку на процессор. Посмотреть какие у вас устройства можно коамандой dmesg, после загрузки компьютера.

Так же можно добавить устройства, которые по умолчанию не поддерживаются в ядре. Более подробно устройства описаны в файл LINT для FreeBSD ветки 4.х, и в файле NOTES для FreeBSD ветки 5.х.

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

Нам надо будет выполнить следующие команды:

Если все прошло удачно, то все что нам надо это перезагрузиться.

P.S. Советую перед эксперементами сохранить нормальное ядро, например под именем kernel.good и тогда если не загрузилось наше новое ядро, мы вместо kernel.old указажем boot kernel.good. Это предлагаю сделать, потмоу что при новом собирании ядра наш kernel.old перезапишется например не рабочим ядром и мы вообще не сможем загрузиться.

P.P.S. Сохранение хорошего рабочего ядра:

Для FreeBSD 4.x - команда cp /kernel /kernel.good

Для FreeBSD 5.x - команда cp -R /boot/kernel /boot/kernel.good

Второй способ обновления ядра:

Перейдите в каталог /usr/src.

Соберите ядро.

# make buildkernel KERNCONF=MYKERNEL

Установите новое ядро.

# make installkernel KERNCONF=MYKERNEL

Замечание: Этот способ построения требует наличия всех исходных файлов систем. Если вы только установили исходные файлы ядра, то используйте традиционный способ, как описано выше.

MYKERNEL - конфигурационный файл вашего ядра, который для i386 находится в папке /usr/src/sys/i386/conf. Если не указывать параметр KERNCONF, то соберется ядро GENERIC.