Перефразировка про тех, кто не шарит в Unix: ни в бсду, ни в красную шапочку

+--------------------------------------------------------------------------------------------------------------------------[release: 01.03.05]----+
|
|
|
|
|
|
|
  _|_|  _|      _|  _|      _|_|      _|_|    _|_|_|  _|_|_|  _|    _|      _|  _|    _|_|_|
_|      _|          _|      _|  _|    _|  _|  _|  _|  _|  _|  _|_|  _|    _|_|_|_|_|  _|  _|
_|      _|_|_|  _|  _|      _|  _|    _|_|    _|  _|  _|_|    _|  _|_|      _|  _|    _|  _|
_|      _|  _|  _|  _|      _|  _|    _|      _|  _|  _|  _|  _|   |_|    _|_|_|_|_|  _|  _|
  _|_|  _|  _|  _|  _|_|_|  _|_|      _|      _|_|_|  _|  _|  _|    _|      _|  _|    _|_|_|
|
|
|
|
|
|
|
+-------------------------------------------------------------------------------------------------------------------------------------------------------+
+----------------------------------------[0x07: "FreeBSD" или "А чертик-то рулезный 0x03"]---------------------------------------+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Пришло время поговорить о сборке ядра еще раз. Первый раз я писал об этом в "CodePump #1", но времена меняются, и выходят все новые и новые версии данной ОС. Естественно, что меняется и ядро "FreeBSD". Данная статья описывает пересборку ядра для "FreeBSD 5.3", т.к. на данный момент у меня именно такая система. Было проведено множество экспериментов и выбрано то, что делать нужно. Поехали (с)


1. Способы сборки ядра и окружения
2. Конфигурация системы
3. Процесс сборки
4. Если..
5. "loader.conf"


1. Способы сборки ядра и окружения

1.1 Используем старый способ
Этот способ не рекомендую не только я, но и сами разработчики. Однако, если вам не важно, что у вас будет "крутится", и как оно будет это делать, то это способ для вас.

1) Запустите утилиту "config" и передайте в качестве параметра имя вашего ядра. Например:
# config KERNEL
Это создаст исходный код ядра.

2) Перейдите в каталог, где собирается ядро - обычно это "/usr/src/sys/i386/"
# cd /usr/src/sys/i386/

3) Собираем ядро командой "make", т.е.
# make depend
# make
Если все правильно, то необходимо установить ядро

4) делаем:
# make install

1.2 Новый способ сборки
Рекомендуемый отныне способ сборки

1) переходим в каталог "/usr/src"
# cd /usr/src

2) Собираем ядро с помощью "make" и указываем, что это ядро, и указываем его имя.
# make buildkernel KERNCONF=KERNEL
!вместо KERNEL необходимо указать имя вашего файла ядра

3) Запускаем процесс установки ядра
# make installkernel KERNCONF=KERNEL

После всех манипуляций вы получите новое ядро и модули в "/boot/kernel" и старое в "/boot/kernel.old".


2. Конфигурация системы

Рассмотрим необходимые действия для создания конфига ядра и окружения. В первую очередь это файл "/etc/make.conf". Если файл не существует в "/etc", то просто скопируйте его туда из "/usr/src/share/examples/etc/make.conf"

2.1 изменения в "make.conf"
Файл "make.conf" позволяет системе наиболее точно определять параметры для сборки не только ядра, но и любых программ.

Открываем файл на запись и раскомментируем такие параметры:

CPUTYPE - для определения архитектуры вашей машины.
может быть:
-----
Intel x86 architecture:
(AMD CPUs) athlon-mp athlon-xp athlon-4 athlon-tbird athlon k6-3 k6-2 k6 k5
(Intel CPUs) p4 p3 p2 i686 i586/mmx i586 i486 i386
Alpha/AXP architecture: ev67 ev6 pca56 ev56 ev5 ev45 ev4
Intel ia64 architecture: itanium
-----
пример:
CPUTYPE?=p4

Затем необходимо установить параметр KERNEL, т.е. вписать туда имя вашего (будущего) ядра.
пр. KERNEL=MIRACLE

Прошу учитывать, что в "make.conf" можно изменить много параметров, но я затрагиваю лишь основные.

NO_FORTRAN=true --таким образом, отменим сборку библиотек для фортрана (они вам нужны?)

NO_I4B=true --уверен, что вам не нужен "isdn4bsd"

NO_KERBEROS=true --если вы не являетесь человеком, помешанным на безопасности, то "Kerberos 5" вам так же не нужен

NO_LPR=true --и это нам не нужно

NO_SHAREDOCS=true --документация это хорошо, но мы уж как-нибудь ручками ее поставим

NOGAMES=true -- ='(

NOINET6=true --IP 6 версии вам пока не пригодится, в ближайшие года 3 точно

NOINFO=true --опять же, информация это очень хорошо, но зачем нам лишнее?

NOPROFILE=true --и это нам незачем

NO_BIND=true --скорее всего "BIND" вам не нужен

COMPAT4X=yes --это обязательно, совместимость с 4 веткой

Если у вас установлен "perl", то, скорее всего, в конце файла вы найдете нечто вроде этого:
PERL_VER=5.8.5
PERL_VERSION=5.8.5
PERL_ARCH=mach
NOPERL=yo
NO_PERL=yo
NO_PERL_WRAPPER=yo
не обращайте на это внимание, "perl" плохого не сделает =))

Допишите в файл такую строку:
CUPS_OVERWRITE_BASE=yes

2.2 изменения в "sysctl.conf"

Этот файл служит для изменения параметров окружения при загрузке. Если его нет в "/etc", то скопируйте его туда из "/usr/src/etc/".
Посмотреть все опции можно командой "sysctl" с параметром "-a":
# sysctl -a

Я советую сразу вписать в файл:
kern.coredump=0
kern.nodump_coredump=1
что, по идее, отключит создание dump-файлов. Это, конечно, если вы не разработчик чего-то, что падает в корку =)

kern.maxfiles=1024 --позволяет вам изменять максимальное количество открытых дескрипторов файлов. Данный параметр зависит от параметра "MAXUSERS" в конфиге ядра, который зависит от количества оперативной памяти и вашего желания.

Так же, стоит вписать в файл
hw.snd.pcm0.vchans=5
hw.snd.maxautovchans=5
что создаст 5 каналов для аудио

остальные параметры сейчас разбирать не буду, т.к. пишу отдельную статью на эту тему, но не успеваю к этому номеру.


2.3. изменения в конфиге ядра

Для начала конфигурирования ядра вашей системы я советую выполнить "dmesg", что покажет вам все устройства, которые система смогла найти.
# dmesg
Исходя из этих данных, начинаем создание файла конфигурации ядра.
Файл, созданный разработчиками, находится по адресу "/usr/src/sys/i386/conf/GENERIC". Желательно скопировать его в файл с другим названием и править уже последний. Выглядеть все должно примерно так:
# cd /usr/src/sys/i386/conf/
# cat GENERIC > KERNEL
# ee KERNEL

Теперь о параметрах. Первое, что вы должны изменить это архитектуру машины:
machine i386
может быть: alpha, amd64, i386, ia64, pc98, powerpc, sparc64 для соответствующих архитектур.


Затем параметр типа процессора:
cpu I486_CPU
cpu I586_CPU
cpu I686_CPU
Желательно оставить только 1 параметр, но если вы не уверены, что делаете, то оставьте все.

Теперь правим метку ядра, нужно чтобы параметр был именем вашего ядра, т.е. носил имя вашего файла конфигурации ядра. В нашем примере это "KERNEL".
ident KERNEL

Теперь подробнее о "maxusers". Этот параметр влияет на многие параметры системы, необходимо задать его таким, сколько пользователей одновременно (!) будут использовать ОС + чуть больше.
maxusers 25
Максимальное количество одновременно запущенных процессов будет высчитываться по формуле:
20 + 16 * maxusers
так что смотрите внимательно.
! Важно, что параметр влияет только на конфигурационные таблицы, а не на количество пользователей.

Обязательным параметром является npx, что позволяет использовать аппаратную и программную мощь для операций с плавающей точкой.
! Не отключайте параметр
device npx

Файл для настройки драйверов устройств должен быть в "/boot/device.hints". При задании "hints" вы "вкомпилируете" эти параметры в ядро. Я не рекомендую это делать. Закомментируйте.
# hints "GENERIC.hints"

Параметр, который увеличит ваше ядро раз так в 5-6, очень хорош для отладки. Обычно не используется, так что можно смело комментировать.
# makeoptions DEBUG=-g

Планировщик заданий стоит оставить, он может пригодиться.
options SCHED_4BSD
Так же доступен новый планировщик, но ходят слухи, что его пока не стоит использовать, но если очень хочется, то вместо "SCHED_4BSD" надо ввести "SCHED_ULE".

Еще одна обязательная опция, используемая для сетевых возможностей. Оставить необходимо, хотя бы, для обратной связи.
options INET

А вот смело убрать можно поддержку 6 версии IP:
# options INET6

Скорее всего, вы загружаетесь с жесткого диска, тогда оставьте "Berkeley Fast Filesystem"
options FFS

Для более высокой скорости записи на диски включите:
options SOFTUPDATES

И еще одна необходимая опция:
options UFS_ACL
вот что обещают разработчики системы, если вы ее отключите:
"ACL включены по умолчанию, и не должны выключаться в случае если они ранее использовались на файловой системе, так как это удалит списки управления доступом и изменит то, как защищены файлы, непредсказуемым образом".
Не выключайте =)

Вы можете увеличить скорость дисковых операций взамен лишней памяти (а такая бывает? =)
options UFS_DIRHASH

Поддержка использования дисков в памяти для корневой ФС:
options MD_ROOT

Если вы работаете в сети и подключаете сетевые диски BSD, то включите, я же не использую это дома, поэтому закомментировал
#options NFSCLIENT
#options NFSSERVER
#options NFS_ROOT

Для других ФС есть другие параметры. Для MS-DOS это:
options MSDOSFS
а для CD-ROM это:
options CD9660
Для всего этого есть модули (речь о модулях пойдет ниже)

options PROCFS
options PSEUDOFS
обеспечивают вам работу виртуальной ФС. Она необходима для многих программ, например для "ps" - для вывода большей информации.

Если у вас очень большое количество разделов на диске, то нужно использовать:
#options GEOM_GPT
у меня нет, поэтому отключил

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

Для всех "старых" платформ (i386, Alpha) следует использовать совместимость с FreeBSD4.X, т.е.
options COMPAT_FREEBSD4

Для полной идентификации SCSI-устройств ядру следует приостановиться на некоторое время, вы можете указать это время:
options SCSI_DELAY=15000
(15 сек)

Поддержка трассировки процессов:
#options KTRACE

Поддержка разделяемой памяти System V, используется многими приложениями. Поддержка семафоров System V и поддержка сообщений System V используются не часто, но отключать не рекомендую.
options SYSVSHM
options SYSVSEM
options SYSVMSG


Расширения реального времени:
options _KPOSIX_PRIORITY_SCHEDULING

Создание устройства клавиатуры в "/dev":
options KBD_INSTALL_CDEV

Распечатка регистров для более легкой отладки:
options AHC_REG_PRETTY_PRINT
options AHD_REG_PRETTY_PRIN

Включение "Giant" в число адаптивных. Giant - система защиты для ядра.
options ADAPTIVE_GIANT

В ядре можно сконфигурировать размер файла введенных команд options SC_HISTORY_SIZE=1024

Что отличает профессионала от новичка? Конечно же, цвет консоли (шутка).
Поменять цвет вашей консоли можно таким хитрым способом:
options SC_PIXEL_MODE
options SC_NORM_ATTR="(FG_GREEN|BG_BLACK)"
options SC_NORM_REV_ATTR="(FG_YELLOW|BG_GREEN)"
options SC_KERNEL_CONS_REV_ATTR="(FG_BLACK|BG_RED)"
options SC_KERNEL_CONS_ATTR="(FG_RED|BG_BLACK)"

Распределение прерываний набором I/O APIC. Желательно не отключать.
device apic

device isa
должно присутствовать в любой системе, т.е. обязательно. Включает определение isa-устройств.

Определение устройств eisa:
device eisa

Автоопределение карт PCI + интерфейс PCI->ISA
device pci

если у вас есть AGP-карта в системе, то включите:
device agp

Контроллер флоппи-дисков:
#device fdc
Поддержка устройств типа ATA и ATAPI.
device ata
поддержка дисков ATA:
device atadisk
поддержка ATA RAID дисков:
#device ataraid
поддержка ATAPI CD-ROM:
device atapicd
поддержка флоппи ATAPI:
#device atapifd
поддержка ATAPI-стримеров:
device atapist
статическая нумеровка устройств:
options ATA_STATIC_ID

Далее идут списки устройств, вам необходимо оставить те, которые у вас есть.
Например, есть PS/2 мышь, значит оставляем:
device psm
и нет "3ware ATA RAID", значит:
#device twe

Заставка при загрузке
device splash
так же это устройство требуется для некоторых скринсейверов.

Обязательно раскомментируйте:
device sc
это драйвер консоли.

Для поддержки "Advanced Power Management" раскомментируйте
#device apm

Таймер для "APM" и "ACPI":
#device pmtimer
! Внимание: нельзя одновременно использовать и APM, и ACPI!

Поддержка "PCMCIA" (для ноутбуков)
device cbb
device pccard
device cardbus

Будьте внимательны при выборе своей сетевой карты, многие из них требуют включенного:
device miibus
и включенного:
device ether

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

device bpf
приведу слова разработчиков:
"Фильтр пакетов Berkeley. Это псевдоустройство позволяет переводить сетевые интерфейсы в "неразборчивый" (promiscuous) режим, в котором перехватывается любой пакет в широковещательной сети (например, ethernet). Эти пакеты могут быть сохранены на диск и/или исследованы при помощи tcpdump".

Будьте внимательны при конфигурировании.


3. Процесс сборки

Если вы "пересобираете" ядро первый раз, то я советую не выполнять действия, приведенные в пунктах 1.1 и 1.2, а использовать вот такой метод:
1) cd /usr/src/
2) make buildworld
3) make buildkernel KERNCONF=KERNEL
4) make installkernel KERNCONF=KERNEL
5) reboot
6) mergemaster -p
7) make installworld
8) mergemaster
9) reboot

Перед этим очень важно сделать копию вашего ядра. Поймите, это очень важно. Так что скопируйте директорию "/boot/kernel" в "/boot/kernel.work". Не вздумайте копировать в "/boot/kernel.old", т.к. система автоматически запишет туда ваше ядро до пересборки. Делать копию необходимо, т.к. при двух неудачных сборках вы будете иметь 2 неработающих ядра.


4. Если...

что-то у вас не получается. Разберем, что может не получиться.

1) Команда "config" выдает ошибки.
Значит, что нарушен синтаксис конфигурационного файла ядра. Посмотрите внимательно на то место, на которое указывает "config" =)

2) Ошибки при "make".
Скорее всего, это значит, что вы написали что-то не то в файле конфигурации ядра, внимательно посмотрите на чем прерывается выполнение "make" и попробуйте исправить конфиг ядра.

3) Ошибки при установке (make install)
Здесь ситуация достаточно критичная - что-то не так в системе. Вспомните, что вы изменяли и попробуйте вернуть это на место.

4) Ядро не запускается.
Это очень распространено даже среди заядлых BSD-шников, хотя у них это происходит по недосмотру, а не от незнания. При загрузке системы появляется меню, из которого можно попасть в консоль загрузки. Загрузите работающую копию ядра оттуда, например вот так:
boot /boot/kernel.work
или
boot /boot/kernel.old

! Внимание: "/boot/kernel.old" содержит предыдущее ядро до сборки, в том числе может содержать неисправное.

Для восстановления ядра в консоли можно ввести:
# chflags noschg /kernel

Так же возможна проблема с "loader.conf", если вы его правили, как это сделать мы сейчас и разберем.....


5. "loader.conf"

файл должен находится в директории "/boot/kernel/defaults/". Открываем его редактором и начинаем править.

Для подробной информации при загрузке включите
verbose_loading="NO"
т.е. должно получится verbose_loading="YES"

Время показа меню загрузки (в сек.)
autoboot_delay="5"

Хаки ядра - те же опции, которые можно вписывать в "sysctl.conf".
kern.maxfiles="1024" #максимальное кол-во открытых дескрипторов
kern.maxproc="512" #максимальное кол-во процессов

Помните опцию в ядре для определения SCSI-устройств? вот она здесь:
kern.cam.scsi_delay="2000"

Далее идут модули. Фишка в том, что вы можете грузить драйверы устройств напрямую в ядро, без компиляции. До недавнего времени это было правилом хорошего тона, но сейчас оказалось, что драйвер в модуле "съедает" памяти почти в 2 раза больше, чем в ядре. Если у вас много оперативной памяти - то выносите все в модули.

Бинарная совместимость с "Linux".
Для этого используется эмулятор "linux":
linux_load="YES"

Так же вы можете загружать свои модули, синтаксис для модуля такой:
#module_load="YES" #загрузить модуль с именем "module"


К статье я креплю архив файлов своей системы.
/files/miracle.tgz


p.s. очень надеюсь, что никто не додумается собрать ядро МОЕЙ системы на СВОЕЙ машине.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+-----[content]-----------------------------------------------------------------------------------------------------------------------[mail us]-----+