Собираем и конфигурируем ядро FreeBSD 9.1

Если папка с исходными файлами(/usr/src) пустая, то её необходимо заполнить.
— Скачиваем архив с исходными файлами: ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/9.1-RELEASE/src.txz (Этот архив для 64 битной архитектуры FreeBSD 9.1, если уже более новая то выбираем её)
— После этого распаковываем в /, так как архив имеет адресацию от /
— Удаляем скаченный архив, ибо он уже не нужен.
Как все это выполняет командами:
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/9.1-RELEASE/src.txz
tar -C / -xvzf src.txz
rm src.txz

Переходим в папку conf нашей архитектуры (у меня amd64) и копируем GENERIC(стандартный файл конфигурации) например в MAIN_KERNEL (или любое свое название, желательно большими буквами)
cd /usr/src/sys/amd64/conf # Переходим в папку с конфигурацией
cp GENERIC MAIN_KERNEL # Копируем файл
ee MAIN_KERNEL # ee просто тестовый редактор. Редактируем наш конфигурационный файл созданный на основе GENERIC


Конфигурационный файл ядра FreeBSD 9.1
cpu			HAMMER		# Архитектура CPU, HAMMER - 64 bit
ident		MAIN_KERNEL	# Имя ядра, такое-же как имя файла. Большими буквами.

options		IPFIREWALL						# Включаем ipfw
options		IPFIREWALL_VERBOSE				# Включаем логи ipfw
options		IPFIREWALL_VERBOSE_LIMIT=5		# Ограничение логи ipfw
options		IPFIREWALL_NAT					# Включаем ipfw NAT
options		LIBALIAS						# Включаем библиотеки
options		HZ="1000"						# ускорение работы гигабитного сетевого адаптера

options 	SCHED_ULE		# Планировщик по умолчанию во FreeBSD
options 	PREEMPTION		# Enable kernel thread preemption
options 	INET			# Поддержка сетевых возможностей
#options	INET6			# Поддержка протокола ipv6
options		SCTP			# Stream Control Transmission Protocol
options		FFS				# Поддержка основной файловой системы
options		SOFTUPDATES		# Поддержка soft updates файловой системы, ускоряет запись на диск
options		UFS_ACL			# Включает в ядре поддержку списков управления доступом (ACL)
options		UFS_DIRHASH		# Ускоряет работу больших каталогов. Если основная задача маршрутизация, можно выключать.
options		UFS_GJOURNAL	# Включает поддержку журналирование UFS, на SSD будет отключено. Опцию можно оставить.
options		TMPFS			# Временное файловое хранилище, там будет жить /tmp
#options	MD_ROOT			# Возможность использование дисков в памяти для корневой системы. Нужно для без дисковых систем.
#options	NFSCL			# Network Filesystem Client
#options	NFSD			# Network Filesystem Server
#options	NFSLOCKD		# Network Lock Manager
#options	NFS_ROOT		# NFS usable as. (Четыре параметра относится к сетевой файловой системы, отключить если не нужна.)
#options	MSDOSFS			# MSDOS файловая система
#options	CD9660			# ISO 9660 Filesystem (Файловая система CD)
#options	PROCFS			# Файловая система процессов. Сейчас уже не нужна, да и сама по умолчанию не монтирует.
#options	PSEUDOFS		# Pseudo-filesystem framework
options		GEOM_PART_GPT	# GUID Partition Tables. У меня разметка SSD как раз такая.
#options	GEOM_RAID		# Soft RAID functionality. (Рейдом пользовать не буду)
options		GEOM_LABEL		# Позволяет использовать метку для раздела.
options		COMPAT_FREEBSD32	# Compatible with i386 binaries
options		COMPAT_FREEBSD4		# Compatible with FreeBSD4
options		COMPAT_FREEBSD5		# Compatible with FreeBSD5
options		COMPAT_FREEBSD6		# Compatible with FreeBSD6
options		COMPAT_FREEBSD7		# Compatible with FreeBSD7
#options	SCSI_DELAY=5000		# Ожидание 5 секунд для идентифицирования SCSI устройств. Если нет SCSI отключаем.
#options	KTRACE		# ktrace(1) support (Поддержка трассировка, говорится удобно при отладке)
#options	STACK		# stack(9) support (Еще отладчик который требует DDB)
options		SYSVSHM		# SYSV-style shared memory
options		SYSVMSG		# SYSV-style message queues
options		SYSVSEM		# SYSV-style semaphores
options		_KPOSIX_PRIORITY_SCHEDULING	# POSIX P1003_1B real-time extensions (Реально время для каких то приложений, оставим)
options		PRINTF_BUFR_SIZE=128	# Prevent printf output being interspersed.
#options	KBD_INSTALL_CDEV		# USB клавиатуры, у меня PS/2.
options		HWPMC_HOOKS				# Necessary kernel hooks for hwpmc(4)  (Мониторинг производительности)
#options	AUDIT					# Аудит событий безопастности
options		MAC						# TrustedBSD MAC Framework (Как я понимаю, но связан с ACL)
#options	KDTRACE_FRAME			# Ensure frames are compiled in
#options	KDTRACE_HOOKS			# Kernel DTrace hooks
options		INCLUDE_CONFIG_FILE		# Включить конфигурационный файл в ядро. Позволит посмотреть с какими параметрами создано ядро. config -x /boot/kernel/kernel
#options	KDB						# Kernel debugger related code (Отладчик ядра, нужно если система для разработки.)
#options	KDB_TRACE				# Print a stack trace for a panic

#Далее пойдут устройства, все которые не используются я буду удалять. Интересные устройства комментирую и опишу их. Хотя все есть в руководстве на официальном сайте.

# Многопроцессорные системы, методом проверок получилось следующие: Опции обязательно если у вас один процессор с несколькими ядрами.
# Делал тесты нагрузки на примере Celeron 1007(2 ядра) с включенной и выключенной опцией ядра SMP, получил следующие:
# Ubench CPU: 414795 (SMP включено), Ubench CPU: 208665 (SMP выключено). Как можно видеть разница в производительности два раза.
options 	SMP				# Symmetric MultiProcessor Kernel

# CPU frequency control. Управление частотой ЦП, powerd автоматически понижает нагрузку. Методом проверок сокращение потребления не получил, intel и bios сам из коробки понижает.
device		cpufreq

# Bus support.
device		acpi			# Advanced Configuration and Power Interface
device		pci				# PCI слоты

# ATA controllers
device		ahci			# AHCI-compatible SATA controllers. Должно работать в режиме AHCI, выставлять в EFI(BIOS).
device		ata				# Legacy ATA/SATA controllers
options 	ATA_CAM			# Handle legacy controllers with CAM
options 	ATA_STATIC_ID	# Заставляет драйвер нумеровать устройства статически
#device		mvs				# Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA
#device		siis			# SiliconImage SiI3124/SiI3132/SiI3531 SATA

# ATA/SCSI peripherals (Для работы AHCI нужно много из этого)
device		scbus			# SCSI bus (required for ATA/SCSI). Без этого не собирается ядро с AHCI и нужно для umass.
#device		ch				# SCSI media changers
device		da				# Direct Access (disks) Нужно для umass
#device		sa				# Sequential Access (tape etc)
#device		cd				# CD
device		pass			# Passthrough device (direct ATA/SCSI access)
#device		ses				# Enclosure Services (SES and SAF-TE)
device		ctl				# CAM Target Layer

# atkbdc0 controls both the keyboard and the PS/2 mouse
device		atkbdc		# AT keyboard controller
device		atkbd		# AT keyboard
#device		psm			# PS/2 мышка не подключена

#device		kbdmux		# Две и более клавиатур

device		vga			# VGA video card driver
options 	VESA		# Add support for VESA BIOS Extensions (VBE)

#device		splash		# Заставка при загрузке

# syscons is the default console driver, resembling an SCO console
device		sc
options 	SC_PIXEL_MODE	# add support for the raster text mode

#device		agp			# Поддержка agp видео карт.

# Serial (COM) ports
#device		uart		# COM порт есть, но не использую. В EFI(BIOS) отключил

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device		miibus		# MII bus support
device		re			# RealTek 8139C+/8169/8169S/8110S

# Pseudo devices.
device		loop		# Network loopback
device		random		# Entropy device
device		ether		# Ethernet support
device		vlan		# 802.1Q VLAN support
device		tun			# Packet tunnel.
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

# Что-то вроде работа пакетов в широковещательной сети. Нужно для DHCP, а я подумываю его сделать.
#device		bpf			# Berkeley packet filter

# USB устройства
device		uhci		# UHCI PCI->USB interface
device		ohci		# OHCI PCI->USB interface
device		ehci		# EHCI PCI->USB interface (USB 2.0)
device		xhci		# XHCI PCI->USB interface (USB 3.0)
device		usb			# USB Bus (required)
device		umass		# Disks/Mass storage - Requires scbus and da
device		uhid		# "Human Interface Devices"


Когда выбрали необходимы опции, сохраняем файл и переходим к компилированию ядра.

Для этого переходим в каталог /usr/src и выполняем команду
make buildkernel KERNCONF=MAIN_KERNEL

Где MAIN_KERNEL – имя файла нашей конфигурации ядра.
Дожидаемся окончания. Если нет ошибок, выполняем команду установки ядра
make installkernel KERNCONF=MAIN_KERNEL

Где MAIN_KERNEL – имя файла нашей конфигурации ядра.
Обратите внимания что я собрал с опциями для поддержки IPFW, он по умолчания все блокирует. Поэтому ssh работать не будет, но у меня сервер не удаленный. К тому же можно случайно что-то лишние убрать и система не загрузиться.
Перезагружаем системы и мы получаем собственное ядро FreeBSD.

Что бы убрать 10 секундное ожидание при загрузки (Меню загрузка) открываем файл /boot/defaults/loader.conf. Находим строчку autoboot_delay, раскомментируем и изменяем значение на «-1»

Статья будет периодически дополняться.
0.10
27.07.2013 23:26