Пересборка мира во FreeBSD


СОДЕРЖАНИЕ
" Установка исходных текстов системы
" Синхронизация (обновление) исходных текстов системы
" Сборка "МИРА"
" Компиляция ядра
" Инсталляция нового ядра
" Установка мира
ИСХОДНЫЕ ДАННЫЕ
# uname -a
FreeBSD freebsd.turbogaz.net 5.4-RELEASE FreeBSD 5.4-RELEASE #0: Sun May 8 10:21:06 UTC 2005
root@harlow.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
УСТАНОВКА ИСХОДНЫХ ТЕКСТОВ СИСТЕМЫ
Для начала установим исходные тексты системы, которые находятся на первом установочном диске. Для этого воспользуемся утилитой sysinstall
sysinstall --> Configure --> Distributions --> src --> All
CИНХРОНИЗАЦИЯ (ОБНОВЛЕНИЕ) ИСХОДНЫХ ТЕКСТОВ СИСТЕМЫ
Далее нам необходимо синхронизировать локальное дерево исходных текстов с некоторой версией FreeBSD (FreeBSD-RELEASE, FreeBSD-STABLE, FreeBSD-CURRENT)
ПРИМЕЧАНИЕ !!!
Ветки FreeBSD-STABLE и FreeBSD-CURRENT по своей природе являются изменяющимися. В разработке FreeBSD участвуют люди, и время от времени случаются ошибки. Иногда эти ошибки достаточно безобидны и приводят к выводу нового диагностического сообщения. Бывает, что изменение оказывается катастрофическим, и система не может загрузиться или разрушаются файловые системы (или что-нибудь ещё хуже).
Для этого воспользуемся программой CVSup. CVSup - это пакет программного обеспечения для распространения и обновления исходных текстов с основного репозитория CVS на удаленном сервере. Исходные тексты FreeBSD поддерживаются в репозитории CVS на центральной машине разработки в Калифорнии. С помощью CVSup пользователи FreeBSD легко могут поддерживать собственные исходные тексты в актуальном состоянии.
CVSup использует так называемую опрашивающую (pull) модель обновления. Работая по этой модели, каждый клиент запрашивает обновления с сервера, если и когда они нужны. Сервер пассивно ожидает запросы на обновление от своих клиентов. Таким образом, все обновления инициируются клиентами. Сервер никогда не высылает не запрошенные обновления. Пользователь для получения обновлений должен либо запустить CVSup клиента вручную, либо добавить задание в cron для настройки периодических обновлений в автоматическом режиме.
Простейший способ установки CVSup это использование прекомпилированного пакета net/cvsup из коллекции пакетов FreeBSD. Если вы предпочтете собрать CVSup из исходных текстов, можете использовать вместо этого порт net/cvsup. Но имейте ввиду: порт net/cvsup зависит от системы Modula-3, которой потребуется существенный объем времени и пространства на диске для загрузки и установки.
ПРИМЕЧАНИЕ !!!
Если вы собираетесь использовать CVSup на компьютере, где нет установленного XFree86 или Xorg, например, на сервере, используйте порт, не включающий CVSup GUI, net/cvsup-without-gui.
# cd /usr/ports/net/cvsup-without-gui/
# make install clean
Работа CVSup контролируется файлом настройки, называемым supfile. В каталоге /usr/share/examples/cvsup/ находится несколько примеров supfile.
supfile - это текстовый файл. Комментарии, начинающиеся с #, продолжаются до конца строки. Пустые строки и строки, содержащие только комментарии, игнорируются.
После ознакомления с примерами, а также прочтения соответствующей главы в handbook, составляем следующий supfile
#
# /usr/local/etc/src-update.sup
#

Ветвь релиза для FreeBSD-5.4, используется только для исправлений безопасности и других критических исправлений.
*default tag=RELENG_5_4

Сообщаем cvsup откуда забирать обновления. Подойдет любое из CVSup зеркал, хотя вы должны попробовать выбрать ближайшее к вам зеркало.
*default host=cvsup2.ua.FreeBSD.org

Поле prefix указывает cvsup где размещать получаемые файлы.
В этом примере, мы поместим файлы непосредственно в главное дерево исходных текстов, /usr/src. Каталог src уже подразумевается в коллекциях, которые мы собираемся получить
*default prefix=/usr

Клиент CVSup поддерживает определенные файлы статуса в так называемом 'base' каталоге. Эти файлы помогают CVSup работать более эффективно путем поддержки истории уже полученных обновлений.
Мы будем использовать стандартный каталог base.
Клиент cvsup не запустится, если base каталог не существует.
*default base=/var/db

# release=cvs означает, что сервер должен получать информацию из главного репозитория FreeBSD CVS. delete дает CVSup возможность удалять файлы. Вы должны всегда указывать этот параметр, чтобы CVSup мог поддерживать дерево исходных текстов полностью актуальным. CVSup удалит только те файлы, за которые отвечает. Все другие файлы останутся нетронутыми. use-rel-suffix это ... мистика ;). Если вы действительно хотите узнать о нем, обратитесь к странице справочника cvsup. Просто укажите это поле и не беспокойтесь о нем больше. compress включает использование gzip сжатия при передаче данных.
*default release=cvs delete use-rel-suffix compress

Файлы, доступные через CVSup, организованы в именованные группы, называемые 'коллекциями'. В этом примере мы получим все дерево исходных текстов системы FreeBSD. Существует одиночная большая коллекция src-all, которая позволит нам сделать это.
src-all


ВНИМАНИЕ !!!
Хотя имеется возможностью обновлять только часть дерева исходных текстов (src-bin, src-include, src-kerberos5 и т.д.), настоятельно советую обновлять все дерево и производить перекомпиляцию пользовательских программ (то есть тех, которые работают в пространстве имен пользователя, например те, что находятся в каталогах /bin и /sbin) и ядра. Обновление только части дерева исходных текстов, только текстов ядра или только текстов пользовательских программ часто приводит к возникновению проблем. Эти проблемы могут варьироваться от ошибок компиляции до аварийных остановов системы или порчи данных.
ВЫБОР ОПТИМАЛЬНОГО ЗЕРКАЛА
Если вы не знаете, какое из зеркал наиболее оптимально для вас, то можно воспользоваться специальной утилитой - fastest_cvsup. Как видно из описания, она позволяет найти наиболее быстрый CVSup сервер.
Спасибо Docal за совет :)
# cd /usr/ports/sysutils/
# make search name=cvsup
Port: fastest_cvsup-0.2.9_2
Path: /usr/ports/sysutils/fastest_cvsup
Info: Finds fastest CVSup server
Maint: ports@FreeBSD.org
B-deps: perl-5.8.7_2
R-deps: perl-5.8.7_2
WWW: http://fastest-cvsup.sourceforge.net/

# cd fastest_cvsup
# make install clean
# fastest_cvsup -с ua
>> Querying servers in countries: ua
--> Connecting to cvsup.ua.freebsd.org [194.125.227.6]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 34.34 ms
...
--> Connecting to cvsup7.ua.freebsd.org [194.125.227.6]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 27.09 ms

>> Speed Daemons:
- 1st: cvsup2.ua.freebsd.org
- 2nd: cvsup5.ua.freebsd.org
- 3rd: cvsup6.ua.freebsd.org
После определения наиболее оптимального сервера для синхронизации можно приступить непосредственно к самой синхронизации.
# cvsup -g -L 2 -h cvsup2.ua.freebsd.org /usr/local/etc/src-update.sup
Parsing supfile "/usr/local/etc/src-update.sup"
Connecting to cvsup2.ua.freebsd.org
Connected to cvsup2.ua.freebsd.org
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
Running
Updating collection src-all/cvs
Edit src/UPDATING
Add delta 1.342.2.24.2.20 2006.02.01.19.43.09 cperciva
Edit src/sys/conf/newvers.sh
Add delta 1.62.2.18.2.16 2006.02.01.19.43.09 cperciva
Edit src/sys/netinet/tcp_sack.c
Add delta 1.3.2.5.2.1 2006.02.01.19.43.10 cperciva
Shutting down connection to server
Finished successfully
Параметр -g указывает CVSup не использовать GUI, как правило на серверах он и не нужен.
Параметр -L 2 указывает CVSup выводить информацию о каждом производимом обновлении. Есть три уровня протоколирования, от -L 0 до -L 2. Уровень по умолчанию 0, что означает полное отсутствие сообщений, за исключением сообщений об ошибках.
Параметр -h указываем зеркало для синхронизации, которое мы получили с помощью fastest_cvsup.
После того, как вы синхронизировали ваше локальное дерево исходных текстов с некоторой версией FreeBSD, то можно использовать эти исходные тексты для перестроения системы.
СБОРКА "МИРА"
ВНИМАНИЕ !!!
Перед началом каких-либо действий внимательно читаем следующие файлы
/usr/src/Makefile
/usr/src/UPDATING
/usr/src/sys/i386/conf/NOTES
После этого создаем и редактируем make.conf
# cp /usr/share/examples/etc/make.conf /etc
#
# /etc/make.conf
#

# Тип процессора
# Intel x86 architecture:
# (AMD CPUs) opteron athlon64 athlon-mp athlon-xp athlon-4
# athlon-tbird athlon k8 k6-3 k6-2 k6 k5 nocona
#
# (Intel CPUs) pentium4[m] prescott pentium3[m] pentium2
# penitumpro pentium-mmx pentium i486 i386
#
# Alpha/AXP architecture: ev67 ev6 pca56 ev56 ev5 ev45 ev4
#
# AMD64 architecture: opteron, athlon64, nocona
#
# Intel ia64 architecture: itanium2, itanium
#
CPUTYPE=athlon-xp

Флаги, использующиеся при компиляции кода, написанного на с.
Использовать флаги оптимизации кроме -O и -O2, например -O3, не рекомендуется.
CFLAGS=-O2 -pipe

Флаги, использующиеся при компиляции кода, написанного на с++
CXXFLAGS+=-fconserve-space

Определяет тип оболочки, используемый make, для обработки скриптов в make файлах. Поддерживаемые оболочки - sh, ksh, csh. Рекомендуют использовать sh.
MAKE_SHELL=sh

Флаги, использующиеся только для компиляции ядра со специальной оптимизацией
COPTFLAGS=-O2 -pipe

Для того, чтобы не пересобирать различные части системы, необходимо раскомментировать соответствующие строки. Что именно пересобирать, а что нет, зависит от самой системы и дать общие рекомендации практически невозможно :(. Хотя игры вряд ли пригодятся на сервере, так что их смело можно не пересобирать.

Не собирать поддержку Bluetooth
NO_BLUETOOTH=true

Не собирать поддержку фортрана (язык программирования)
NO_FORTRAN=true

Не собирать поддержку isdn
NO_I4B=true

Не собирать поддержку NIS (Network Information System)
NO_NIS=true

Не собирать поддержку ATM (Asynchronous Transfer Mode)
NOATM=true

Не собирать поддержку игр
NOGAMES=true

Не собирать поддержку протокола IPv6
NOINET6=true

Не компилировать профилирующие библиотеки, как правило они очень редко необходимы.
NOPROFILE=true

Поддержка IDEA (128 bit symmetric encryption) разрешается для любого некоммерческого использования
MAKE_IDEA=YES

Определяет, как долго система будет ждать нажатие клавиши перед тем, как начать загрузку ядра по умолчанию.
Время задается в миллисекундах.
BOOTWAIT=3000

# The default serial console speed is 9600.
# Set the speed to a larger value
# for better interactive response.
#
BOOT_COMCONSOLE_SPEED=115200

# Документация
#
# Список языков и кодировок, которые необходимо собрать и установить
DOC_LANG=en_US.ISO8859-1 ru_RU.KOI8-R
ПРИМЕЧАНИЕ !!!
Это лишь небольшая часть возможных параметров, весь список можно посмотреть в /usr/share/examples/etc/make.conf, а также man make.conf.
После того, как мы закончили редактировать make.conf можно непосредственно начать пересборку мира. Для этого выполняем следующие команды.
# cd /usr/src/
# make buildworld
--------------------------------------------------------------

>>> Rebuilding the temporary build tree

--------------------------------------------------------------

rm -rf /usr/obj/usr/src/i386

mkdir -p /usr/obj/usr/src/i386/legacy/usr/bin

mkdir -p /usr/obj/usr/src/i386/legacy/usr/games
...
gzip -cn /usr/src/usr.sbin/zic/zdump/../zdump.8 > zdump.8.gz

===> usr.sbin/zzz

gzip -cn /usr/src/usr.sbin/zzz/zzz.8 > zzz.8.gz

===> etc
КОМПИЛЯЦИЯ ЯДРА
Ядро - это основная часть операционной системы FreeBSD. Оно ответственно за управление памятью, параметры безопасности, работу с сетью, доступ к дискам и многое другое. Несмотря на то, что FreeBSD становится всё более динамически конфигурируемой, иногда приходится собирать собственное ядро.
Сборка собственного ядра - один из наиболее важных ритуалов, через который должен пройти практически любой пользователь BSD. Несмотря на длительность этого процесса, ваша FreeBSD останется только в выигрыше. В отличие от ядра GENERIC, которое должно поддерживать широкий спектр аппаратного обеспечения, собственное ядро содержит поддержку аппаратного обеспечения только вашего компьютера. Это может давать следующие преимущества:
" Меньшее время загрузки. Поскольку ядро будет пытаться определить только то аппаратное обеспечение, которое установлено в вашем компьютере, время, которое потребуется системе для загрузки, может значительно уменьшиться.
" Уменьшение использования памяти. Собственное ядро часто использует меньше памяти, чем ядро GENERIC, что очень важно, поскольку ядро всегда находится в физической памяти. Именно по этой причине собственное ядро особенно полезно при использовании систем с малым объемом оперативной памяти.
" Поддержка дополнительного аппаратного обеспечения. Собственное ядро позволяет вам добавить поддержку устройств, отсутствующих в ядре GENERIC.
ПРИМЕЧАНИЕ !!!
В примерах этой статьи подразумевается, что вы используете архитектуру i386. Если это не так, измените каталоги, указанные в примерах, в соответствии с архитектурой вашей системы.
Создаем свой конфигурационный файл ядра.


# cd /usr/src/sys/i386/conf/
# cp GENERIC kernel-`date '+%Y%m%d'`


ПРИМЕЧАНИЕ !!!
Не редактируйте непосредственно GENERIC, он может быть также перезаписан при следующем обновлении дерева исходных текстов, и изменения ядра будут потеряны.
Теперь необходимо отредактировать конфигурационный файл в любом текстовом редакторе. Формат конфигурационного файла достаточно прост. Каждая строка представляет собой ключевое слово и один или более аргументов. Для простоты большинство строк содержат только один аргумент. Всё, что следует, за символом # является комментарием и игнорируется. Следующие разделы описывают каждый параметр, в порядке, в котором они появляются в GENERIC. За полным списком архитектурно-зависимых параметров и устройств обратитесь к файлу NOTES в том же каталоге, что и GENERIC. Архитектурно независимые параметры находятся в /usr/src/sys/conf/NOTES.
Получить список всех возможных опций можно, выполнив следующую команду


# cd /usr/src/sys/i386/conf
# make LINT
cat ../../conf/NOTES NOTES | sed -E -n -f ../../conf/makeLINT.sed > LINT


После выполнения этой команды в /usr/src/sys/i386/conf буден создан файл LINT.
#
# /usr/src/sys/i386/conf/kernel-04.03.2006
#

Это архитектура машины. Она должна быть одной из следующих:
alpha, amd64, i386, ia64, pc98, powerpc, или sparc64 machine i386

Эта опция указывает тип процессора, который используется в вашей системе. В конфигурационном файле может быть несколько вхождений этой опции, но для собственного ядра лучше указывать только тот тип процессора, который установлен в вашей системе.
cpu I686_CPU

Этот параметр определяет 'метку' ядра. Необходимо, чтобы она соответствовала названию файла конфигурации ядра. Значение, которое вы присвоите параметру ident будет выводиться в процессе загрузки
ident "kernel-04.03.2006"

В FreeBSD 5.X и более поздних device.hints используются для настройки параметров драйверов устройств. Используя опцию hints вы можете вкомпилировать эти параметры статически в ваше ядро.
В этом случае не требуется создавать файл device.hints в каталоге /boot.
hints "GENERIC.hints"

Традиционный планировщик FreeBSD. В зависимости от загруженности системы, вы можете повысить производительность, используя новый
планировщик FreeBSD ULE, который был специально разработан для SMP, но отлично работает также и на однопроцессорных системах. Если вы хотите попробовать этот планировщик, замените SCHED_4BSD на SCHED_ULE в файле конфигурации ядра.
options SCHED_4BSD

Поддержка сетевых возможностей. Оставьте эту опцию включенной, даже если вы не планируете подключаться к сети. Большинство программ требуют, чтобы работал хотя бы интерфейс обратной связи (loopback) так что эта опция в принципе является обязательной.
options INET

Включает поддержку коммуникационных протоколов IPv6.
options INET6

Включает поддержку основной файловой системы. Не удаляйте эту опцию, если вы планируете загружаться с жесткого диска.
options FFS

Этот параметр включает в ядре технологию Soft Updates, которая повышает скорость записи на диски.
options SOFTUPDATES

Этот параметр, присутствующий только в FreeBSD 5.X, включает в ядре поддержку списков управления доступом (ACL). ACL включены по умолчанию и не должны выключаться в случае, если они ранее использовались на файловой системе, так как это удалит списки управления доступом и изменит то, как защищены файлы, непредсказуемым образом.
options UFS_ACL

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

Этот параметр включает поддержку использования дисков в памяти для корневой файловой системы.
options MD_ROOT

Поддержка NFS (Network File System). Если вы не планируете монтировать разделы с файлового сервера UNIX® через TCP/IP, вы можете исключить этот параметр из конфигурационного файла ядра.
# options NFSCLIENT
# options NFSSERVER
# options NFS_ROOT

Если вы не собираетесь монтировать форматированный в DOS раздел жесткого диска в момент загрузки, вы можете безопасно закомментировать этот параметр.
# options MSDOSFS

Если у вас нет привода CDROM или вы будете лишь изредка монтировать компакт-диски с данными, закомментируйте эту строку, так как необходимый модуль будет загружен автоматически при первом монтировании компакт-диска с данными. Для использования звуковых компакт-дисков эта файловая система не потребуется (хотя зачем они на сервере могут понадобится?).
options CD9660

Файловая система процессов. Это виртуальная файловая система монтируемая в /proc, которая позволяет таким приложениям, как ps выдавать вам больше информации о запущенных процессах. В FreeBSD 5.X и выше, использование PROCFS не требуется.
options PROCFS

PSEUDOFS недоступна в FreeBSD 4.X.
options PSEUDOFS

Этот параметр делает возможным наличие большого количества разделов на одном диске.
options GEOM_GPT

Совместимость с 4.3BSD. Не выключайте эту опцию, некоторые приложения будут вести себя странно, если этой опции не будет в ядре.
options COMPAT_43

Эта опция требуется в FreeBSD 5.X для платформ i386™ и Alpha для поддержки приложений, собранных на более старых версиях FreeBSD, которые используют старые интерфейсы вызовов.
options COMPAT_FREEBSD4

Этот параметр заставляет ядро приостановиться на 15 секунд перед тем, как идентифицировать каждое устройство SCSI в вашей системе. Если у вас установлены только жесткие диски IDE, вы можете игнорировать эту опцию.
options SCSI_DELAY=15000

Включает поддержку трассировки процессов, очень удобно при отладке
options KTRACE

Этот параметр предоставляет поддержку разделяемой памяти System V. В основном используется приложениями, интенсивно работающих с графикой. Если вы используете X, эта опция будет необходима.
# options SYSVSHM

Поддержка сообщений System V. Этот параметр добавляет в ядро всего лишь несколько сотен байт.
options SYSVMSG

Поддержка семафоров System V. Этот параметр добавляет в ядро всего лишь несколько сотен байт.
options SYSVSEM

Расширения реального времени, добавленные 1993 POSIX®. Определенные приложения из коллекции используют их, например StarOffice™.
options _KPOSIX_PRIORITY_SCHEDULING

Этот параметр относится к клавиатуре. Он добавляет CDEV в /dev.
options KBD_INSTALL_CDEV

Распечатка регистров для облегчения отладки.
options AHC_REG_PRETTY_PRINT
options AHD_REG_PRETTY_PRINT

Giant - имя механизма защиты ('спящего' мьютекса) для крупных наборов ресурсов ядра. Параметр ADAPTIVE_GIANT включает Giant в число адаптивных мьютексов. Если вы не уверены, то лучше оставьте этот параметр в покое.
options ADAPTIVE_GIANT

Устройство apic разрешает использование набора I/O APIC для распределения прерываний
device apic

Все компьютеры, поддерживаемые FreeBSD, имеют хотя бы одно устройство ISA. Не удаляйте эту строку, даже если в вашем компьютере нет слотов ISA
device isa

Включите эту опцию если у вас материнская плата поддерживает EISA.
device eisa

Включите этот параметр, если у вас материнская плата с поддержкой PCI. Это включит автоопределение карт PCI.
device pci

Контроллер флоппи-диска
device fdc

Этот драйвер поддерживает все устройства ATA и ATAPI. Вам необходима только одна строка device ata в ядре для того, чтобы обнаружить все PCI устройства ATA/ATAPI в современных машинах.
device ata

Эта строка необходима вместе с device ata для поддержки дисков ATA
device atadisk

Эта строка необходима вместе с device ata для поддержки дисков ATA RAID
device ataraid

Поддержка приводов ATAPI CDROM.
device atapicd

Поддержка флоппи-приводов ATAPI
# device atapifd

Поддержка ленточных приводов ATAPI (стримеров).
device atapist

Заставляет драйвер нумеровать устройства статически, в противном случае происходит динамическая нумерация.
options ATA_STATIC_ID

Поддержка различных SCSI контроллеров. Если у вас в системе исключительно IDE устройства, то можно удалить все эти строки.
# device ahb # EISA AHA1742 family
# device ahc # AHA2940 and onboard AIC7xxx devices
# device ahd # AHA39320/29320 and onboard AIC79xx devices
# device amd # AMD 53C974 (Tekram DC-390(T))
# device isp # Qlogic family
# device mpt # LSI-Logic MPT-Fusion
# device ncr # NCR/Symbios Logic
# device sym # NCR/Symbios Logic (newer chipsets)
# device trm # Tekram DC395U/UW/F DC315U adapters
# device adv # Advansys SCSI adapters
# device adw # Advansys wide SCSI adapters
# device aha # Adaptec 154x SCSI adapters
# device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
# device bt # Buslogic/Mylex MultiMaster SCSI adapters
# device ncv # NCR 53C500
# device nsp # Workbit Ninja SCSI-3
# device stg # TMC 18C30/18C50

Различные перефирийные устройства SCSI. USB драйвер umass (и некоторые другие драйверы) используют подсистему SCSI, хотя и не являются настоящими SCSI устройствами. Следовательно, вам необходимо сохранить поддержку SCSI, если какой-либо из этих драйверов включен в конфигурацию ядра.
device scbus
# device ch # SCSI media changers
device da
# device sa # Sequential Access (tape etc)
# device cd # CD
# device pass # Passthrough device (direct SCSI access)
# device ses # SCSI Environmental Services (and SAF-TE)

# Поддерживаемые RAID-контроллеры.
# device amr # AMI MegaRAID
# device arcmsr # Areca SATA II RAID
# device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
# device ciss # Compaq Smart RAID 5*
# device dpt # DPT Smartcache III, IV
# device hptmv # Highpoint RocketRAID 182x
# device iir # Intel Integrated RAID
# device ips # IBM (Adaptec) ServeRAID
# device mly # Mylex AcceleRAID/eXtremeRAID
# device twa # 3ware 9000 series PATA/SATA RAID
# device aac # Adaptec FSA RAID
# device aacp # SCSI passthrough for aac (requires CAM)
# device ida # Compaq Smart RAID
# device mlx # Mylex DAC960 family
# device pst # Promise Supertrak SX6000
# device twe # 3ware ATA RAID

Контроллер клавиатуры предоставляет средства ввода/вывода для клавиатуры AT и PS/2 устройств. Этот контроллер необходим драйверу клавиатуры (atkbd) и PS/2 устройств (psm)
device atkbdc

Драйвер вместе с контроллером atkbdc предоставляет доступ к клавиатуре AT 84 или улучшенной клавиатуре AT, которая подключена к контроллеру AT клавиатуры.
device atkbd

Используйте это устройство, если ваша мышь включается в порт PS/2.
device psm

Драйвер VGA видеокарты.
device vga

Заставка при загрузке. Хранители экрана также требуют это устройство
# device splash

Это драйвер консоли по умолчанию, который имитирует консоль SCO
device sc

VT220-совместимый драйвер консоли, обратно совместимый с VT100/102
device vt
options XSERVER
options FAT_CURSOR

Включите эту опцию, если у вас есть AGP карта в системе
device agp

Поддержка FPU. Этот параметр является обязательным.
device npx

Поддержка Advanced Power Management. Чаще всего используется в лэптопах.
# device apm

Устройство таймера для управления энергопотреблением, APM и ACPI
device pmtimer

Поддержка PCMCIA. Включите ее, если вы используете лэптоп.
device cbb
device pccard
device cardbus

Поддержка COM портов
device sio

Интерфейс параллельного порта на шине ISA.
device ppc

Поддержка шины параллельного порта
device ppbus

Поддержка принтеров на параллельном порту.
device lpt

Драйвер TCP/IP через параллельный порт
device plip

Поддержка ввода/вывода общего назначения
device ppi

Драйвер привода Iomega Zip. Требует наличия scbus и da
device vpo

Раскомментируйте это устройство, если у вас есть 'простая' последовательная или параллельная PCI карта, поддерживаемаядрайвером puc
device puc

Драйвера для различных сетевых карт PCI.
# device de # DEC/Intel DC21x4x (``Tulip'')
# device em # Intel PRO/1000 adapter Gigabit Ethernet Card
# device ixgb # Intel PRO/10GbE Ethernet Card
# device txp # 3Com 3cR990 (``Typhoon'')
# device vx # 3Com 3c590, 3c595 (``Vortex'')

Поддержка шины MII требуется для некоторых PCI 10/100 Ethernet карт, которые используют MII-совместимые передатчики или реализуют интерфейс управления передатчиком, который имитирует MII
device miibus

Драйвера, которые используют контроллер шины MII
# device bfe # Broadcom BCM440x 10/100 Ethernet
# device bge # Broadcom BCM570xx Gigabit Ethernet
# device dc # DEC/Intel 21143 and various workalikes
# device fxp # Intel EtherExpress PRO/100B (82557, 82558)
# device lge # Level 1 LXT1001 gigabit ethernet
# device nge # NatSemi DP83820 gigabit ethernet
# device pcn # AMD Am79C97x PCI 10/100
# device re # RealTek 8139C+/8169/8169S/8110S
# device rl # RealTek 8129/8139
# device sf # Adaptec AIC-6915
# device sis # Silicon Integrated Systems SiS 900/SiS 7016
# device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet
# device ste # Sundance ST201 (D-Link DFE-550TX)
# device ti # Alteon Networks Tigon I/II gigabit Ethernet
# device tl # Texas Instruments ThunderLAN
# device tx # SMC EtherPower II
# device vge # VIA VT612x gigabit ethernet
# device vr # VIA Rhine, Rhine II
# device wb # Winbond W89C840F
# device xl # 3Com 3c90x

Драйвера сетевых карт ISA. Чтобы узнать, какие сетевые карты каким драйвером поддерживаются. Ознакомьтесь с файлом
# /usr/src/sys/i386/conf/NOTES
# device cs # Crystal Semiconductor CS89x0 NIC
# device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards
# device ex # Intel EtherExpress Pro/10 and Pro/10+
# device ep # Etherlink III based cards
# device fe # Fujitsu MB8696x based cards
# device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device lnc # NE2100, NE32-VL Lance Ethernet cards
# device sn # SMC's 9000 series of Ethernet chips
# device xe # Xircom pccard Ethernet

Устройства ISA, использующие старую шину ISA
# devices that use the old ISA shims
#device le

Поддержка различных беспроводных карт.
# device wlan # 802.11 support
# device an # Aironet 4500/4800 802.11 wireless NICs.
# device awi # BayStack 660 and others
# device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
# device wl # Older non 802.11 Wavelan wireless NIC.

Стандартное устройство обратной связи для TCP/IP, т.н. петлевой интерфейс Этот параметр обязателен
device loop

Устройства системной памяти.
device mem

Этот параметр позволяет процессу получение привилегий ввода/вывода.
Он полезен для написания пользовательских программ, работающих с оборудованием непосредственно. Необходим для работы X Window system.
device io

Генератор случайных чисел для криптографической защиты.
device random

# Необходим в случае, если у вас есть сетевая карта. Он включает
# поддержку стандартного кода протокола Ethernet
device ether

Поддержка SLIP. SLIP был практически вытеснен PPP, который легче настраивается, лучше подходит для соединений модем-модем и имеет больше возможностей
device sl

Поддержка PPP в ядре для соединений dial-up
device ppp

Используется пользовательским программным обеспечением PPP
device tun

'псевдо-терминал' или имитированный порт для входа
device pty

Псевдо-устройства дисков в памяти.
device md

Поддержка туннелирования IPv6 через IPv4, IPv4 через IPv6, IPv4 через IPv4 и IPv6 через IPv6
device gif

Это псевдо-устройство захватывает пакеты, которые были посланы ему и перенаправляет их даемону трансляции IPv4/IPv6
device faith

Фильтр пакетов Berkeley. Это псевдо-устройство позволяет переводить сетевые интерфейсы в promiscuous режим. Если вы используете DCHP, не удаляйте эту опцию.
device bpf

Поддержка различных USB устройств.
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 ugen # Generic
device uhid # "Human Interface Devices"
# device ukbd # Keyboard
# device ulpt # Printer
# device umass # Disks/Mass storage
# device ums # Mouse
# device urio # Diamond Rio 500 MP3 player
# device uscanner # Scanners

USB Ethernet, необходимо чтобы была включена поддержка miibus
# device aue # ADMtek USB Ethernet
# device axe # ASIX Electronics USB Ethernet
# device cdce # Generic USB over Ethernet
# device cue # CATC USB Ethernet
# device kue # Kawasaki LSI USB Ethernet
# device rue # RealTek RTL8150 USB Ethernet

Поддержка FireWire
# device firewire # FireWire bus code
# device sbp # SCSI over FireWire
# device fwe # Ethernet over FireWire


Узнать тип процессора можно с помощью следующей команды
# dmesg | grep 86-class
CPU: AMD Athlon(tm) XP 1700+ (1579.35-MHz 686-class CPU)
После того, как вы закончили редактировать конфигурационный файл ядра, начинаем сборку ядра.
# cd /usr/src
# make buildkernel KERNCONF=kernel-04.03.2006
--------------------------------------------------------------

>>> Kernel build for kernel-04.03.2006 started on Sat Mar 04 19:02:40 EET 2006

--------------------------------------------------------------
===> kernel-04.03.2006

mkdir -p /usr/obj/usr/src/sys
--------------------------------------------------------------
>>> stage 1: configuring the kernel
--------------------------------------------------------------

>>> Kernel build for kernel-04.03.2006 completed on Sat Mar 04 19:29:07 EET 2006

--------------------------------------------------------------
ИНСТАЛЛЯЦИЯ НОВОГО ЯДРА
После того, как ядро успешно собралось необходимо его установить. Для этого необходимо выполнить следующую команду
# make installkernel KERNCONF=kernel-04.03.2006
--------------------------------------------------------------

>>> Making hierarchy

--------------------------------------------------------------

cd /usr/src; MAKEOBJDIRPREFIX=/usr/obj MACHINE_ARCH=i386 MACHINE=i386
CPUTYPE=athlon-xp GROFF_BIN_PATH=/usr/obj/usr/src/i386/legacy/usr/bin
GROFF_FONT_PATH=/usr/obj/usr/src/i386/legacy/usr/share/groff_font
GROFF_TMAC_PATH=/usr/obj/usr/src/i386/legacy/usr/share/tmac
PATH=/usr/obj/usr/src/i386/legacy/usr/sbin:/usr/obj/usr/src/i386/legacy/usr/bin
:/usr/obj/usr/src/i386/legacy/usr/games:/usr/obj/usr/src/i386/usr/sbin:
/usr/obj/usr/src/i386/usr/bin:/usr/obj/usr/src/i386/usr/games:/sbin:/bin:
/usr/sbin:/usr/bin make -f Makefile.inc1 hierarchy

===> wlan

install -o root -g wheel -m 555 wlan.ko /boot/kernel

===> xe

install -o root -g wheel -m 555 if_xe.ko /boot/kernel

===> xl

install -o root -g wheel -m 555 if_xl.ko /boot/kernel

kldxref /boot/kernel
УСТАНОВКА МИРА
После того, как мы установили новое ядро, нам осталось выполнить всего одно действие, а именно, установить мир. Но для этого мы должны перегрузиться в так называемый однопользовательский режим (single mode). Что мы собственно сейчас и сделаем.
# shutdown -r now
При появлении экрана приветствия (Welcome to FreeBSD!) выбираем 4й пункт - "Boot FreeBSD in single user mode".
В этом режиме файловые системы не монтируются автоматически, поэтому нам надо самим сделать это.
# mount -u /
# mount -a -t ufs
# swapon -a
При перестроении системы не будут обновляться некоторые каталоги (в частности, /etc, /var и /usr) с конфигурационными файлами.
Самым простым способом обновить такие файлы является запуск утилиты mergemaster, хотя можно сделать это и вручную, если вам так больше нравится. Вне зависимости от выбранного вами способа обязательно сделайте резервную копию каталога /etc на случай, если произойдёт что-то непредвиденное.
Утилита mergemaster является скриптом для оболочки Боурна, которая поможет вам в определении разницы между вашими конфигурационными файлами в каталоге /etc и конфигурационными файлами из дерева исходных текстов /usr/src/etc. Это является рекомендуемым способом синхронизации системных конфигурационных файлов с теми, что размещены в дереве исходных текстов.
# mergemaster -p
Данная команда будет сравнивать только те файлы, которые необходимы для успешного выполнения целей buildworld или installworld, включая /etc/make.conf
Теперь производим непосредственно установку нового мира
# cd /usr/src
# make installworld
Ну и теперь осталось только сравнить конфигурационные файлы. Для этого выполните следующую команду.
# mergemaster
mergemaster построит временное окружение для пользователя root, начиная от /, а затем заполнит его различными системными конфигурационными файлами. Эти файлы затем будут сравниваться с теми, что установлены в вашей системе. В этот момент файлы, которые имеют отличия, будут выданы в формате diff, где знак + будет означать добавленные или изменённые строки, а знак - будет означать строки, которые были либо полностью удалены, либо заменены на новые. Обратитесь к страницам справочной системы по команде diff для получения более полной информации о синтаксисе команды diff и формате выдачи отличий в файлах.
Затем mergemaster выдаст вам каждый файл, в котором есть изменения, и в этот момент у вас есть возможность либо удалить новый файл (который будем считать временным), установить временный файл в его неизменённом виде, объединить временный файл с установленным на данный момент, либо просмотреть выдачу diff ещё раз.
Выбор удаления временного файла укажет mergemaster на то, что мы хотим оставить наш текущий файл без изменений и удалить его новую версию. Делать это не рекомендуется, если только у вас нет причин вносить изменения в текущий файл. Вы можете получить помощь в любое время, набрав ? в приглашении mergemaster. Если пользователь выбирает пропуск файла, запрос появится снова после того, как будут обработаны все остальные файлы.
Выбор установки немодифицированного временного файла приведёт к замене текущего файла новым. Для большинства немодифицированных файлов это является подходящим вариантом.
Выбор варианта с объединением файла приведёт к вызову текстового редактора, содержащего текст обоих файлов. Теперь вы можете объединить их, просматривая оба файла на экране, и выбирая те части из обоих, что подходят для окончательного варианта. Когда файлы сравниваются на экране, то нажатие l выбирает содержимое слева, а нажатие r выбирает содержимое справа. В окончательном варианте будет файл, состоящий из обеих частей, который и будет установлен. Этот вариант используется для файлов, настройки в которых изменялись пользователем.
Выбор повторного просмотра diff-разниц выдаст вам разницы между файлами, как это делала утилита mergemaster до того, как запросила вас о выборе.
После того, как утилита mergemaster закончит работу с системными файлами, она выдаст запрос относительно других параметров. mergemaster может запросить вас относительно перестроения файла паролей и/или запуска MAKEDEV при использовании FreeBSD версий, меньших, чем 5.0, и завершит запросом на удаление оставшихся временных файлов.
Ну вот и все, теперь перегружаем систему и делаем проверку.
# uname -a
FreeBSD freebsd.turbogaz.net 5.4-RELEASE-p11 FreeBSD 5.4-RELEASE-p11 #0: Sat Mar 4 17:38:23 EET 2006
root@:/usr/obj/usr/src/sys/kernel-04.03.2006 i386
Как видно из вывода система у нас успешно обновилась.

Обновлено: 12.03.2015